Skip to content

Commit e7dfd27

Browse files
xinlian12annie-mac
andauthored
add default endpoint region in the condition when applicable (Azure#34078)
Co-authored-by: annie-mac <[email protected]>
1 parent 005a6b8 commit e7dfd27

File tree

4 files changed

+21
-5
lines changed

4 files changed

+21
-5
lines changed

sdk/cosmos/azure-cosmos-test/src/main/java/com/azure/cosmos/test/implementation/faultinjection/FaultInjectionRuleProcessor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import reactor.core.publisher.Mono;
3838

3939
import java.net.URI;
40+
import java.util.ArrayList;
4041
import java.util.Arrays;
4142
import java.util.Collections;
4243
import java.util.List;
@@ -157,6 +158,13 @@ private Mono<IFaultInjectionRuleInternal> getEffectiveServerErrorRule(
157158
List<URI> regionEndpoints = this.getRegionEndpoints(rule.getCondition());
158159
effectiveCondition.setRegionEndpoints(regionEndpoints);
159160

161+
if (StringUtils.isEmpty(rule.getCondition().getRegion())) {
162+
// if region is not specific configured, then also add the defaultEndpoint
163+
List<URI> regionEndpointsWithDefault = new ArrayList<>(regionEndpoints);
164+
regionEndpointsWithDefault.add(this.globalEndpointManager.getDefaultEndpoint());
165+
effectiveCondition.setRegionEndpoints(regionEndpointsWithDefault);
166+
}
167+
160168
// TODO: add handling for gateway mode
161169

162170
// Direct connection mode, populate physical addresses

sdk/cosmos/azure-cosmos-test/src/test/java/com/azure/cosmos/test/faultinjection/FaultInjectionServerErrorRuleTests.java

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

66
import com.azure.cosmos.BridgeInternal;
7+
import com.azure.cosmos.ConsistencyLevel;
78
import com.azure.cosmos.CosmosAsyncClient;
89
import com.azure.cosmos.CosmosAsyncContainer;
910
import com.azure.cosmos.CosmosClientBuilder;
@@ -147,8 +148,7 @@ public void faultInjectionServerErrorRuleTests_OperationType(OperationType opera
147148
CosmosFaultInjectionHelper.configureFaultInjectionRules(cosmosAsyncContainer, Arrays.asList(serverGoneErrorRule)).block();
148149

149150
assertThat(serverGoneErrorRule.getAddresses().size()).isZero();
150-
assertThat(serverGoneErrorRule.getRegionEndpoints().size()).isEqualTo(readRegionMap.size());
151-
assertThat(serverGoneErrorRule.getRegionEndpoints().size() == this.readRegionMap.size()
151+
assertThat(serverGoneErrorRule.getRegionEndpoints().size() == this.readRegionMap.size() + 1
152152
&& serverGoneErrorRule.getRegionEndpoints().containsAll(this.readRegionMap.values()));
153153

154154
CosmosDiagnostics cosmosDiagnostics = this.performDocumentOperation(cosmosAsyncContainer, operationType, createdItem);
@@ -164,8 +164,7 @@ public void faultInjectionServerErrorRuleTests_OperationType(OperationType opera
164164
serverGoneErrorRule.disable();
165165
CosmosFaultInjectionHelper.configureFaultInjectionRules(cosmosAsyncContainer, Arrays.asList(serverTooManyRequestsErrorRule)).block();
166166
assertThat(serverGoneErrorRule.getAddresses().size()).isZero();
167-
assertThat(serverGoneErrorRule.getRegionEndpoints().size()).isEqualTo(readRegionMap.size());
168-
assertThat(serverGoneErrorRule.getRegionEndpoints().size() == this.readRegionMap.size()
167+
assertThat(serverGoneErrorRule.getRegionEndpoints().size() == this.readRegionMap.size() + 1
169168
&& serverGoneErrorRule.getRegionEndpoints().containsAll(this.readRegionMap.values()));
170169

171170
cosmosDiagnostics = this.performDocumentOperation(cosmosAsyncContainer, operationType, createdItem);
@@ -250,6 +249,7 @@ public void faultInjectionServerErrorRuleTests_OperationTypeImpactAddresses(Oper
250249
.key(TestConfigurations.MASTER_KEY)
251250
.endpoint(TestConfigurations.HOST)
252251
.preferredRegions(preferredRegionList)
252+
.consistencyLevel(ConsistencyLevel.EVENTUAL)
253253
.buildAsyncClient();
254254

255255
CosmosAsyncContainer container =
@@ -258,7 +258,7 @@ public void faultInjectionServerErrorRuleTests_OperationTypeImpactAddresses(Oper
258258
.getContainer(this.cosmosAsyncContainer.getId());
259259

260260
CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(writeRegionServerGoneErrorRule)).block();
261-
assertThat(writeRegionServerGoneErrorRule.getRegionEndpoints().size()).isEqualTo(1);
261+
assertThat(writeRegionServerGoneErrorRule.getRegionEndpoints().size()).isEqualTo(2);
262262

263263
CosmosDiagnostics cosmosDiagnostics = this.performDocumentOperation(container, operationType, createdItem);
264264
if (operationType.isWriteOperation()) {

sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/GlobalEndpointManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ public URI resolveFaultInjectionServiceEndpoint(String region, boolean writeOnly
127127
return this.locationCache.resolveFaultInjectionEndpoint(region, writeOnly);
128128
}
129129

130+
public URI getDefaultEndpoint() {
131+
return this.locationCache.getDefaultEndpoint();
132+
}
133+
130134
public void markEndpointUnavailableForRead(URI endpoint) {
131135
logger.debug("Marking endpoint {} unavailable for read",endpoint);
132136
this.locationCache.markEndpointUnavailableForRead(endpoint);;

sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/routing/LocationCache.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,10 @@ public URI resolveFaultInjectionEndpoint(String region, boolean writeOnly) {
217217
throw new IllegalArgumentException("Can not find service endpoint for region " + region);
218218
}
219219

220+
public URI getDefaultEndpoint() {
221+
return this.defaultEndpoint;
222+
}
223+
220224
public boolean shouldRefreshEndpoints(Utils.ValueHolder<Boolean> canRefreshInBackground) {
221225
canRefreshInBackground.v = true;
222226
DatabaseAccountLocationsInfo currentLocationInfo = this.locationInfo;

0 commit comments

Comments
 (0)