Example #1
0
        public virtual bool TryDownloadPrefetchPacks(GitProcess gitProcess, long latestTimestamp, out List <string> packIndexes)
        {
            EventMetadata metadata = CreateEventMetadata();

            metadata.Add("latestTimestamp", latestTimestamp);

            using (ITracer activity = this.Tracer.StartActivity("TryDownloadPrefetchPacks", EventLevel.Informational, Keywords.Telemetry, metadata))
            {
                long bytesDownloaded = 0;

                long          requestId        = HttpRequestor.GetNewRequestId();
                List <string> innerPackIndexes = null;
                RetryWrapper <GitObjectsHttpRequestor.GitObjectTaskResult> .InvocationResult result = this.GitObjectRequestor.TrySendProtocolRequest(
                    requestId: requestId,
                    onSuccess: (tryCount, response) => this.DeserializePrefetchPacks(response, ref latestTimestamp, ref bytesDownloaded, ref innerPackIndexes, gitProcess),
                    onFailure: RetryWrapper <GitObjectsHttpRequestor.GitObjectTaskResult> .StandardErrorHandler(activity, requestId, "TryDownloadPrefetchPacks"),
                    method: HttpMethod.Get,
                    endPointGenerator: () => new Uri(
                        string.Format(
                            "{0}?lastPackTimestamp={1}",
                            this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl,
                            latestTimestamp)),
                    requestBodyGenerator: () => null,
                    cancellationToken: CancellationToken.None,
                    acceptType: new MediaTypeWithQualityHeaderValue(GVFSConstants.MediaTypes.PrefetchPackFilesAndIndexesMediaType));

                packIndexes = innerPackIndexes;

                if (!result.Succeeded)
                {
                    if (result.Result != null && result.Result.HttpStatusCodeResult == HttpStatusCode.NotFound)
                    {
                        EventMetadata warning = CreateEventMetadata();
                        warning.Add(TracingConstants.MessageKey.WarningMessage, "The server does not support " + GVFSConstants.Endpoints.GVFSPrefetch);
                        warning.Add(nameof(this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl), this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl);
                        activity.RelatedEvent(EventLevel.Warning, "CommandNotSupported", warning);
                    }
                    else
                    {
                        EventMetadata error = CreateEventMetadata();
                        error.Add("latestTimestamp", latestTimestamp);
                        error.Add("Exception", result.Error);
                        error.Add(nameof(this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl), this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl);
                        activity.RelatedWarning(error, "DownloadPrefetchPacks failed.", Keywords.Telemetry);
                    }
                }

                activity.Stop(new EventMetadata
                {
                    { "Area", EtwArea },
                    { "Success", result.Succeeded },
                    { "Attempts", result.Attempts },
                    { "BytesDownloaded", bytesDownloaded },
                });

                return(result.Succeeded);
            }
        }
Example #2
0
        public bool TryDownloadPrefetchPacks(long latestTimestamp)
        {
            EventMetadata metadata = new EventMetadata();

            metadata.Add("latestTimestamp", latestTimestamp);

            using (ITracer activity = this.Tracer.StartActivity(nameof(this.TryDownloadPrefetchPacks), EventLevel.Informational, metadata))
            {
                long requestId = HttpRequestor.GetNewRequestId();
                RetryWrapper <GitObjectsHttpRequestor.GitObjectTaskResult> .InvocationResult result = this.GitObjectRequestor.TrySendProtocolRequest(
                    requestId: requestId,
                    onSuccess: (tryCount, response) => this.DeserializePrefetchPacks(response, ref latestTimestamp),
                    onFailure: RetryWrapper <GitObjectsHttpRequestor.GitObjectTaskResult> .StandardErrorHandler(activity, requestId, nameof(this.TryDownloadPrefetchPacks)),
                    method: HttpMethod.Get,
                    endPointGenerator: () => new Uri(
                        string.Format(
                            "{0}?lastPackTimestamp={1}",
                            this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl,
                            latestTimestamp)),
                    requestBodyGenerator: () => null,
                    acceptType: new MediaTypeWithQualityHeaderValue(GVFSConstants.MediaTypes.PrefetchPackFilesAndIndexesMediaType));

                if (!result.Succeeded)
                {
                    if (result.Result != null && result.Result.HttpStatusCodeResult == HttpStatusCode.NotFound)
                    {
                        EventMetadata warning = new EventMetadata();
                        warning.Add("ErrorMessage", "The server does not support " + GVFSConstants.Endpoints.GVFSPrefetch);
                        warning.Add(nameof(this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl), this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl);
                        activity.RelatedEvent(EventLevel.Warning, "CommandNotSupported", warning);
                    }
                    else
                    {
                        EventMetadata error = new EventMetadata();
                        error.Add("latestTimestamp", latestTimestamp);
                        error.Add("Exception", result.Error);
                        error.Add("ErrorMessage", "DownloadPrefetchPacks failed.");
                        error.Add(nameof(this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl), this.GitObjectRequestor.CacheServer.PrefetchEndpointUrl);
                        activity.RelatedError(error);
                    }
                }

                return(result.Succeeded);
            }
        }