Skip to content

Commit e11dc9b

Browse files
Query: Refactors Optimistic Direct Execution to be turned on by default on .NET SDK (#4225)
* Turned on ODe by default * update subpartitioning tests to include ODE * Updated contracts * adds multihash test cases * Updated client serialization test output * Updated OffsetLimitPageSize() test * Revert changes to Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/PartitionKeyHashBaselineTest.Lists.xml * Updated EndToEndTraceWriterBaselineTests.ReadManyAsync baseline test * Removed account details * Updated performance benchmark results * Set enableODE to true for some of the tests * Updated Feed token tests to test ODE and non ODE cases * Added ODE testing for Session token regression test * Updated AggregateQueryTests() and CosmosMultiHashTest() * Reverted changes to OffsetLimitPageSize() * Added ODE testing to AggregateFunctionAsync() * Removed account details from baseline tests * Added assert to confirm that the right document is being returned every time * Updated location of foreach loop for ODE * Updated baselines * Fixed comments * Cleaned up code * Fixed baselines * Updated more baselines * Setting QueryRequestRateTest() to not use ODE --------- Co-authored-by: Nalu Tripician <[email protected]>
1 parent fccbc93 commit e11dc9b

22 files changed

+1263
-1164
lines changed

Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ internal static class CosmosQueryExecutionContextFactory
3434
{
3535
internal const string ClientDisableOptimisticDirectExecution = "clientDisableOptimisticDirectExecution";
3636
private const string InternalPartitionKeyDefinitionProperty = "x-ms-query-partitionkey-definition";
37-
private const string QueryInspectionPattern = @"\s+(GROUP\s+BY\s+|COUNT\s*\(|MIN\s*\(|MAX\s*\(|AVG\s*\(|SUM\s*\(|DISTINCT\s+)";
37+
private const string QueryInspectionPattern = @"\s*(GROUP\s+BY\s+|COUNT\s*\(|MIN\s*\(|MAX\s*\(|AVG\s*\(|SUM\s*\(|DISTINCT\s+)";
3838
private const string OptimisticDirectExecution = "OptimisticDirectExecution";
3939
private const string Passthrough = "Passthrough";
4040
private const string Specialized = "Specialized";
@@ -782,7 +782,7 @@ private static Documents.PartitionKeyDefinition GetPartitionKeyDefinition(InputP
782782
Debug.Assert(containerQueryProperties.ResourceId != null, "CosmosQueryExecutionContextFactory Assert!", "Container ResourceId cannot be null!");
783783

784784
List<Documents.PartitionKeyRange> targetRanges;
785-
if (partitionedQueryExecutionInfo != null)
785+
if (partitionedQueryExecutionInfo != null || inputParameters.InitialFeedRange != null)
786786
{
787787
targetRanges = await CosmosQueryExecutionContextFactory.GetTargetPartitionKeyRangesAsync(
788788
cosmosQueryContext.QueryClient,

Microsoft.Azure.Cosmos/src/RequestOptions/QueryRequestOptions.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,7 @@ public class QueryRequestOptions : RequestOptions
5050
/// <value>
5151
/// Direct (optimistic) execution offers improved performance for several kinds of queries such as a single partition streaming query.
5252
/// </value>
53-
#if PREVIEW
54-
public
55-
#else
56-
internal
57-
#endif
58-
bool EnableOptimisticDirectExecution { get; set; }
59-
#if PREVIEW
60-
= true;
61-
#endif
53+
public bool EnableOptimisticDirectExecution { get; set; } = true;
6254

6355
/// <summary>
6456
/// Gets or sets the maximum number of items that can be buffered client side during

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/BaselineTest/TestBaseline/EndToEndTraceWriterBaselineTests.QueryAsync.xml

Lines changed: 196 additions & 0 deletions
Large diffs are not rendered by default.

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/BaselineTest/TestBaseline/EndToEndTraceWriterBaselineTests.ReadManyAsync.xml

Lines changed: 432 additions & 618 deletions
Large diffs are not rendered by default.

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/BaselineTest/TestBaseline/LinqGeneralBaselineTests.TestDistinctTranslation.xml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ JOIN (
404404
WHERE (LENGTH(v2["FamilyName"]) > 10)
405405
ORDER BY v2 ASC
406406
]]></SqlQuery>
407-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
407+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
408408
</Output>
409409
</Result>
410410
<Result>
@@ -423,7 +423,7 @@ JOIN (
423423
WHERE ((LENGTH(v2["FamilyName"]) > 10) AND (LENGTH(v2["FamilyName"]) < 20))
424424
ORDER BY v2 ASC
425425
]]></SqlQuery>
426-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
426+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
427427
</Output>
428428
</Result>
429429
<Result>
@@ -442,7 +442,7 @@ JOIN (
442442
WHERE ((LENGTH(v2["FamilyName"]) > 10) AND (LENGTH(v2["FamilyName"]) < 20))
443443
ORDER BY v2 ASC
444444
]]></SqlQuery>
445-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
445+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
446446
</Output>
447447
</Result>
448448
<Result>
@@ -482,7 +482,7 @@ JOIN (
482482
WHERE (LENGTH(v2["FamilyName"]) > 10)
483483
ORDER BY v2 ASC
484484
]]></SqlQuery>
485-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
485+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
486486
</Output>
487487
</Result>
488488
<Result>
@@ -559,7 +559,7 @@ JOIN (
559559
WHERE (LENGTH(v2["FamilyName"]) > 10)
560560
ORDER BY v2 ASC
561561
]]></SqlQuery>
562-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
562+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
563563
</Output>
564564
</Result>
565565
<Result>
@@ -578,7 +578,7 @@ JOIN (
578578
WHERE (LENGTH(v2["FamilyName"]) > 10)
579579
ORDER BY v2 ASC
580580
]]></SqlQuery>
581-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
581+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
582582
</Output>
583583
</Result>
584584
<Result>
@@ -597,7 +597,7 @@ JOIN (
597597
WHERE (LENGTH(v2["FamilyName"]) > 10)
598598
ORDER BY v2["GivenName"]["Length"] ASC
599599
]]></SqlQuery>
600-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
600+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
601601
</Output>
602602
</Result>
603603
<Result>
@@ -616,7 +616,7 @@ JOIN (
616616
WHERE (LENGTH(v2["FamilyName"]) > 10)
617617
ORDER BY v2["GivenName"]["Length"] ASC
618618
]]></SqlQuery>
619-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
619+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
620620
</Output>
621621
</Result>
622622
<Result>
@@ -635,7 +635,7 @@ JOIN (
635635
WHERE (LENGTH(v2["FamilyName"]) > 10)
636636
ORDER BY v2 ASC
637637
]]></SqlQuery>
638-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
638+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
639639
</Output>
640640
</Result>
641641
<Result>
@@ -654,7 +654,7 @@ JOIN (
654654
WHERE (LENGTH(v2["FamilyName"]) > 10)
655655
ORDER BY v2 ASC
656656
]]></SqlQuery>
657-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
657+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
658658
</Output>
659659
</Result>
660660
<Result>
@@ -689,7 +689,7 @@ JOIN (
689689
JOIN v0 IN root["Parents"]) AS v2
690690
ORDER BY v2["FamilyName"] ASC
691691
]]></SqlQuery>
692-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
692+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
693693
</Output>
694694
</Result>
695695
<Result>
@@ -707,7 +707,7 @@ JOIN (
707707
JOIN v0 IN root["Parents"]) AS v2
708708
ORDER BY v2["FamilyName"] ASC
709709
]]></SqlQuery>
710-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
710+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
711711
</Output>
712712
</Result>
713713
<Result>
@@ -773,7 +773,7 @@ JOIN (
773773
JOIN p0 IN root["Parents"]) AS v1
774774
ORDER BY v1 ASC
775775
]]></SqlQuery>
776-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
776+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
777777
</Output>
778778
</Result>
779779
<Result>
@@ -792,7 +792,7 @@ JOIN (
792792
WHERE (LENGTH(v1) > 10)
793793
ORDER BY v1 ASC
794794
]]></SqlQuery>
795-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
795+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
796796
</Output>
797797
</Result>
798798
<Result>

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/BaselineTest/TestBaseline/LinqGeneralBaselineTests.TestThenByTranslation.xml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ JOIN (
119119
SELECT VALUE root
120120
FROM root
121121
ORDER BY root["FamilyId"] ASC, root["FamilyId"] ASC]]></SqlQuery>
122-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
122+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["The order by query does not have a corresponding composite index that it can be served from."]}rn]]></ErrorMessage>
123123
</Output>
124124
</Result>
125125
<Result>
@@ -132,7 +132,7 @@ ORDER BY root["FamilyId"] ASC, root["FamilyId"] ASC]]></SqlQuery>
132132
SELECT VALUE root
133133
FROM root
134134
ORDER BY root["FamilyId"] ASC, root["FamilyId"] DESC]]></SqlQuery>
135-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
135+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["The order by query does not have a corresponding composite index that it can be served from."]}rn]]></ErrorMessage>
136136
</Output>
137137
</Result>
138138
<Result>
@@ -388,7 +388,6 @@ FROM (
388388
JOIN c0 IN root["Children"]) AS v1) AS r1
389389
ORDER BY r1["FamilyId"] ASC, r1["FamilyNumber"] ASC
390390
]]></SqlQuery>
391-
<ErrorMessage><![CDATA[Underlying object does not have an '_rid' or '__sys_rid' field.]]></ErrorMessage>
392391
</Output>
393392
</Result>
394393
<Result>
@@ -435,7 +434,6 @@ FROM (
435434
WHERE (p0["GivenName"]["Length"] > 5)) AS v0) AS r0
436435
ORDER BY r0["FamilyId"] ASC, r0["FamilyNumber"] ASC
437436
]]></SqlQuery>
438-
<ErrorMessage><![CDATA[Underlying object does not have an '_rid' or '__sys_rid' field.]]></ErrorMessage>
439437
</Output>
440438
</Result>
441439
<Result>
@@ -586,7 +584,7 @@ FROM root
586584
JOIN f0 IN root["Records"]["Transactions"]
587585
WHERE (ARRAY_LENGTH(root["Children"]) > 0)
588586
ORDER BY f0["Type"] ASC, f0["Amount"] ASC]]></SqlQuery>
589-
<ErrorMessage><![CDATA[Status Code: BadRequest]]></ErrorMessage>
587+
<ErrorMessage><![CDATA[Status Code: BadRequest","message":"Message: {"Errors":["Order-by over correlated collections is not supported."]}rn]]></ErrorMessage>
590588
</Output>
591589
</Result>
592590
<Result>

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/CosmosBasicQueryTests.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,7 @@ public async Task QueryRequestRateTest(bool directMode)
240240
{
241241
MaxItemCount = 1,
242242
MaxConcurrency = 1,
243-
#if PREVIEW
244-
EnableOptimisticDirectExecution = false
245-
#endif
243+
EnableOptimisticDirectExecution = false,
246244
}))
247245
{
248246
while (feedIterator.HasMoreResults)
@@ -271,9 +269,7 @@ public async Task QueryRequestRateTest(bool directMode)
271269
{
272270
MaxItemCount = 1,
273271
MaxConcurrency = 1,
274-
#if PREVIEW
275-
EnableOptimisticDirectExecution = false
276-
#endif
272+
EnableOptimisticDirectExecution = false,
277273
});
278274

279275
// First request should be a success
@@ -803,7 +799,6 @@ public async Task TesOdeTokenCompatibilityWithNonOdePipeline()
803799
QueryRequestOptions queryRequestOptions = new QueryRequestOptions
804800
{
805801
MaxItemCount = 50,
806-
EnableOptimisticDirectExecution = true
807802
};
808803

809804
FeedIteratorInternal feedIterator =
@@ -833,7 +828,7 @@ public async Task TesOdeTokenCompatibilityWithNonOdePipeline()
833828
responseMessage = await feedIteratorNew.ReadNextAsync(CancellationToken.None);
834829
}
835830

836-
string expectedErrorMessage = "The continuation token supplied requires the Optimistic Direct Execution flag to be enabled in QueryRequestOptions for the query execution to resume. ";
831+
string expectedErrorMessage = "Execution of this query using the supplied continuation token requires EnableOptimisticDirectExecution to be set in QueryRequestOptions. ";
837832
Assert.IsTrue(responseMessage.CosmosException.ToString().Contains(expectedErrorMessage));
838833
}
839834

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/CosmosGatewayTimeoutTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,8 @@ public async Task QueryPlanRetryTimeoutTestAsync()
8383

8484
QueryRequestOptions requestOptions = new QueryRequestOptions()
8585
{
86-
#if PREVIEW
86+
// ODE set to false in this scenario as using ODE could cause the query plan to not get invoked.
8787
EnableOptimisticDirectExecution = false
88-
#endif
8988
};
9089

9190
using FeedIterator<JObject> iterator = gatewayQueryPlanContainer.GetItemQueryIterator<JObject>("select * From T order by T.status", requestOptions: requestOptions);

0 commit comments

Comments
 (0)