Skip to content

Commit a34d44e

Browse files
author
ehennum
committed
skip retry for work on an existing multistatement transaction #1038
1 parent ed418be commit a34d44e

File tree

1 file changed

+31
-23
lines changed

1 file changed

+31
-23
lines changed

marklogic-client-api/src/main/java/com/marklogic/client/impl/OkHttpServices.java

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ public Response apply(Request.Builder funcBuilder) {
552552
return sendRequestOnce(funcBuilder.delete().build());
553553
}
554554
};
555-
Response response = sendRequestWithRetry(requestBldr, doDeleteFunction, null);
555+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doDeleteFunction, null);
556556
int status = response.code();
557557

558558
if (status == STATUS_NOT_FOUND) {
@@ -655,6 +655,12 @@ private Response sendRequestOnce(Request request) {
655655
}
656656

657657
private Response sendRequestWithRetry(Request.Builder requestBldr, Function<Request.Builder, Response> doFunction, Consumer<Boolean> resendableConsumer) {
658+
return sendRequestWithRetry(requestBldr, true, doFunction, resendableConsumer);
659+
}
660+
661+
private Response sendRequestWithRetry(
662+
Request.Builder requestBldr, boolean isRetryable, Function<Request.Builder, Response> doFunction, Consumer<Boolean> resendableConsumer
663+
) {
658664
Response response = null;
659665
int status = -1;
660666
long startTime = System.currentTimeMillis();
@@ -674,11 +680,12 @@ private Response sendRequestWithRetry(Request.Builder requestBldr, Function<Requ
674680
*/
675681
response = doFunction.apply(requestBldr);
676682
status = response.code();
677-
if (!retryStatus.contains(status)) {
683+
if (!isRetryable || !retryStatus.contains(status)) {
678684
if (isFirstRequest()) setFirstRequest(false);
679685
/*
680-
* If we don't get a service unavailable status, we break
681-
* from the retrying loop and return the response
686+
* If we don't get a service unavailable status or if the request
687+
* is not retryable, we break from the retrying loop and return
688+
* the response
682689
*/
683690
break;
684691
}
@@ -753,7 +760,8 @@ public Response apply(Request.Builder funcBuilder) {
753760
return sendRequestOnce(funcBuilder.get().build());
754761
}
755762
};
756-
Response response = sendRequestWithRetry(requestBldr, doGetFunction, null);
763+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null);
764+
757765
int status = response.code();
758766
if (status == STATUS_NOT_FOUND) {
759767
throw new ResourceNotFoundException(
@@ -1029,7 +1037,7 @@ public Response apply(Request.Builder funcBuilder) {
10291037
return sendRequestOnce(funcBuilder.addHeader(HEADER_ACCEPT, multipartMixedWithBoundary()).get());
10301038
}
10311039
};
1032-
Response response = sendRequestWithRetry(requestBldr, doGetFunction, null);
1040+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null);
10331041
int status = response.code();
10341042
if (status == STATUS_NOT_FOUND) {
10351043
throw new ResourceNotFoundException(
@@ -1147,7 +1155,7 @@ public Response apply(Request.Builder funcBuilder) {
11471155
return sendRequestOnce(funcBuilder.head().build());
11481156
}
11491157
};
1150-
Response response = sendRequestWithRetry(requestBldr, doHeadFunction, null);
1158+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doHeadFunction, null);
11511159
int status = response.code();
11521160
if (status != STATUS_OK) {
11531161
if (status == STATUS_NOT_FOUND) {
@@ -1684,7 +1692,7 @@ public Response apply(Request.Builder funcBuilder) {
16841692
return sendRequestOnce(funcBuilder.post(RequestBody.create(null, "")).build());
16851693
}
16861694
};
1687-
Response response = sendRequestWithRetry(requestBldr, doPostFunction, null);
1695+
Response response = sendRequestWithRetry(requestBldr, false, doPostFunction, null);
16881696
int status = response.code();
16891697

16901698
if (status == STATUS_FORBIDDEN) {
@@ -2285,7 +2293,7 @@ public Response apply(Request.Builder funcBuilder) {
22852293
return sendRequestOnce(funcBuilder.delete().build());
22862294
}
22872295
};
2288-
Response response = sendRequestWithRetry(requestBldr, doDeleteFunction, null);
2296+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doDeleteFunction, null);
22892297
int status = response.code();
22902298
if (status == STATUS_FORBIDDEN) {
22912299
throw new ForbiddenUserException("User is not allowed to delete",
@@ -2438,21 +2446,21 @@ public <T> T values(Class<T> as, ValuesDefinition valDef, String mimetype,
24382446
requestBldr = addTelemetryAgentId(requestBldr);
24392447

24402448
final HandleImplementation tempBaseHandle = baseHandle;
2441-
Function<Request.Builder, Response> doGetFunction =
2449+
2450+
Function<Request.Builder, Response> doFunction = (baseHandle == null) ?
24422451
new Function<Request.Builder, Response>() {
24432452
public Response apply(Request.Builder funcBuilder) {
24442453
return doGet(funcBuilder);
24452454
}
2446-
};
2447-
Function<Request.Builder, Response> doPostFunction =
2455+
} :
24482456
new Function<Request.Builder, Response>() {
24492457
public Response apply(Request.Builder funcBuilder) {
24502458
return doPost(null, funcBuilder.header(HEADER_CONTENT_TYPE, tempBaseHandle.getMimetype()),
24512459
tempBaseHandle.sendContent());
24522460
}
24532461
};
2454-
Response response = baseHandle == null ? sendRequestWithRetry(requestBldr, doGetFunction, null)
2455-
: sendRequestWithRetry(requestBldr, doPostFunction, null);
2462+
2463+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doFunction, null);
24562464
int status = response.code();
24572465

24582466
if (status == STATUS_FORBIDDEN) {
@@ -2502,7 +2510,7 @@ public Response apply(Request.Builder funcBuilder) {
25022510
return sendRequestOnce(funcBuilder.get().build());
25032511
}
25042512
};
2505-
Response response = sendRequestWithRetry(requestBldr, doGetFunction, null);
2513+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null);
25062514
int status = response.code();
25072515

25082516
if (status == STATUS_FORBIDDEN) {
@@ -2545,7 +2553,7 @@ public Response apply(Request.Builder funcBuilder) {
25452553
return sendRequestOnce(funcBuilder.get().build());
25462554
}
25472555
};
2548-
Response response = sendRequestWithRetry(requestBldr, doGetFunction, null);
2556+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null);
25492557
int status = response.code();
25502558

25512559
if (status == STATUS_FORBIDDEN) {
@@ -2590,7 +2598,7 @@ public Response apply(Request.Builder funcBuilder) {
25902598
return sendRequestOnce(funcBuilder.get().build());
25912599
}
25922600
};
2593-
Response response = sendRequestWithRetry(requestBldr, doGetFunction, null);
2601+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null);
25942602
int status = response.code();
25952603

25962604
if (status != STATUS_OK) {
@@ -3007,7 +3015,7 @@ public Response apply(Request.Builder funcBuilder) {
30073015
return doGet(funcBuilder);
30083016
}
30093017
};
3010-
Response response = sendRequestWithRetry(requestBldr, doGetFunction, null);
3018+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null);
30113019
int status = response.code();
30123020
checkStatus(response, status, "read", "resource", path,
30133021
ResponseStatus.OK_OR_NO_CONTENT);
@@ -3049,7 +3057,7 @@ public Response apply(Request.Builder funcBuilder) {
30493057
return doGet(funcBuilder);
30503058
}
30513059
};
3052-
Response response = sendRequestWithRetry(requestBldr, doGetFunction, null);
3060+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doGetFunction, null);
30533061
int status = response.code();
30543062
checkStatus(response, status, "read", "resource", path,
30553063
ResponseStatus.OK_OR_NO_CONTENT);
@@ -3096,7 +3104,7 @@ public Response apply(Request.Builder funcBuilder) {
30963104
return doPut(reqlog, funcBuilder, inputBase.sendContent());
30973105
}
30983106
};
3099-
Response response = sendRequestWithRetry(requestBldr, doPutFunction, resendableConsumer);
3107+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doPutFunction, resendableConsumer);
31003108
int status = response.code();
31013109

31023110
checkStatus(response, status, "write", "resource", path,
@@ -3259,7 +3267,7 @@ public Response apply(Request.Builder funcBuilder) {
32593267
}
32603268
};
32613269

3262-
Response response = sendRequestWithRetry(requestBldr, doPostFunction, resendableConsumer);
3270+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doPostFunction, resendableConsumer);
32633271
int status = response.code();
32643272
checkStatus(response, status, operation, "resource", path,
32653273
ResponseStatus.OK_OR_CREATED_OR_NO_CONTENT);
@@ -3798,7 +3806,7 @@ public Response apply(Request.Builder funcBuilder) {
37983806
inputBase.sendContent());
37993807
}
38003808
};
3801-
Response response = sendRequestWithRetry(requestBldr, doPostFunction, resendableConsumer);
3809+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doPostFunction, resendableConsumer);
38023810
int status = response.code();
38033811

38043812
checkStatus(response, status, "apply", "resource", path,
@@ -3909,7 +3917,7 @@ public Response apply(Request.Builder funcBuilder) {
39093917
return doDelete(funcBuilder);
39103918
}
39113919
};
3912-
Response response = sendRequestWithRetry(requestBldr, doDeleteFunction, null);
3920+
Response response = sendRequestWithRetry(requestBldr, (transaction == null), doDeleteFunction, null);
39133921
int status = response.code();
39143922
checkStatus(response, status, "delete", "resource", path,
39153923
ResponseStatus.OK_OR_NO_CONTENT);

0 commit comments

Comments
 (0)