Skip to content
This repository was archived by the owner on Aug 3, 2024. It is now read-only.

Commit 3adaf50

Browse files
author
Scott Bommarito
authored
Add method to determine size of queue (#315)
1 parent d93769c commit 3adaf50

3 files changed

Lines changed: 26 additions & 0 deletions

File tree

src/NuGet.Services.Storage/AzureStorageQueue.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,12 @@ public async Task RemoveAsync(StorageQueueMessage message, CancellationToken tok
6464

6565
await (await _queueTask.Value).DeleteMessageAsync((message as AzureStorageQueueMessage).Message, token);
6666
}
67+
68+
public async Task<int?> GetMessageCount(CancellationToken token)
69+
{
70+
var queue = await _queueTask.Value;
71+
await queue.FetchAttributesAsync(token);
72+
return queue.ApproximateMessageCount;
73+
}
6774
}
6875
}

src/NuGet.Services.Storage/IStorageQueue.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ public interface IStorageQueue
3434
/// This method should throw if <paramref name="message"/> was not returned by <see cref="OnGetNext(CancellationToken)"/>.
3535
/// </remarks>
3636
Task RemoveAsync(StorageQueueMessage message, CancellationToken token);
37+
38+
/// <summary>
39+
/// Fetches the number of messages in the queue (or a close approximation).
40+
/// </summary>
41+
/// <param name="token">A token to cancel the task with.</param>
42+
/// <returns>An approximation of the number of messages in the queue or null if no approximation could be made.</returns>
43+
Task<int?> GetMessageCount(CancellationToken token);
3744
}
3845

3946
/// <summary>
@@ -68,5 +75,12 @@ public interface IStorageQueue<T>
6875
/// <paramref name="message"/> MUST have been previously returned by <see cref="GetNextAsync(CancellationToken)"/>.
6976
/// </remarks>
7077
Task RemoveAsync(StorageQueueMessage<T> message, CancellationToken token);
78+
79+
/// <summary>
80+
/// Fetches the number of messages in the queue (or a close approximation).
81+
/// </summary>
82+
/// <param name="token">A token to cancel the task with.</param>
83+
/// <returns>An approximation of the number of messages in the queue or null if no approximation could be made.</returns>
84+
Task<int?> GetMessageCount(CancellationToken token);
7185
}
7286
}

src/NuGet.Services.Storage/StorageQueue.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ public Task RemoveAsync(StorageQueueMessage<T> message, CancellationToken token)
4242
return _queue.RemoveAsync(SerializeMessage(message), token);
4343
}
4444

45+
public Task<int?> GetMessageCount(CancellationToken token)
46+
{
47+
return _queue.GetMessageCount(token);
48+
}
49+
4550
private StorageQueueMessage SerializeMessage(StorageQueueMessage<T> message)
4651
{
4752
if (message is DeserializedStorageQueueMessage<T> deserializedMessage)

0 commit comments

Comments
 (0)