Skip to content

Commit bf87dbf

Browse files
authored
Handle 404 exceptions in StatusAggregator (#10430)
1 parent 93aca5d commit bf87dbf

2 files changed

Lines changed: 17 additions & 5 deletions

File tree

src/StatusAggregator/Messages/MessageFactory.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Threading.Tasks;
6+
using Azure;
67
using Microsoft.Extensions.Logging;
78
using NuGet.Services.Status;
89
using NuGet.Services.Status.Table;
@@ -36,7 +37,17 @@ public async Task CreateMessageAsync(EventEntity eventEntity, DateTime time, Mes
3637
{
3738
_logger.LogInformation("Creating new message of type {Type} for event {EventRowKey} at {Timestamp} affecting {ComponentPath} with status {ComponentStatus}.",
3839
type, eventEntity.RowKey, time, component.Path, status);
39-
var existingMessage = await _table.RetrieveAsync<MessageEntity>(MessageEntity.GetRowKey(eventEntity, time));
40+
41+
MessageEntity existingMessage = null;
42+
try
43+
{
44+
existingMessage = await _table.RetrieveAsync<MessageEntity>(MessageEntity.GetRowKey(eventEntity, time));
45+
}
46+
catch (RequestFailedException e) when (e.Status == 404)
47+
{
48+
_logger.LogInformation("No existing message found.");
49+
}
50+
4051
if (existingMessage != null)
4152
{
4253
_logger.LogInformation("Message already exists, will not recreate.");
@@ -83,4 +94,4 @@ public async Task UpdateMessageAsync(EventEntity eventEntity, DateTime time, Mes
8394
await _table.ReplaceAsync(existingMessage);
8495
}
8596
}
86-
}
97+
}

tests/StatusAggregator.Tests/Messages/MessageFactoryTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
55
using System.Threading.Tasks;
6+
using Azure;
67
using Azure.Data.Tables;
78
using Microsoft.Extensions.Logging;
89
using Moq;
@@ -101,10 +102,10 @@ public async Task CreatesNewMessage()
101102
Builder
102103
.Setup(x => x.Build(type, component, expectedStatus))
103104
.Returns(contents);
104-
105+
105106
Table
106107
.Setup(x => x.RetrieveAsync<MessageEntity>(MessageEntity.GetRowKey(EventEntity, Time)))
107-
.ReturnsAsync((MessageEntity)null)
108+
.ThrowsAsync(new RequestFailedException(404, "Not Found"))
108109
.Verifiable();
109110

110111
Table

0 commit comments

Comments
 (0)