Beispiel #1
0
        public void TestParseStringWithTrailingUnknownField()
        {
            string         delimitedString = $"thisIsNotAKnownField=asdf";
            BackendMetrics expected        = new BackendMetrics(
                default(long),
                default(long),
                default(long),
                default(long),
                default(double),
                default(TimeSpan),
                new QueryPreparationTimes(
                    default(TimeSpan),
                    default(TimeSpan),
                    default(TimeSpan),
                    default(TimeSpan)),
                default(TimeSpan),
                default(TimeSpan),
                default(TimeSpan),
                new RuntimeExecutionTimes(
                    default(TimeSpan),
                    default(TimeSpan),
                    default(TimeSpan)),
                default(TimeSpan));

            BackendMetricsTests.ValidateParse(delimitedString, expected);
        }
Beispiel #2
0
        public void TestParseStringWithMissingFields()
        {
            TimeSpan totalExecutionTime = TimeSpan.FromTicks((long)(TimeSpan.TicksPerMillisecond * 33.67));
            string   delimitedString    = $"totalExecutionTimeInMs={totalExecutionTime.TotalMilliseconds}";

            BackendMetrics expected = new BackendMetrics(
                default(long),
                default(long),
                default(long),
                default(long),
                default(double),
                totalExecutionTime,
                new QueryPreparationTimes(
                    default(TimeSpan),
                    default(TimeSpan),
                    default(TimeSpan),
                    default(TimeSpan)),
                default(TimeSpan),
                default(TimeSpan),
                default(TimeSpan),
                new RuntimeExecutionTimes(
                    default(TimeSpan),
                    default(TimeSpan),
                    default(TimeSpan)),
                default(TimeSpan));

            BackendMetricsTests.ValidateParse(delimitedString, expected);
        }
Beispiel #3
0
        public void TestAccumulator()
        {
            BackendMetrics.Accumulator accumulator = new BackendMetrics.Accumulator();
            accumulator = accumulator.Accumulate(MockBackendMetrics);
            accumulator = accumulator.Accumulate(MockBackendMetrics);

            BackendMetrics backendMetricsFromAddition = BackendMetrics.Accumulator.ToBackendMetrics(accumulator);
            BackendMetrics expected = new BackendMetrics(
                retrievedDocumentCount * 2,
                retrievedDocumentSize * 2,
                outputDocumentCount * 2,
                outputDocumentSize * 2,
                indexHitRatio,
                totalExecutionTime * 2,
                new QueryPreparationTimes(
                    queryCompileTime * 2,
                    logicalPlanBuildTime * 2,
                    physicalPlanBuildTime * 2,
                    queryOptimizationTime * 2),
                indexLookupTime * 2,
                documentLoadTime * 2,
                vmExecutionTime * 2,
                new RuntimeExecutionTimes(
                    (totalExecutionTime - systemFunctionExecuteTime - userFunctionExecuteTime) * 2,
                    systemFunctionExecuteTime * 2,
                    userFunctionExecuteTime * 2),
                documentWriteTime * 2);

            BackendMetricsTests.ValidateBackendMetricsEquals(expected, backendMetricsFromAddition);
        }
Beispiel #4
0
 private static void ValidateBackendMetricsEquals(BackendMetrics expected, BackendMetrics actual)
 {
     Assert.AreEqual(expected.DocumentLoadTime, actual.DocumentLoadTime);
     Assert.AreEqual(expected.DocumentWriteTime, actual.DocumentWriteTime);
     Assert.AreEqual(expected.OutputDocumentCount, actual.OutputDocumentCount);
     Assert.AreEqual(expected.OutputDocumentSize, actual.OutputDocumentSize);
     Assert.AreEqual(expected.RetrievedDocumentCount, actual.RetrievedDocumentCount);
     Assert.AreEqual(expected.RetrievedDocumentSize, actual.RetrievedDocumentSize);
     Assert.AreEqual(expected.IndexHitRatio, actual.IndexHitRatio);
     Assert.AreEqual(expected.QueryPreparationTimes.QueryCompilationTime, actual.QueryPreparationTimes.QueryCompilationTime);
     Assert.AreEqual(expected.QueryPreparationTimes.LogicalPlanBuildTime, actual.QueryPreparationTimes.LogicalPlanBuildTime);
     Assert.AreEqual(expected.QueryPreparationTimes.PhysicalPlanBuildTime, actual.QueryPreparationTimes.PhysicalPlanBuildTime);
     Assert.AreEqual(expected.QueryPreparationTimes.QueryOptimizationTime, actual.QueryPreparationTimes.QueryOptimizationTime);
     Assert.AreEqual(expected.RuntimeExecutionTimes.SystemFunctionExecutionTime, actual.RuntimeExecutionTimes.SystemFunctionExecutionTime);
     Assert.AreEqual(expected.RuntimeExecutionTimes.UserDefinedFunctionExecutionTime, actual.RuntimeExecutionTimes.UserDefinedFunctionExecutionTime);
     Assert.AreEqual(expected.TotalTime, actual.TotalTime);
     Assert.AreEqual(expected.VMExecutionTime, actual.VMExecutionTime);
 }
Beispiel #5
0
        protected override async Task <DocumentFeedResponse <CosmosElement> > ExecuteInternalAsync(CancellationToken token)
        {
            CollectionCache collectionCache = await this.Client.GetCollectionCacheAsync();

            PartitionKeyRangeCache partitionKeyRangeCache = await this.Client.GetPartitionKeyRangeCacheAsync();

            IDocumentClientRetryPolicy retryPolicyInstance = this.Client.ResetSessionTokenRetryPolicy.GetRequestPolicy();

            retryPolicyInstance = new InvalidPartitionExceptionRetryPolicy(retryPolicyInstance);
            if (base.ResourceTypeEnum.IsPartitioned())
            {
                retryPolicyInstance = new PartitionKeyRangeGoneRetryPolicy(
                    collectionCache,
                    partitionKeyRangeCache,
                    PathsHelper.GetCollectionPath(base.ResourceLink),
                    retryPolicyInstance);
            }

            return(await BackoffRetryUtility <DocumentFeedResponse <CosmosElement> > .ExecuteAsync(
                       async() =>
            {
                this.fetchExecutionRangeAccumulator.BeginFetchRange();
                ++this.retries;
                Tuple <DocumentFeedResponse <CosmosElement>, string> responseAndPartitionIdentifier = await this.ExecuteOnceAsync(retryPolicyInstance, token);
                DocumentFeedResponse <CosmosElement> response = responseAndPartitionIdentifier.Item1;
                string partitionIdentifier = responseAndPartitionIdentifier.Item2;
                if (!string.IsNullOrEmpty(response.ResponseHeaders[HttpConstants.HttpHeaders.QueryMetrics]))
                {
                    this.fetchExecutionRangeAccumulator.EndFetchRange(
                        partitionIdentifier,
                        response.ActivityId,
                        response.Count,
                        this.retries);
                    response = new DocumentFeedResponse <CosmosElement>(
                        response,
                        response.Count,
                        response.Headers,
                        response.UseETagAsContinuation,
                        new Dictionary <string, QueryMetrics>
                    {
                        {
                            partitionIdentifier,
                            new QueryMetrics(
                                BackendMetrics.ParseFromDelimitedString(response.ResponseHeaders[HttpConstants.HttpHeaders.QueryMetrics]),
                                IndexUtilizationInfo.CreateFromString(response.ResponseHeaders[HttpConstants.HttpHeaders.IndexUtilization]),
                                new ClientSideMetrics(
                                    this.retries,
                                    response.RequestCharge,
                                    this.fetchExecutionRangeAccumulator.GetExecutionRanges()))
                        }
                    },
                        response.RequestStatistics,
                        response.DisallowContinuationTokenMessage,
                        response.ResponseLengthBytes);
                }

                this.retries = -1;
                return response;
            },
                       retryPolicyInstance,
                       token));
        }
Beispiel #6
0
 private static void ValidateParse(string delimitedString, BackendMetrics expected)
 {
     Assert.IsTrue(BackendMetricsParser.TryParse(delimitedString, out BackendMetrics actual));
     BackendMetricsTests.ValidateBackendMetricsEquals(expected, actual);
 }