Skip to content

Commit 5fbf70d

Browse files
jeet1995Copilot
andauthored
Leverage x-ms-cosmos-hub-region-processing-only for 404 Read Session Not Available cross-region retry scenarios. (#47631)
* Adding `x-ms-cosmos-hub-region-processing-only` header. * Adding `x-ms-cosmos-hub-region-processing-only` header. * Ensuring account-level region cycle through when `x-ms-cosmos-hub-region-processing-only` header is set. * Forcing hub region processing flow to loop through all available read regions for new hub. * Forcing hub region processing flow to loop through all available read regions for new hub. * Revert unnecessary changes. * Fixing compilation errors. * Fixing compilation errors. * Stabilizing CI pipeline. * Enforce partition-set hub tracking when reads hit 403:3s. * Add tests for readMany, readAll, query and change feed. * Add tests for readMany, readAll, query and change feed. * Add tests for readMany, readAll, query and change feed. * Fixing a query plan caching test. * Add hub region processing only request header to CosmosDiagnostics. * Attempt to make PPAF/PPCB info visible in CosmosDiagnostics. * Attempt to make PPAF/PPCB info visible in CosmosDiagnostics. * Attempt to make PPAF/PPCB info visible in CosmosDiagnostics. * Revert LocationCache changes. * Modify cross region retry protocol for 404:1002 in Single-Writer accounts. * Fixing tests. * Replace hardcoded timeouts with policy-derived values in PPAF E2E latency config (#29) * Initial plan * Fix hardcoded timeout values in RxDocumentClientImpl Co-authored-by: jeet1995 <16476407+jeet1995@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jeet1995 <16476407+jeet1995@users.noreply.github.com> * Fix system property cleanup in HubRegionProcessingOnlyTests to prevent test pollution (#30) * Initial plan * Clear system property in @afterclass to prevent test pollution Co-authored-by: jeet1995 <16476407+jeet1995@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jeet1995 <16476407+jeet1995@users.noreply.github.com> * Fix hot-path allocations in DocumentServiceRequestContext getter methods (#32) * Initial plan * Fix per-request allocations in getPerPartitionCircuitBreakerInfoHolder and getPerPartitionFailoverContextHolder Co-authored-by: jeet1995 <16476407+jeet1995@users.noreply.github.com> * Use static EMPTY singletons instead of null returns Co-authored-by: jeet1995 <16476407+jeet1995@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jeet1995 <16476407+jeet1995@users.noreply.github.com> * Fixing tests. * Addressing review comments. * Addressing review comments. * Addressing review comments. --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: jeet1995 <16476407+jeet1995@users.noreply.github.com>
1 parent 09422d5 commit 5fbf70d

25 files changed

+1263
-215
lines changed

sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/GlobalPartitionEndpointManagerForPPAFUnitTests.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package com.azure.cosmos;
55

66
import com.azure.cosmos.implementation.AvailabilityStrategyContext;
7-
import com.azure.cosmos.implementation.Configs;
87
import com.azure.cosmos.implementation.ConnectionPolicy;
98
import com.azure.cosmos.implementation.CrossRegionAvailabilityContextForRxDocumentServiceRequest;
109
import com.azure.cosmos.implementation.GlobalEndpointManager;
@@ -18,7 +17,9 @@
1817
import com.azure.cosmos.implementation.apachecommons.collections.list.UnmodifiableList;
1918
import com.azure.cosmos.implementation.guava25.collect.ImmutableList;
2019
import com.azure.cosmos.implementation.perPartitionAutomaticFailover.GlobalPartitionEndpointManagerForPerPartitionAutomaticFailover;
21-
import com.azure.cosmos.implementation.perPartitionAutomaticFailover.PartitionLevelFailoverInfo;
20+
import com.azure.cosmos.implementation.perPartitionAutomaticFailover.PartitionLevelAutomaticFailoverInfo;
21+
import com.azure.cosmos.implementation.perPartitionAutomaticFailover.PerPartitionAutomaticFailoverInfoHolder;
22+
import com.azure.cosmos.implementation.perPartitionCircuitBreaker.PerPartitionCircuitBreakerInfoHolder;
2223
import com.azure.cosmos.implementation.routing.RegionalRoutingContext;
2324
import com.azure.cosmos.rx.TestSuiteBase;
2425
import org.apache.commons.lang3.tuple.Pair;
@@ -37,7 +38,6 @@
3738
import java.util.Arrays;
3839
import java.util.Collections;
3940
import java.util.List;
40-
import java.util.Objects;
4141
import java.util.Set;
4242
import java.util.concurrent.ConcurrentHashMap;
4343
import java.util.concurrent.ScheduledFuture;
@@ -148,11 +148,11 @@ public void tryMarkEndpointAsUnavailableForPartitionKeyRange(
148148
String maxExclusive = "BB";
149149
String collectionResourceId = "dbs/db1/colls/coll1";
150150

151-
Field failedRegionalRoutingContextsField = PartitionLevelFailoverInfo.class.getDeclaredField("failedRegionalRoutingContexts");
151+
Field failedRegionalRoutingContextsField = PartitionLevelAutomaticFailoverInfo.class.getDeclaredField("failedRegionalRoutingContexts");
152152

153153
assertThat(failedRegionalRoutingContextsField).isNotNull();
154154

155-
Field currentRegionalContextField = PartitionLevelFailoverInfo.class.getDeclaredField("current");
155+
Field currentRegionalContextField = PartitionLevelAutomaticFailoverInfo.class.getDeclaredField("current");
156156

157157
assertThat(currentRegionalContextField).isNotNull();
158158

@@ -362,11 +362,11 @@ private static void validateAllRegionsAreNotUnavailableAfterExceptionInLocation(
362362
logger.warn("Handling exception for {}", locationWithFailure.getPath());
363363
globalPartitionEndpointManagerForPerPartitionAutomaticFailover.tryMarkEndpointAsUnavailableForPartitionKeyRange(request, false);
364364

365-
Field failedLocationsField = PartitionLevelFailoverInfo.class.getDeclaredField("failedRegionalRoutingContexts");
365+
Field failedLocationsField = PartitionLevelAutomaticFailoverInfo.class.getDeclaredField("failedRegionalRoutingContexts");
366366

367367
assertThat(failedLocationsField).isNotNull();
368368

369-
Field currentField = PartitionLevelFailoverInfo.class.getDeclaredField("current");
369+
Field currentField = PartitionLevelAutomaticFailoverInfo.class.getDeclaredField("current");
370370

371371
assertThat(currentField).isNotNull();
372372

@@ -421,8 +421,10 @@ private RxDocumentServiceRequest constructRxDocumentServiceRequestInstance(
421421
false,
422422
collectionLink,
423423
new SerializationDiagnosticsContext()),
424-
new AvailabilityStrategyContext(true, true)
425-
)
424+
new AvailabilityStrategyContext(true, true),
425+
new AtomicBoolean(false),
426+
new PerPartitionCircuitBreakerInfoHolder(),
427+
new PerPartitionAutomaticFailoverInfoHolder())
426428
);
427429

428430
return request;

sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/GlobalPartitionEndpointManagerForPPCBUnitTests.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
import com.azure.cosmos.implementation.RxDocumentServiceRequest;
1616
import com.azure.cosmos.implementation.SerializationDiagnosticsContext;
1717
import com.azure.cosmos.implementation.apachecommons.collections.list.UnmodifiableList;
18+
import com.azure.cosmos.implementation.perPartitionAutomaticFailover.PerPartitionAutomaticFailoverInfoHolder;
1819
import com.azure.cosmos.implementation.perPartitionCircuitBreaker.GlobalPartitionEndpointManagerForPerPartitionCircuitBreaker;
1920
import com.azure.cosmos.implementation.perPartitionCircuitBreaker.LocationHealthStatus;
2021
import com.azure.cosmos.implementation.perPartitionCircuitBreaker.LocationSpecificHealthContext;
2122
import com.azure.cosmos.implementation.guava25.collect.ImmutableList;
23+
import com.azure.cosmos.implementation.perPartitionCircuitBreaker.PerPartitionCircuitBreakerInfoHolder;
2224
import com.azure.cosmos.implementation.routing.RegionalRoutingContext;
2325
import org.apache.commons.lang3.tuple.Pair;
2426
import org.mockito.Mockito;
@@ -1056,7 +1058,10 @@ private RxDocumentServiceRequest constructRxDocumentServiceRequestInstance(
10561058
false,
10571059
collectionLink,
10581060
new SerializationDiagnosticsContext()),
1059-
new AvailabilityStrategyContext(false, false)));
1061+
new AvailabilityStrategyContext(false, false),
1062+
new AtomicBoolean(false),
1063+
new PerPartitionCircuitBreakerInfoHolder(),
1064+
new PerPartitionAutomaticFailoverInfoHolder()));
10601065

10611066
return request;
10621067
}

0 commit comments

Comments
 (0)