Skip to content

Commit 02c155a

Browse files
xinlian12annie-mac
andauthored
Fault injection fix (Azure#34023)
* update routeToLocation in faultInjectionContext --------- Co-authored-by: annie-mac <[email protected]>
1 parent 4bf7a86 commit 02c155a

File tree

5 files changed

+35
-4
lines changed

5 files changed

+35
-4
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ static class RegionEndpointValidator implements IFaultInjectionConditionValidato
7474
}
7575
@Override
7676
public boolean isApplicable(RxDocumentServiceRequest request) {
77-
return this.regionEndpoints.contains(request.requestContext.locationEndpointToRoute);
77+
return this.regionEndpoints.contains(request.faultInjectionRequestContext.getLocationEndpointToRoute());
7878
}
7979
}
8080

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@ public String getId() {
7777

7878
@Override
7979
public long getHitCount() {
80-
return this.hitCount.get() > this.hitLimit ? this.hitLimit : this.hitCount.get();
80+
if (this.hitLimit == null) {
81+
return this.hitCount.get();
82+
}
83+
84+
return Math.min(this.hitLimit, this.hitCount.get());
8185
}
8286

8387
@Override

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ public void faultInjectionServerErrorRuleTests_OperationType(OperationType opera
170170

171171
cosmosDiagnostics = this.performDocumentOperation(cosmosAsyncContainer, operationType, createdItem);
172172
if (operationType == OperationType.Read) {
173+
assertThat(serverTooManyRequestsErrorRule.getHitCount()).isEqualTo(1);
173174
this.validateFaultInjectionRuleApplied(
174175
cosmosDiagnostics,
175176
operationType,
@@ -261,6 +262,7 @@ public void faultInjectionServerErrorRuleTests_OperationTypeImpactAddresses(Oper
261262

262263
CosmosDiagnostics cosmosDiagnostics = this.performDocumentOperation(container, operationType, createdItem);
263264
if (operationType.isWriteOperation()) {
265+
assertThat(writeRegionServerGoneErrorRule.getHitCount()).isEqualTo(1);
264266
this.validateFaultInjectionRuleApplied(
265267
cosmosDiagnostics,
266268
operationType,
@@ -358,6 +360,9 @@ public void faultInjectionServerErrorRuleTests_Region() throws JsonProcessingExc
358360

359361
// Validate fault injection applied in the local region
360362
CosmosDiagnostics cosmosDiagnostics = this.performDocumentOperation(container, OperationType.Read, createdItem);
363+
assertThat(serverErrorRuleLocalRegion.getHitCount()).isEqualTo(1);
364+
assertThat(serverErrorRuleRemoteRegion.getHitCount()).isEqualTo(0);
365+
361366
this.validateFaultInjectionRuleApplied(
362367
cosmosDiagnostics,
363368
OperationType.Read,
@@ -418,6 +423,8 @@ public void faultInjectionServerErrorRuleTests_Partition() throws JsonProcessing
418423

419424
CosmosDiagnostics cosmosDiagnostics =
420425
cosmosAsyncContainer.queryItems(query, queryRequestOptions, TestItem.class).byPage().blockFirst().getCosmosDiagnostics();
426+
427+
assertThat(serverErrorRuleByFeedRange.getHitCount()).isEqualTo(1);
421428
this.validateFaultInjectionRuleApplied(
422429
cosmosDiagnostics,
423430
OperationType.Query,
@@ -484,6 +491,7 @@ public void faultInjectionServerErrorRuleTests_ServerResponseDelay() throws Json
484491
CosmosItemResponse<TestItem> itemResponse =
485492
container.readItem(createdItem.getId(), new PartitionKey(createdItem.getId()), TestItem.class).block();
486493

494+
assertThat(timeoutRule.getHitCount()).isEqualTo(1);
487495
this.validateFaultInjectionRuleApplied(
488496
itemResponse.getDiagnostics(),
489497
OperationType.Read,
@@ -541,6 +549,7 @@ public void faultInjectionServerErrorRuleTests_ServerConnectionDelay() throws Js
541549
CosmosFaultInjectionHelper.configureFaultInjectionRules(container, Arrays.asList(serverConnectionDelayRule)).block();
542550
CosmosItemResponse<TestItem> itemResponse = container.createItem(TestItem.createNewItem()).block();
543551

552+
assertThat(serverConnectionDelayRule.getHitCount()).isEqualTo(1);
544553
this.validateFaultInjectionRuleApplied(
545554
itemResponse.getDiagnostics(),
546555
OperationType.Create,
@@ -612,6 +621,7 @@ public void faultInjectionServerErrorRuleTests_ServerErrorResponse(
612621
}
613622
}
614623

624+
assertThat(serverErrorRule.getHitCount()).isEqualTo(1);
615625
this.validateFaultInjectionRuleApplied(
616626
cosmosDiagnostics,
617627
OperationType.Read,

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,12 @@ public static Mono<DatabaseAccount> getDatabaseAccountFromAnyLocationsAsync(
115115
}
116116

117117
public URI resolveServiceEndpoint(RxDocumentServiceRequest request) {
118-
return this.locationCache.resolveServiceEndpoint(request);
118+
URI serviceEndpoint = this.locationCache.resolveServiceEndpoint(request);
119+
if (request.faultInjectionRequestContext != null) {
120+
request.faultInjectionRequestContext.setLocationEndpointToRoute(serviceEndpoint);
121+
}
122+
123+
return serviceEndpoint;
119124
}
120125

121126
public URI resolveFaultInjectionServiceEndpoint(String region, boolean writeOnly) {

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package com.azure.cosmos.implementation.faultinjection;
55

6+
import java.net.URI;
67
import java.util.Map;
78
import java.util.concurrent.ConcurrentHashMap;
89

@@ -16,6 +17,8 @@ public class FaultInjectionRequestContext {
1617
private final Map<String, Integer> hitCountByRuleMap;
1718
private final Map<Long, String> transportRequestIdRuleIdMap;
1819

20+
private volatile URI locationEndpointToRoute;
21+
1922
/***
2023
* This usually is called during retries.
2124
* The hit count cap will need to be copied over so that the total times defined in error result be honored.
@@ -50,6 +53,15 @@ public int getFaultInjectionRuleApplyCount(String ruleId) {
5053
return this.hitCountByRuleMap.getOrDefault(ruleId, 0);
5154
}
5255
public String getFaultInjectionRuleId(long transportRequesetId) {
53-
return this.transportRequestIdRuleIdMap.getOrDefault(transportRequesetId, null); }
56+
return this.transportRequestIdRuleIdMap.getOrDefault(transportRequesetId, null);
57+
}
58+
59+
public void setLocationEndpointToRoute(URI locationEndpointToRoute) {
60+
this.locationEndpointToRoute = locationEndpointToRoute;
61+
}
62+
63+
public URI getLocationEndpointToRoute() {
64+
return this.locationEndpointToRoute;
65+
}
5466
}
5567

0 commit comments

Comments
 (0)