From 0ef096b41ca63e8d21e38a578f8a9fcf5df148c4 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 9 Sep 2015 12:27:10 -0700 Subject: [PATCH] Increment connection id for logging --- src/Microsoft.AspNet.Server.Kestrel/Http/Connection.cs | 7 ++++++- src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs | 8 +++++--- .../SocketOutputTests.cs | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/Connection.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/Connection.cs index 823ba518c0..fdccb3122b 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/Connection.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/Connection.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Threading; using Microsoft.AspNet.Server.Kestrel.Infrastructure; using Microsoft.AspNet.Server.Kestrel.Networking; using Microsoft.Framework.Logging; @@ -13,6 +14,8 @@ namespace Microsoft.AspNet.Server.Kestrel.Http private static readonly Action _readCallback = ReadCallback; private static readonly Func _allocCallback = AllocCallback; + private static long _lastConnectionId; + private readonly UvStreamHandle _socket; private Frame _frame; private long _connectionId = 0; @@ -24,6 +27,8 @@ namespace Microsoft.AspNet.Server.Kestrel.Http { _socket = socket; ConnectionControl = this; + + _connectionId = Interlocked.Increment(ref _lastConnectionId); } public void Start() @@ -31,7 +36,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http Log.ConnectionStart(_connectionId); SocketInput = new SocketInput(Memory); - SocketOutput = new SocketOutput(Thread, _socket, Log); + SocketOutput = new SocketOutput(Thread, _socket, _connectionId, Log); _frame = new Frame(this); _socket.ReadStart(_allocCallback, _readCallback, this); } diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs index af490063fd..3c836df3c3 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/SocketOutput.cs @@ -17,6 +17,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http private readonly KestrelThread _thread; private readonly UvStreamHandle _socket; + private readonly long _connectionId; private readonly IKestrelTrace _log; // This locks access to to all of the below fields @@ -31,10 +32,11 @@ namespace Microsoft.AspNet.Server.Kestrel.Http private WriteContext _nextWriteContext; private readonly Queue _callbacksPending; - public SocketOutput(KestrelThread thread, UvStreamHandle socket, IKestrelTrace log) + public SocketOutput(KestrelThread thread, UvStreamHandle socket, long connectionId, IKestrelTrace log) { _thread = thread; _socket = socket; + _connectionId = connectionId; _log = log; _callbacksPending = new Queue(); } @@ -46,7 +48,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http Array.Copy(buffer.Array, buffer.Offset, copy, 0, buffer.Count); buffer = new ArraySegment(copy); - _log.ConnectionWrite(0, buffer.Count); + _log.ConnectionWrite(_connectionId, buffer.Count); bool triggerCallbackNow = false; @@ -155,7 +157,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http // This is called on the libuv event loop private void OnWriteCompleted(Queue> writtenBuffers, UvWriteReq req, int status, Exception error) { - _log.ConnectionWriteCallback(0, status); + _log.ConnectionWriteCallback(_connectionId, status); lock (_lockObj) { diff --git a/test/Microsoft.AspNet.Server.KestrelTests/SocketOutputTests.cs b/test/Microsoft.AspNet.Server.KestrelTests/SocketOutputTests.cs index 7577fa25d5..6253b0651d 100644 --- a/test/Microsoft.AspNet.Server.KestrelTests/SocketOutputTests.cs +++ b/test/Microsoft.AspNet.Server.KestrelTests/SocketOutputTests.cs @@ -39,7 +39,7 @@ namespace Microsoft.AspNet.Server.KestrelTests var kestrelThread = kestrelEngine.Threads[0]; var socket = new MockSocket(kestrelThread.Loop.ThreadId, new KestrelTrace(new TestLogger())); var trace = new KestrelTrace(new TestLogger()); - var socketOutput = new SocketOutput(kestrelThread, socket, trace); + var socketOutput = new SocketOutput(kestrelThread, socket, 0, trace); // I doubt _maxBytesPreCompleted will ever be over a MB. If it is, we should change this test. var bufferSize = 1048576; @@ -84,7 +84,7 @@ namespace Microsoft.AspNet.Server.KestrelTests var kestrelThread = kestrelEngine.Threads[0]; var socket = new MockSocket(kestrelThread.Loop.ThreadId, new KestrelTrace(new TestLogger())); var trace = new KestrelTrace(new TestLogger()); - var socketOutput = new SocketOutput(kestrelThread, socket, trace); + var socketOutput = new SocketOutput(kestrelThread, socket, 0, trace); var bufferSize = maxBytesPreCompleted; var buffer = new ArraySegment(new byte[bufferSize], 0, bufferSize);