コード例 #1
0
 private Task <PinResponse> PinAsync(PinRequest request, CancellationToken token)
 {
     return(RunFuncAsync(
                request.Header,
                async(context, session) =>
     {
         PinResult pinResult = await session.PinAsync(
             context.OperationContext,
             request.ContentHash.ToContentHash((HashType)request.HashType),
             context.Token);
         return new PinResponse
         {
             Header = new ResponseHeader(
                 context.StartTime, pinResult.Succeeded, (int)pinResult.Code, pinResult.ErrorMessage, pinResult.Diagnostics)
         };
     },
                (context, errorMessage) =>
                new PinResponse {
         Header = ResponseHeader.Failure(context.StartTime, (int)PinResult.ResultCode.Error, errorMessage)
     },
                token));
 }
コード例 #2
0
        private async Task <IEnumerable <Task <Indexed <PinResult> > > > UpdateBlobStoreAsync(Context context, IReadOnlyList <ContentHash> contentHashes, DateTime endDateTime, CancellationToken cts)
        {
            // Convert missing content hashes to blob Ids
            var blobIds = contentHashes.Select(c => ToVstsBlobIdentifier(c.ToBlobIdentifier())).ToList();

            // Call TryReference on the blob ids
            var references = blobIds.Distinct().ToDictionary(
                blobIdentifier => blobIdentifier,
                _ => (IEnumerable <BlobReference>) new[] { new BlobReference(endDateTime) });

            // TODO: In groups of 1000 (bug 1365340)
            var referenceResults = await ArtifactHttpClientErrorDetectionStrategy.ExecuteWithTimeoutAsync(
                context,
                "UpdateBlobStore",
                innerCts => BlobStoreHttpClient.TryReferenceAsync(references, cancellationToken: innerCts),
                cts).ConfigureAwait(false);

            Tracer.RecordPinSatisfiedFromRemote();

            // There's 1-1 mapping between given content hashes and blob ids
            var remoteResults = blobIds
                                .Select((blobId, i) =>
            {
                PinResult pinResult = referenceResults.ContainsKey(blobId)
                        ? PinResult.ContentNotFound
                        : PinResult.Success;
                if (pinResult.Succeeded)
                {
                    BackingContentStoreExpiryCache.Instance.AddExpiry(contentHashes[i], endDateTime);
                }

                return(pinResult.WithIndex(i));
            });

            return(remoteResults.AsTasks());
        }
コード例 #3
0
 public static PinResult ShouldBeContentNotFound(this PinResult result)
 {
     Assert.True(result.Code == PinResult.ResultCode.ContentNotFound, $"Pin operation should not find content, but it had expected result: {result}");
     return(result);
 }
コード例 #4
0
 public static PinResult ShouldBeSuccess(this PinResult result)
 {
     Assert.True(result.Succeeded, $"Pin operation should succeed, but it failed. {result}");
     return(result);
 }
コード例 #5
0
 public void GetPinResult(PinResult pinResult, string playerNickname)
 {
     this.pinResult = pinResult;
 }