Example #1
0
        public async Task <bool> HandleAsync(PackageValidationMessageData message)
        {
            if (_shutdownNotificationTokenProvider.Token.IsCancellationRequested)
            {
                _logger.LogInformation("Service shutdown was requested, will not process new message");
                return(false);
            }

            var package = _galleryPackageService.FindPackageByIdAndVersionStrict(message.PackageId, message.PackageVersion);

            if (package == null)
            {
                // no package in DB yet. Might have received message a bit early, need to retry later
                _logger.LogInformation("Did not find information in DB for package {PackageId} {PackageVersion}",
                                       message.PackageId,
                                       message.PackageVersion);
                return(false);
            }

            using (_logger.BeginScope("Handling message for {PackageId} {PackageVersion} validation set {ValidationSetId}", message.PackageId, message.PackageVersion, message.ValidationTrackingId))
            {
                var validationSet = await _validationSetProvider.GetOrCreateValidationSetAsync(message.ValidationTrackingId, package);

                await _validationSetProcessor.ProcessValidationsAsync(validationSet, package);

                await _validationOutcomeProcessor.ProcessValidationOutcomeAsync(validationSet, package);
            }
            return(true);
        }
        private bool ShouldSkipScan(INuGetValidationRequest request)
        {
            var package = _packageService.FindPackageByIdAndVersionStrict(
                request.PackageId,
                request.PackageVersion);

            if (!_criteriaEvaluator.IsMatch(_configuration.PackageCriteria, package))
            {
                _logger.LogInformation(
                    "The scan for {ValidationId} ({PackageId} {PackageVersion}) was skipped due to package criteria configuration.",
                    request.ValidationId,
                    request.PackageId,
                    request.PackageVersion);

                return(true);
            }

            return(false);
        }
Example #3
0
        private bool ShouldSkip(IValidationRequest request)
        {
            var package = _packageService.FindPackageByIdAndVersionStrict(
                request.PackageId,
                request.PackageVersion);

            if (!_criteriaEvaluator.IsMatch(_config.Value.PackageCriteria, package))
            {
                // This means the validation has already started. This is acceptable so we should move on.
                _logger.LogInformation(
                    "The VCS validation for {validationId} ({packageId} {packageVersion}) was skipped due to package criteria configuration.",
                    request.ValidationId,
                    request.PackageId,
                    request.PackageVersion);

                return(true);
            }

            return(false);
        }
Example #4
0
        public async Task <bool> HandleAsync(PackageValidationMessageData message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            using (_logger.BeginScope("Handling message for {PackageId} {PackageVersion} validation set {ValidationSetId}",
                                      message.PackageId,
                                      message.PackageVersion,
                                      message.ValidationTrackingId))
            {
                var package = _galleryPackageService.FindPackageByIdAndVersionStrict(message.PackageId, message.PackageVersion);

                if (package == null)
                {
                    // no package in DB yet. Might have received message a bit early, need to retry later
                    if (message.DeliveryCount - 1 >= _configs.MissingPackageRetryCount)
                    {
                        _logger.LogWarning("Could not find package {PackageId} {PackageVersion} in DB after {DeliveryCount} tries, dropping message",
                                           message.PackageId,
                                           message.PackageVersion,
                                           message.DeliveryCount);

                        _telemetryService.TrackMissingPackageForValidationMessage(
                            message.PackageId,
                            message.PackageVersion,
                            message.ValidationTrackingId.ToString());

                        return(true);
                    }
                    else
                    {
                        _logger.LogInformation("Could not find package {PackageId} {PackageVersion} in DB, retrying",
                                               message.PackageId,
                                               message.PackageVersion);

                        return(false);
                    }
                }

                // Immediately halt validation of a soft deleted package.
                if (package.PackageStatusKey == PackageStatus.Deleted)
                {
                    _logger.LogWarning(
                        "Package {PackageId} {PackageVersion} (package key {PackageKey}) is soft deleted. Dropping message for validation set {ValidationSetId}.",
                        message.PackageId,
                        message.PackageVersion,
                        package.Key,
                        message.ValidationTrackingId);

                    return(true);
                }

                var validationSet = await _validationSetProvider.TryGetOrCreateValidationSetAsync(message.ValidationTrackingId, package);

                if (validationSet == null)
                {
                    _logger.LogInformation("The validation request for {PackageId} {PackageVersion} validation set {ValidationSetId} is a duplicate. Discarding.",
                                           message.PackageId,
                                           message.PackageVersion,
                                           message.ValidationTrackingId);
                    return(true);
                }

                await _validationSetProcessor.ProcessValidationsAsync(validationSet, package);

                await _validationOutcomeProcessor.ProcessValidationOutcomeAsync(validationSet, package);
            }
            return(true);
        }
Example #5
0
        public IValidatingEntity <Package> FindPackageByIdAndVersionStrict(string id, string version)
        {
            var p = _galleryEntityService.FindPackageByIdAndVersionStrict(id, version);

            return(p == null ? null : new PackageValidatingEntity(p));
        }
        public IEnumerable <SymbolPackage> FindSymbolPackagesByIdAndVersion(string id, string version)
        {
            var package = _corePackageService.FindPackageByIdAndVersionStrict(id, version);

            return(package?.SymbolPackages);
        }