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

Commit c84af40

Browse files
Cmanu change request name (#576)
Change the symbol request name. Refactor to send the request name in the message.
1 parent 22e445e commit c84af40

14 files changed

Lines changed: 296 additions & 24 deletions

src/NuGet.Services.Validation.Orchestrator/Job.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,7 @@ private static void ConfigureOrchestratorSymbolTypes(IServiceCollection services
599599
services.AddTransient<IValidationSetProvider<SymbolPackage>, ValidationSetProvider<SymbolPackage>>();
600600
services.AddTransient<IMessageService<SymbolPackage>, SymbolsPackageMessageService>();
601601
services.AddTransient<IBrokeredMessageSerializer<SymbolsValidatorMessage>, SymbolsValidatorMessageSerializer>();
602+
services.AddTransient<IBrokeredMessageSerializer<SymbolsIngesterMessage>, SymbolsIngesterMessageSerializer>();
602603
services.AddTransient<ISymbolsValidationEntitiesService, SymbolsValidationEntitiesService>();
603604
}
604605

@@ -653,25 +654,24 @@ private static void ConfigureSymbolsIngester(ContainerBuilder builder)
653654
.Keyed<ITopicClient>(SymbolsIngesterBindingKey);
654655

655656
builder
656-
.RegisterType<SymbolsMessageEnqueuer>()
657+
.RegisterType<SymbolsIngesterMessageEnqueuer>()
657658
.WithKeyedParameter(typeof(ITopicClient), SymbolsIngesterBindingKey)
658659
.WithParameter(
659660
(pi, ctx) => pi.ParameterType == typeof(TimeSpan?),
660661
(pi, ctx) => ctx.Resolve<IOptionsSnapshot<SymbolsIngesterConfiguration>>().Value.MessageDelay)
661-
.Keyed<ISymbolsMessageEnqueuer>(SymbolsIngesterBindingKey)
662-
.As<ISymbolsMessageEnqueuer>();
662+
.Keyed<ISymbolsIngesterMessageEnqueuer>(SymbolsIngesterBindingKey)
663+
.As<ISymbolsIngesterMessageEnqueuer>();
663664

664665
builder
665666
.RegisterType<SymbolsIngester>()
666667
.WithKeyedParameter(typeof(IValidatorStateService), SymbolsIngesterBindingKey)
667-
.WithKeyedParameter(typeof(ISymbolsMessageEnqueuer), SymbolsIngesterBindingKey)
668+
.WithKeyedParameter(typeof(ISymbolsIngesterMessageEnqueuer), SymbolsIngesterBindingKey)
668669
.AsSelf();
669670
}
670671

671672
private T GetRequiredService<T>()
672673
{
673674
return _serviceProvider.GetRequiredService<T>();
674675
}
675-
676676
}
677677
}

src/NuGet.Services.Validation.Orchestrator/NuGet.Services.Validation.Orchestrator.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
<Compile Include="Error.cs" />
5454
<Compile Include="Services\MessageServiceConfiguration.cs" />
5555
<Compile Include="Services\SymbolsMessageService.cs" />
56+
<Compile Include="Symbols\ISymbolsIngesterMessageEnqueuer.cs" />
5657
<Compile Include="Symbols\SymbolScanOnlyConfiguration.cs" />
5758
<Compile Include="Symbols\SymbolCriteriaEvaluator.cs" />
5859
<Compile Include="Symbols\SymbolScanValidator.cs" />
@@ -62,6 +63,7 @@
6263
<Compile Include="IPackageStatusProcessor.cs" />
6364
<Compile Include="Services\SymbolEntityService.cs" />
6465
<Compile Include="Symbols\ISymbolsMessageEnqueuer.cs" />
66+
<Compile Include="Symbols\SymbolsIngesterMessageEnqueuer.cs" />
6567
<Compile Include="Symbols\SymbolsMessageEnqueuer.cs" />
6668
<Compile Include="Symbols\SymbolsIngesterConfiguration.cs" />
6769
<Compile Include="Symbols\SymbolsIngester.cs" />
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System.Threading.Tasks;
5+
using NuGet.Jobs.Validation.Symbols.Core;
6+
7+
namespace NuGet.Services.Validation.Symbols
8+
{
9+
public interface ISymbolsIngesterMessageEnqueuer
10+
{
11+
/// <summary>
12+
/// Enqueues a message to one of the topics used by the Symbol Ingester.
13+
/// </summary>
14+
/// <param name="request">The validation request.</param>
15+
/// <returns>A <see cref="Task"/> that will be completed when the execution is completed.</returns>
16+
Task<SymbolsIngesterMessage> EnqueueSymbolsIngestionMessageAsync(IValidationRequest request);
17+
}
18+
}

src/NuGet.Services.Validation.Orchestrator/Symbols/SymbolsIngester.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ namespace NuGet.Services.Validation.Symbols
1515
public class SymbolsIngester : BaseValidator, IValidator
1616
{
1717
private readonly ISymbolsValidationEntitiesService _symbolsValidationEntitiesService;
18-
private readonly ISymbolsMessageEnqueuer _symbolMessageEnqueuer;
18+
private readonly ISymbolsIngesterMessageEnqueuer _symbolMessageEnqueuer;
1919
private readonly ITelemetryService _telemetryService;
2020
private readonly ILogger<SymbolsIngester> _logger;
2121

2222
public SymbolsIngester(
2323
ISymbolsValidationEntitiesService symbolsValidationEntitiesService,
24-
ISymbolsMessageEnqueuer symbolMessageEnqueuer,
24+
ISymbolsIngesterMessageEnqueuer symbolMessageEnqueuer,
2525
ITelemetryService telemetryService,
2626
ILogger<SymbolsIngester> logger)
2727
{
@@ -40,11 +40,12 @@ public async Task<IValidationResult> GetResultAsync(IValidationRequest request)
4040

4141
var result = SymbolsValidationEntitiesService.ConvertToIValidationResult(await _symbolsValidationEntitiesService.GetSymbolsServerRequestAsync(request));
4242
_logger.LogInformation(
43-
"Symbols status {Status} for PackageId: {PackageId}, PackageNormalizedVersion {PackageNormalizedVersion}, SymbolsPackageKey {SymbolsPackageKey} ",
43+
"Symbols status {Status} for PackageId: {PackageId}, PackageNormalizedVersion {PackageNormalizedVersion}, SymbolsPackageKey {SymbolsPackageKey} ValidationId {ValidationId}",
4444
result.Status,
4545
request.PackageId,
4646
request.PackageVersion,
47-
request.PackageKey);
47+
request.PackageKey,
48+
request.ValidationId);
4849

4950
return result;
5051
}
@@ -78,9 +79,9 @@ public async Task<IValidationResult> StartAsync(IValidationRequest request)
7879
}
7980

8081
_telemetryService.TrackSymbolsMessageEnqueued(ValidatorName.SymbolsIngester, request.ValidationId);
81-
await _symbolMessageEnqueuer.EnqueueSymbolsValidationMessageAsync(request);
82+
var message = await _symbolMessageEnqueuer.EnqueueSymbolsIngestionMessageAsync(request);
8283

83-
var newSymbolsRequest = SymbolsValidationEntitiesService.CreateFromValidationRequest(request, SymbolsPackageIngestRequestStatus.Ingesting);
84+
var newSymbolsRequest = SymbolsValidationEntitiesService.CreateFromValidationRequest(request, SymbolsPackageIngestRequestStatus.Ingesting, message.RequestName);
8485
var savedSymbolRequest = await _symbolsValidationEntitiesService.AddSymbolsServerRequestAsync(newSymbolsRequest);
8586

8687
if(savedSymbolRequest.RequestStatusKey != SymbolsPackageIngestRequestStatus.Ingesting)
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Threading.Tasks;
6+
using Microsoft.Extensions.Options;
7+
using NuGet.Jobs.Validation.Symbols.Core;
8+
using NuGet.Services.ServiceBus;
9+
10+
namespace NuGet.Services.Validation.Symbols
11+
{
12+
public class SymbolsIngesterMessageEnqueuer : ISymbolsIngesterMessageEnqueuer
13+
{
14+
private readonly ITopicClient _topicClient;
15+
private readonly TimeSpan? _messageDelay;
16+
private readonly IBrokeredMessageSerializer<SymbolsIngesterMessage> _serializer;
17+
18+
public SymbolsIngesterMessageEnqueuer(
19+
ITopicClient topicClient,
20+
IBrokeredMessageSerializer<SymbolsIngesterMessage> serializer,
21+
TimeSpan? messageDelay)
22+
{
23+
_topicClient = topicClient ?? throw new ArgumentNullException(nameof(topicClient));
24+
_serializer = serializer ?? throw new ArgumentNullException(nameof(serializer));
25+
_messageDelay = messageDelay;
26+
}
27+
28+
public async Task<SymbolsIngesterMessage> EnqueueSymbolsIngestionMessageAsync(IValidationRequest request)
29+
{
30+
var message = new SymbolsIngesterMessage(validationId: request.ValidationId,
31+
symbolPackageKey: request.PackageKey,
32+
packageId: request.PackageId,
33+
packageNormalizedVersion: request.PackageVersion,
34+
snupkgUrl: request.NupkgUrl,
35+
requestName : SymbolsValidationEntitiesService.CreateSymbolServerRequestNameFromValidationRequest(request));
36+
var brokeredMessage = _serializer.Serialize(message);
37+
38+
var visibleAt = DateTimeOffset.UtcNow + (_messageDelay ?? TimeSpan.Zero);
39+
brokeredMessage.ScheduledEnqueueTimeUtc = visibleAt;
40+
41+
await _topicClient.SendAsync(brokeredMessage);
42+
return message;
43+
}
44+
}
45+
}

src/Validation.Symbols.Core/EntityServices/SymbolsValidationEntitiesService.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,18 @@ public Task<SymbolsServerRequest> GetSymbolsServerRequestAsync(string requestNam
7171

7272
public async Task<SymbolsServerRequest> GetSymbolsServerRequestAsync(IValidationRequest validationRequest)
7373
{
74-
string requestName = validationRequest.PackageKey.ToString();
75-
return await GetSymbolsServerRequestAsync(requestName, validationRequest.PackageKey);
74+
string requestName = CreateSymbolServerRequestNameFromValidationRequest(validationRequest);
75+
return await GetSymbolsServerRequestAsync(requestName, validationRequest.PackageKey);
76+
}
77+
78+
/// <summary>
79+
/// From a <see cref="IValidationRequest"/> creates a symbol server request name.
80+
/// </summary>
81+
/// <param name="validationRequest"></param>
82+
/// <returns></returns>
83+
public static string CreateSymbolServerRequestNameFromValidationRequest(IValidationRequest validationRequest)
84+
{
85+
return $"{validationRequest.PackageKey}_{validationRequest.ValidationId}";
7686
}
7787

7888
/// <summary>
@@ -81,13 +91,13 @@ public async Task<SymbolsServerRequest> GetSymbolsServerRequestAsync(IValidation
8191
/// <param name="validationRequest">The <see cref="IValidationRequest"/>.</param>
8292
/// <param name="status">The <see cref="SymbolsPackageIngestRequestStatus"/>.</param>
8393
/// <returns></returns>
84-
public static SymbolsServerRequest CreateFromValidationRequest(IValidationRequest validationRequest, SymbolsPackageIngestRequestStatus status)
94+
public static SymbolsServerRequest CreateFromValidationRequest(IValidationRequest validationRequest, SymbolsPackageIngestRequestStatus status, string requestName)
8595
{
8696
return new SymbolsServerRequest()
8797
{
8898
Created = DateTime.UtcNow,
8999
LastUpdated = DateTime.UtcNow,
90-
RequestName = validationRequest.PackageKey.ToString(),
100+
RequestName = requestName,
91101
RequestStatusKey = status,
92102
SymbolsKey = validationRequest.PackageKey
93103
};
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
6+
namespace NuGet.Jobs.Validation.Symbols.Core
7+
{
8+
public class SymbolsIngesterMessage : ISymbolsValidatorMessage
9+
{
10+
public SymbolsIngesterMessage(Guid validationId,
11+
int symbolPackageKey,
12+
string packageId,
13+
string packageNormalizedVersion,
14+
string snupkgUrl,
15+
string requestName)
16+
{
17+
ValidationId = validationId;
18+
SymbolsPackageKey = symbolPackageKey;
19+
PackageId = packageId;
20+
PackageNormalizedVersion = packageNormalizedVersion;
21+
SnupkgUrl = snupkgUrl;
22+
RequestName = requestName;
23+
}
24+
25+
public Guid ValidationId { get; }
26+
27+
public int SymbolsPackageKey { get; }
28+
29+
public string PackageId { get; }
30+
31+
public string PackageNormalizedVersion { get; }
32+
33+
public string SnupkgUrl { get; }
34+
35+
/// <summary>
36+
/// This is the request name to be used when ingesting a symbols package to VSTS.
37+
/// </summary>
38+
public string RequestName { get; }
39+
}
40+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
using NuGet.Services.ServiceBus;
6+
7+
namespace NuGet.Jobs.Validation.Symbols.Core
8+
{
9+
public class SymbolsIngesterMessageSerializer : IBrokeredMessageSerializer<SymbolsIngesterMessage>
10+
{
11+
private const string SchemaName = "SymbolIngesterMessageData";
12+
13+
private IBrokeredMessageSerializer<SymbolsIngesterMessageDataV1> _serializer =
14+
new BrokeredMessageSerializer<SymbolsIngesterMessageDataV1>();
15+
16+
public SymbolsIngesterMessage Deserialize(IBrokeredMessage message)
17+
{
18+
var deserializedMessage = _serializer.Deserialize(message);
19+
20+
return new SymbolsIngesterMessage(
21+
deserializedMessage.ValidationId,
22+
deserializedMessage.SymbolsPackageKey,
23+
deserializedMessage.PackageId,
24+
deserializedMessage.PackageNormalizedVersion,
25+
deserializedMessage.SnupkgUrl,
26+
deserializedMessage.RequestName);
27+
}
28+
29+
public IBrokeredMessage Serialize(SymbolsIngesterMessage message)
30+
=> _serializer.Serialize(new SymbolsIngesterMessageDataV1
31+
{
32+
ValidationId = message.ValidationId,
33+
SymbolsPackageKey = message.SymbolsPackageKey,
34+
PackageId = message.PackageId,
35+
PackageNormalizedVersion = message.PackageNormalizedVersion,
36+
SnupkgUrl = message.SnupkgUrl,
37+
RequestName = message.RequestName
38+
});
39+
40+
[Schema(Name = SchemaName, Version = 1)]
41+
private class SymbolsIngesterMessageDataV1
42+
{
43+
public Guid ValidationId { get; set; }
44+
45+
public int SymbolsPackageKey { get; set; }
46+
47+
public string PackageId { get; set; }
48+
49+
public string PackageNormalizedVersion { get; set; }
50+
51+
public string SnupkgUrl { get; set; }
52+
53+
public string RequestName { get; set; }
54+
}
55+
}
56+
}

src/Validation.Symbols.Core/SymbolsValidatorMessageSerializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace NuGet.Jobs.Validation.Symbols.Core
88
{
99
public class SymbolsValidatorMessageSerializer : IBrokeredMessageSerializer<SymbolsValidatorMessage>
1010
{
11-
private const string SchemaName = "SignatureValidationMessageData";
11+
private const string SchemaName = "SymbolsValidatorMessageData";
1212

1313
private IBrokeredMessageSerializer<SymbolsValidatorMessageDataV1> _serializer =
1414
new BrokeredMessageSerializer<SymbolsValidatorMessageDataV1>();

src/Validation.Symbols.Core/Validation.Symbols.Core.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
<Compile Include="Properties\AssemblyInfo.cs" />
5252
<Compile Include="Properties\AssemblyInfo.*.cs" />
5353
<Compile Include="Settings.cs" />
54+
<Compile Include="SymbolsIngesterMessage.cs" />
55+
<Compile Include="SymbolsIngesterMessageSerializer.cs" />
5456
<Compile Include="SymbolsValidatorMessageSerializer.cs" />
5557
<Compile Include="SymbolsValidatorMessage.cs" />
5658
<Compile Include="ZipArchiveService.cs" />

0 commit comments

Comments
 (0)