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

Commit 88e57ec

Browse files
authored
Merge pull request #412 from NuGet/dev
[ReleasePrep][2018.04.25]RI of dev into master
2 parents d28d42e + 624482a commit 88e57ec

74 files changed

Lines changed: 1774 additions & 390 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/NuGet.Jobs.Common/Configuration/JobArgumentNames.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public static class JobArgumentNames
1414
public const string Once = "Once";
1515
public const string Sleep = "Sleep";
1616
public const string Interval = "Interval";
17+
public const string ReinitializeAfterSeconds = "ReinitializeAfterSeconds";
1718

1819
public const string WhatIf = "WhatIf";
1920

@@ -72,7 +73,7 @@ public static class JobArgumentNames
7273
public const string AzureCdnAccountNumber = "AzureCdnAccountNumber";
7374
public const string AzureCdnPlatform = "AzureCdnPlatform";
7475

75-
//Arguments shared by CollectAzureCdnLogs and ParseAzureCdnLogs
76+
//Arguments shared by CollectAzureCdnLogs, ParseAzureCdnLogs, Search.GenerateAuxiliaryData
7677
public const string AzureCdnCloudStorageAccount = "AzureCdnCloudStorageAccount";
7778
public const string AzureCdnCloudStorageContainerName = "AzureCdnCloudStorageContainerName";
7879

src/NuGet.Jobs.Common/JobRunner.cs

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ public static async Task Run(JobBase job, string[] commandLineArgs)
7272
loggerFactory = ConfigureLogging(job);
7373

7474
var runContinuously = !JobConfigurationManager.TryGetBoolArgument(jobArgsDictionary, JobArgumentNames.Once);
75+
var reinitializeAfterSeconds = JobConfigurationManager.TryGetIntArgument(jobArgsDictionary, JobArgumentNames.ReinitializeAfterSeconds);
7576
var sleepDuration = JobConfigurationManager.TryGetIntArgument(jobArgsDictionary, JobArgumentNames.Sleep); // sleep is in milliseconds
77+
7678
if (!sleepDuration.HasValue)
7779
{
7880
sleepDuration = JobConfigurationManager.TryGetIntArgument(jobArgsDictionary, JobArgumentNames.Interval);
@@ -88,12 +90,19 @@ public static async Task Run(JobBase job, string[] commandLineArgs)
8890
sleepDuration = 5000;
8991
}
9092

93+
if (!reinitializeAfterSeconds.HasValue)
94+
{
95+
_logger.LogInformation(
96+
$"{JobArgumentNames.ReinitializeAfterSeconds} command line argument is not provided or is not a valid integer. " +
97+
"The job will reinitialize on every iteration");
98+
}
99+
91100
// Ensure that SSLv3 is disabled and that Tls v1.2 is enabled.
92101
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;
93102
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;
94103

95104
// Run the job loop
96-
await JobLoop(job, runContinuously, sleepDuration.Value, jobArgsDictionary);
105+
await JobLoop(job, runContinuously, sleepDuration.Value, reinitializeAfterSeconds, jobArgsDictionary);
97106
}
98107
catch (Exception ex)
99108
{
@@ -123,22 +132,34 @@ private static string PrettyPrintTime(double milliSeconds)
123132
$"'{milliSeconds:F3}' ms (or '{seconds:F3}' seconds or '{minutes:F3}' mins)";
124133
}
125134

126-
private static async Task JobLoop(JobBase job, bool runContinuously, int sleepDuration, IDictionary<string, string> jobArgsDictionary)
135+
private static async Task JobLoop(
136+
JobBase job,
137+
bool runContinuously,
138+
int sleepDuration,
139+
int? reinitializeAfterSeconds,
140+
IDictionary<string, string> jobArgsDictionary)
127141
{
128142
// Run the job now
129143
var stopWatch = new Stopwatch();
144+
Stopwatch timeSinceInitialization = null;
130145

131146
while (true)
132147
{
133148
_logger.LogInformation("Running {RunType}", (runContinuously ? " continuously..." : " once..."));
134149
_logger.LogInformation("SleepDuration is {SleepDuration}", PrettyPrintTime(sleepDuration));
135150
_logger.LogInformation("Job run started...");
136-
151+
137152
var initialized = false;
138153
stopWatch.Restart();
154+
139155
try
140156
{
141-
job.Init(jobArgsDictionary);
157+
if (ShouldInitialize(reinitializeAfterSeconds, timeSinceInitialization))
158+
{
159+
job.Init(jobArgsDictionary);
160+
timeSinceInitialization = Stopwatch.StartNew();
161+
}
162+
142163
initialized = true;
143164

144165
await job.Run();
@@ -169,5 +190,23 @@ private static async Task JobLoop(JobBase job, bool runContinuously, int sleepDu
169190
await Task.Delay(sleepDuration);
170191
}
171192
}
193+
194+
private static bool ShouldInitialize(int? reinitializeAfterSeconds, Stopwatch timeSinceInitialization)
195+
{
196+
// If there is no wait time between reinitializations, always reinitialize.
197+
if (!reinitializeAfterSeconds.HasValue)
198+
{
199+
return true;
200+
}
201+
202+
// A null time since last initialization indicates that the job hasn't been initialized yet.
203+
if (timeSinceInitialization == null)
204+
{
205+
return true;
206+
}
207+
208+
// Otherwise, only reinitialize if the reinitialization threshold has been reached.
209+
return (timeSinceInitialization.Elapsed.TotalSeconds > reinitializeAfterSeconds.Value);
210+
}
172211
}
173212
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,8 @@ private static void ConfigurePackageSigningValidator(ContainerBuilder builder)
337337
builder
338338
.RegisterType<ValidatorStateService>()
339339
.WithParameter(
340-
(pi, ctx) => pi.ParameterType == typeof(Type),
341-
(pi, ctx) => typeof(PackageSigningValidator))
340+
(pi, ctx) => pi.ParameterType == typeof(string),
341+
(pi, ctx) => ValidatorName.PackageSigning)
342342
.Keyed<IValidatorStateService>(PackageSigningBindingKey);
343343

344344
// Configure the package signature verification enqueuer.
@@ -369,8 +369,8 @@ private static void ConfigurePackageCertificatesValidator(ContainerBuilder build
369369
builder
370370
.RegisterType<ValidatorStateService>()
371371
.WithParameter(
372-
(pi, ctx) => pi.ParameterType == typeof(Type),
373-
(pi, ctx) => typeof(PackageCertificatesValidator))
372+
(pi, ctx) => pi.ParameterType == typeof(string),
373+
(pi, ctx) => ValidatorName.PackageCertificate)
374374
.Keyed<IValidatorStateService>(PackageCertificatesBindingKey);
375375

376376
// Configure the certificate verification enqueuer.

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
<Compile Include="IValidationSetProcessor.cs" />
5959
<Compile Include="IValidationSetProvider.cs" />
6060
<Compile Include="IValidationStorageService.cs" />
61-
<Compile Include="IValidatorProvider.cs" />
6261
<Compile Include="Job.cs" />
6362
<Compile Include="MessageService.cs" />
6463
<Compile Include="OrchestrationRunner.cs" />
@@ -108,7 +107,7 @@
108107
</ItemGroup>
109108
<ItemGroup>
110109
<PackageReference Include="NuGet.Services.Validation.Issues">
111-
<Version>2.22.0</Version>
110+
<Version>2.23.0</Version>
112111
</PackageReference>
113112
</ItemGroup>
114113
<ItemGroup>
@@ -136,4 +135,4 @@
136135
<SignPath Condition="'$(NuGetBuildPath)' != ''">$(NuGetBuildPath)</SignPath>
137136
</PropertyGroup>
138137
<Import Project="$(SignPath)\sign.targets" Condition="Exists('$(SignPath)\sign.targets')" />
139-
</Project>
138+
</Project>

src/NuGet.Services.Validation.Orchestrator/PackageSigning/ProcessSignature/PackageSigningValidator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
using System.Diagnostics;
66
using System.Threading.Tasks;
77
using Microsoft.Extensions.Logging;
8+
using NuGet.Jobs.Validation;
89
using NuGet.Jobs.Validation.PackageSigning.Storage;
910
using NuGet.Jobs.Validation.Storage;
1011
using NuGet.Services.Validation.Orchestrator.Telemetry;
1112

1213
namespace NuGet.Services.Validation.PackageSigning.ProcessSignature
1314
{
15+
[ValidatorName(ValidatorName.PackageSigning)]
1416
public class PackageSigningValidator : IProcessor
1517
{
1618
private readonly IValidatorStateService _validatorStateService;

src/NuGet.Services.Validation.Orchestrator/PackageSigning/ValidateCertificate/PackageCertificatesValidator.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88
using System.Linq;
99
using System.Threading.Tasks;
1010
using Microsoft.Extensions.Logging;
11+
using NuGet.Jobs.Validation;
1112
using NuGet.Jobs.Validation.PackageSigning.Storage;
1213
using NuGet.Services.Validation.Orchestrator;
1314
using NuGet.Services.Validation.Orchestrator.Telemetry;
15+
using Error = NuGet.Services.Validation.Orchestrator.Error;
1416

1517
namespace NuGet.Services.Validation.PackageSigning.ValidateCertificate
1618
{
19+
[ValidatorName(ValidatorName.PackageCertificate)]
1720
public class PackageCertificatesValidator : BaseValidator, IValidator
1821
{
1922
private static readonly TimeSpan DefaultCertificateRevalidationThresholdTime = TimeSpan.FromDays(1);
@@ -233,6 +236,7 @@ private Task<PackageSignature> FindSignatureAsync(IValidationRequest request)
233236
.PackageSignatures
234237
.Include(s => s.EndCertificate)
235238
.Include(s => s.TrustedTimestamps.Select(t => t.EndCertificate))
239+
.Where(s => s.Type == PackageSignatureType.Author)
236240
.SingleAsync(s => s.PackageKey == request.PackageKey);
237241
}
238242

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Reflection;
88
using Microsoft.Extensions.DependencyInjection;
99
using Microsoft.Extensions.Logging;
10+
using NuGet.Jobs.Validation;
1011

1112
namespace NuGet.Services.Validation.Orchestrator
1213
{
@@ -55,13 +56,14 @@ private void InitializeEvaluatedTypes(Assembly callingAssembly)
5556
var validatorTypes = candidateTypes
5657
.Where(type => typeof(IValidator).IsAssignableFrom(type)
5758
&& type != typeof(IValidator)
58-
&& type != typeof(IProcessor))
59-
.ToDictionary(type => type.Name);
59+
&& type != typeof(IProcessor)
60+
&& ValidatorUtility.HasValidatorNameAttribute(type))
61+
.ToDictionary(ValidatorUtility.GetValidatorName);
6062

6163
var processorTypes = validatorTypes
6264
.Values
6365
.Where(IsProcessorType)
64-
.ToDictionary(type => type.Name);
66+
.ToDictionary(ValidatorUtility.GetValidatorName);
6567

6668
_logger.LogTrace("After enumeration, got {NumImplementations} implementations: {TypeNames}",
6769
validatorTypes.Count,

src/NuGet.Services.Validation.Orchestrator/Vcs/VcsValidator.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,19 @@
88
using Microsoft.Extensions.Logging;
99
using Microsoft.Extensions.Options;
1010
using Microsoft.WindowsAzure.Storage;
11+
using NuGet.Jobs.Validation;
1112
using NuGet.Jobs.Validation.Common;
1213
using NuGet.Services.Validation.Orchestrator;
1314
using NuGet.Versioning;
1415
using NuGetGallery;
16+
using Error = NuGet.Services.Validation.Orchestrator.Error;
1517

1618
namespace NuGet.Services.Validation.Vcs
1719
{
20+
[ValidatorName(ValidatorName.Vcs)]
1821
public class VcsValidator : BaseValidator, IValidator
1922
{
20-
private const string ValidatorName = Jobs.Validation.Common.Validators.Vcs.VcsValidator.ValidatorName;
23+
private const string InternalValidatorName = Jobs.Validation.Common.Validators.Vcs.VcsValidator.ValidatorName;
2124

2225
private readonly IPackageValidationService _validationService;
2326
private readonly IPackageValidationAuditor _validationAuditor;
@@ -61,7 +64,7 @@ public async Task<IValidationResult> GetResultAsync(IValidationRequest request)
6164

6265
var validationStatusList = audit
6366
.Entries
64-
.Where(x => x.ValidatorName == ValidatorName)
67+
.Where(x => x.ValidatorName == InternalValidatorName)
6568
.Select(x => GetValidationStatus(request, x.EventId))
6669
.ToList();
6770

@@ -127,8 +130,8 @@ await _validationService.StartValidationProcessAsync(
127130
Version = normalizedPackageVerison,
128131
DownloadUrl = new Uri(request.NupkgUrl),
129132
},
130-
new[] { ValidatorName },
131-
request.ValidationId);
133+
validators: new[] { InternalValidatorName },
134+
validationId: request.ValidationId);
132135
}
133136
catch (StorageException e) when (e.RequestInformation?.HttpStatusCode == (int)HttpStatusCode.Conflict
134137
|| e.RequestInformation?.HttpStatusCode == (int)HttpStatusCode.PreconditionFailed)

src/NuGetCDNRedirect/Controllers/StatusController.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace NuGet.Services.CDNRedirect.Controllers
88
public class StatusController : Controller
99
{
1010
// GET: Status
11+
[HttpGet]
1112
public ActionResult Index()
1213
{
1314
return View();

src/NuGetCDNRedirect/Views/Web.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
</system.webServer>
3535

3636
<system.web>
37+
<httpCookies requireSSL="true" httpOnlyCookies="true" />
3738
<compilation>
3839
<assemblies>
3940
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

0 commit comments

Comments
 (0)