Skip to content

Commit 3e27d98

Browse files
xinlian12annie-mac
andauthored
fault injection fix (Azure#34181)
Co-authored-by: annie-mac <[email protected]>
1 parent 685b749 commit 3e27d98

File tree

9 files changed

+65
-58
lines changed

9 files changed

+65
-58
lines changed

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

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

66
import com.azure.cosmos.implementation.OperationType;
7-
import com.azure.cosmos.implementation.RxDocumentServiceRequest;
87
import com.azure.cosmos.implementation.apachecommons.lang.StringUtils;
8+
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestArgs;
99

1010
import java.net.URI;
1111
import java.util.ArrayList;
@@ -62,13 +62,13 @@ public void setAddresses(List<URI> physicalAddresses, boolean primaryOnly) {
6262
}
6363
}
6464

65-
public boolean isApplicable(RxDocumentServiceRequest request) {
66-
return this.validators.stream().allMatch(validator -> validator.isApplicable(request));
65+
public boolean isApplicable(RntbdRequestArgs requestArgs) {
66+
return this.validators.stream().allMatch(validator -> validator.isApplicable(requestArgs));
6767
}
6868

6969
// region ConditionValidators
7070
interface IFaultInjectionConditionValidator {
71-
boolean isApplicable(RxDocumentServiceRequest request);
71+
boolean isApplicable(RntbdRequestArgs requestArgs);
7272
}
7373

7474
static class RegionEndpointValidator implements IFaultInjectionConditionValidator {
@@ -77,8 +77,8 @@ static class RegionEndpointValidator implements IFaultInjectionConditionValidato
7777
this.regionEndpoints = regionEndpoints;
7878
}
7979
@Override
80-
public boolean isApplicable(RxDocumentServiceRequest request) {
81-
return this.regionEndpoints.contains(request.faultInjectionRequestContext.getLocationEndpointToRoute());
80+
public boolean isApplicable(RntbdRequestArgs requestArgs) {
81+
return this.regionEndpoints.contains(requestArgs.serviceRequest().faultInjectionRequestContext.getLocationEndpointToRoute());
8282
}
8383
}
8484

@@ -89,8 +89,8 @@ static class OperationTypeValidator implements IFaultInjectionConditionValidator
8989
}
9090

9191
@Override
92-
public boolean isApplicable(RxDocumentServiceRequest request) {
93-
return request.getOperationType() == operationType;
92+
public boolean isApplicable(RntbdRequestArgs requestArgs) {
93+
return requestArgs.serviceRequest().getOperationType() == operationType;
9494
}
9595
}
9696

@@ -102,8 +102,8 @@ static class ContainerValidator implements IFaultInjectionConditionValidator {
102102
}
103103

104104
@Override
105-
public boolean isApplicable(RxDocumentServiceRequest request) {
106-
return StringUtils.equals(this.containerResourceId, request.requestContext.resolvedCollectionRid);
105+
public boolean isApplicable(RntbdRequestArgs requestArgs) {
106+
return StringUtils.equals(this.containerResourceId, requestArgs.serviceRequest().requestContext.resolvedCollectionRid);
107107
}
108108
}
109109

@@ -114,12 +114,12 @@ static class AddressValidator implements IFaultInjectionConditionValidator {
114114
}
115115

116116
@Override
117-
public boolean isApplicable(RxDocumentServiceRequest request) {
117+
public boolean isApplicable(RntbdRequestArgs requestArgs) {
118118
if (addresses != null
119119
&& addresses.size() > 0) {
120120
return this.addresses
121121
.stream()
122-
.anyMatch(address -> request.requestContext.storePhysicalAddressUri.getURIAsString().startsWith(address.toString()));
122+
.anyMatch(address -> requestArgs.physicalAddressUri().getURIAsString().startsWith(address.toString()));
123123
}
124124

125125
return true;
@@ -128,8 +128,8 @@ public boolean isApplicable(RxDocumentServiceRequest request) {
128128

129129
static class PrimaryAddressValidator implements IFaultInjectionConditionValidator {
130130
@Override
131-
public boolean isApplicable(RxDocumentServiceRequest request) {
132-
return request.requestContext.storePhysicalAddressUri.isPrimary();
131+
public boolean isApplicable(RntbdRequestArgs requestArgs) {
132+
return requestArgs.physicalAddressUri().isPrimary();
133133
}
134134
}
135135
//endregion

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,14 @@ private Mono<IFaultInjectionRuleInternal> getEffectiveServerErrorRule(
156156
}
157157

158158
List<URI> regionEndpoints = this.getRegionEndpoints(rule.getCondition());
159-
effectiveCondition.setRegionEndpoints(regionEndpoints);
160159

161160
if (StringUtils.isEmpty(rule.getCondition().getRegion())) {
162161
// if region is not specific configured, then also add the defaultEndpoint
163162
List<URI> regionEndpointsWithDefault = new ArrayList<>(regionEndpoints);
164163
regionEndpointsWithDefault.add(this.globalEndpointManager.getDefaultEndpoint());
165164
effectiveCondition.setRegionEndpoints(regionEndpointsWithDefault);
165+
} else {
166+
effectiveCondition.setRegionEndpoints(regionEndpoints);
166167
}
167168

168169
// TODO: add handling for gateway mode

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import com.azure.cosmos.CosmosAsyncContainer;
88
import com.azure.cosmos.implementation.AsyncDocumentClient;
99
import com.azure.cosmos.implementation.ImplementationBridgeHelpers;
10-
import com.azure.cosmos.implementation.RxDocumentServiceRequest;
1110
import com.azure.cosmos.implementation.apachecommons.lang.StringUtils;
11+
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestArgs;
1212
import com.azure.cosmos.test.faultinjection.FaultInjectionConnectionType;
1313
import com.azure.cosmos.test.faultinjection.FaultInjectionRule;
1414
import reactor.core.publisher.Mono;
@@ -75,32 +75,32 @@ public Mono<IFaultInjectionRuleInternal> configureFaultInjectionRule(FaultInject
7575
});
7676
}
7777

78-
public FaultInjectionServerErrorRule findRntbdServerResponseDelayRule(RxDocumentServiceRequest request) {
78+
public FaultInjectionServerErrorRule findRntbdServerResponseDelayRule(RntbdRequestArgs requestArgs) {
7979
for (FaultInjectionServerErrorRule serverResponseDelayRule : this.serverResponseDelayRuleSet) {
8080
if (serverResponseDelayRule.getConnectionType() == FaultInjectionConnectionType.DIRECT
81-
&& serverResponseDelayRule.isApplicable(request)) {
81+
&& serverResponseDelayRule.isApplicable(requestArgs)) {
8282
return serverResponseDelayRule;
8383
}
8484
}
8585

8686
return null;
8787
}
8888

89-
public FaultInjectionServerErrorRule findRntbdServerResponseErrorRule(RxDocumentServiceRequest request) {
89+
public FaultInjectionServerErrorRule findRntbdServerResponseErrorRule(RntbdRequestArgs requestArgs) {
9090
for (FaultInjectionServerErrorRule serverResponseDelayRule : this.serverResponseErrorRuleSet) {
9191
if (serverResponseDelayRule.getConnectionType() == FaultInjectionConnectionType.DIRECT
92-
&& serverResponseDelayRule.isApplicable(request)) {
92+
&& serverResponseDelayRule.isApplicable(requestArgs)) {
9393
return serverResponseDelayRule;
9494
}
9595
}
9696

9797
return null;
9898
}
9999

100-
public FaultInjectionServerErrorRule findRntbdServerConnectionDelayRule(RxDocumentServiceRequest request) {
100+
public FaultInjectionServerErrorRule findRntbdServerConnectionDelayRule(RntbdRequestArgs requestArgs) {
101101
for (FaultInjectionServerErrorRule serverResponseDelayRule : this.serverConnectionDelayRuleSet) {
102102
if (serverResponseDelayRule.getConnectionType() == FaultInjectionConnectionType.DIRECT
103-
&& serverResponseDelayRule.isApplicable(request)) {
103+
&& serverResponseDelayRule.isApplicable(requestArgs)) {
104104
return serverResponseDelayRule;
105105
}
106106
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.azure.cosmos.CosmosException;
77
import com.azure.cosmos.implementation.RxDocumentServiceRequest;
88
import com.azure.cosmos.implementation.apachecommons.lang.StringUtils;
9+
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestArgs;
910
import com.azure.cosmos.test.faultinjection.FaultInjectionConnectionType;
1011

1112
import java.net.URI;
@@ -55,10 +56,10 @@ public FaultInjectionServerErrorRule(
5556
this.connectionType = connectionType;
5657
}
5758

58-
public boolean isApplicable(RxDocumentServiceRequest request) {
59+
public boolean isApplicable(RntbdRequestArgs requestArgs) {
5960
if (this.isValid()
60-
&& this.condition.isApplicable(request)
61-
&& this.result.isApplicable(this.id, request)) {
61+
&& this.condition.isApplicable(requestArgs)
62+
&& this.result.isApplicable(this.id, requestArgs.serviceRequest())) {
6263

6364
long hitCount = this.hitCount.incrementAndGet();
6465
return this.hitLimit == null || hitCount <= this.hitLimit;

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

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
package com.azure.cosmos.test.implementation.faultinjection;
55

66
import com.azure.cosmos.CosmosException;
7-
import com.azure.cosmos.implementation.RxDocumentServiceRequest;
87
import com.azure.cosmos.implementation.directconnectivity.rntbd.IRequestRecord;
8+
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestArgs;
99
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestRecord;
1010
import com.azure.cosmos.implementation.faultinjection.IRntbdServerErrorInjector;
1111

@@ -31,11 +31,11 @@ public boolean injectRntbdServerResponseDelay(
3131
RntbdRequestRecord requestRecord,
3232
Consumer<Duration> writeRequestWithDelayConsumer) {
3333

34-
RxDocumentServiceRequest request = requestRecord.args().serviceRequest();
34+
RntbdRequestArgs requestArgs = requestRecord.args();
3535

36-
FaultInjectionServerErrorRule serverResponseDelayRule = this.ruleStore.findRntbdServerResponseDelayRule(request);
36+
FaultInjectionServerErrorRule serverResponseDelayRule = this.ruleStore.findRntbdServerResponseDelayRule(requestArgs);
3737
if (serverResponseDelayRule != null) {
38-
request.faultInjectionRequestContext
38+
requestArgs.serviceRequest().faultInjectionRequestContext
3939
.applyFaultInjectionRule(
4040
requestRecord.transportRequestId(),
4141
serverResponseDelayRule.getId());
@@ -49,16 +49,18 @@ public boolean injectRntbdServerResponseDelay(
4949

5050
@Override
5151
public boolean injectRntbdServerResponseError(RntbdRequestRecord requestRecord) {
52-
RxDocumentServiceRequest request = requestRecord.args().serviceRequest();
52+
RntbdRequestArgs requestArgs = requestRecord.args();
53+
54+
FaultInjectionServerErrorRule serverResponseErrorRule =
55+
this.ruleStore.findRntbdServerResponseErrorRule(requestArgs);
5356

54-
FaultInjectionServerErrorRule serverResponseErrorRule = this.ruleStore.findRntbdServerResponseErrorRule(request);
5557
if (serverResponseErrorRule != null) {
56-
request.faultInjectionRequestContext
58+
requestArgs.serviceRequest().faultInjectionRequestContext
5759
.applyFaultInjectionRule(
5860
requestRecord.transportRequestId(),
5961
serverResponseErrorRule.getId());
6062

61-
CosmosException cause = serverResponseErrorRule.getInjectedServerError(request);
63+
CosmosException cause = serverResponseErrorRule.getInjectedServerError(requestArgs.serviceRequest());
6264
requestRecord.completeExceptionally(cause);
6365
return true;
6466
}
@@ -74,11 +76,13 @@ public boolean injectRntbdServerConnectionDelay(
7476
return false;
7577
}
7678

77-
RxDocumentServiceRequest request = requestRecord.args().serviceRequest();
78-
FaultInjectionServerErrorRule serverConnectionDelayRule = this.ruleStore.findRntbdServerConnectionDelayRule(request);
79+
RntbdRequestArgs requestArgs = requestRecord.args();
80+
81+
FaultInjectionServerErrorRule serverConnectionDelayRule =
82+
this.ruleStore.findRntbdServerConnectionDelayRule(requestArgs);
7983

8084
if (serverConnectionDelayRule != null) {
81-
request.faultInjectionRequestContext
85+
requestArgs.serviceRequest().faultInjectionRequestContext
8286
.applyFaultInjectionRule(
8387
requestRecord.getRequestId(),
8488
serverConnectionDelayRule.getId());

0 commit comments

Comments
 (0)