diff --git a/src/ServiceControl.Transports.SQLServer/QueueLengthProvider.cs b/src/ServiceControl.Transports.SQLServer/QueueLengthProvider.cs index 7864f7f..5cc39da 100644 --- a/src/ServiceControl.Transports.SQLServer/QueueLengthProvider.cs +++ b/src/ServiceControl.Transports.SQLServer/QueueLengthProvider.cs @@ -41,7 +41,7 @@ public void Process(EndpointInstanceId endpointInstanceId, EndpointMetadataRepor var localAddress = metadataReport.LocalAddress; var sqlTable = SqlTable.Parse(localAddress, defaultSchema); - + tableNames.AddOrUpdate(endpointInputQueue, _ => sqlTable, (_, currentSqlTable) => { if (currentSqlTable.Equals(sqlTable) == false) @@ -59,7 +59,7 @@ public void Process(EndpointInstanceId endpointInstanceId, TaggedLongValueOccurr { //HINT: Sql server endpoints do not support endpoint level queue length monitoring } - + public Task Start() { stop = new CancellationTokenSource(); @@ -110,7 +110,7 @@ void UpdateQueueLengthStore() { DateTicks = nowTicks, Value = tableSizes.TryGetValue(tableNamePair.Value, out var size) ? size : 0 - }}, + }}, tableNamePair.Key); } } @@ -144,24 +144,25 @@ async Task UpdateChunk(SqlConnection connection, KeyValuePair[] c using (var command = new SqlCommand(query, connection)) { - var reader = await command.ExecuteReaderAsync(token).ConfigureAwait(false); - - foreach (var chunkPair in chunk) + using (var reader = await command.ExecuteReaderAsync(token).ConfigureAwait(false)) { - await reader.ReadAsync(token).ConfigureAwait(false); + foreach (var chunkPair in chunk) + { + await reader.ReadAsync(token).ConfigureAwait(false); - var queueLength = reader.GetInt32(0); + var queueLength = reader.GetInt32(0); - if (queueLength == -1) - { - Logger.Warn($"Table {chunkPair.Key} does not exist."); - } - else - { - tableSizes.TryUpdate(chunkPair.Key, queueLength, chunkPair.Value); - } + if (queueLength == -1) + { + Logger.Warn($"Table {chunkPair.Key} does not exist."); + } + else + { + tableSizes.TryUpdate(chunkPair.Key, queueLength, chunkPair.Value); + } - await reader.NextResultAsync(token).ConfigureAwait(false); + await reader.NextResultAsync(token).ConfigureAwait(false); + } } } }