Add handling of failed remote js responses. Do not block script due to timeout message because of queue connectivity

This commit is contained in:
Volodymyr Babak 2022-07-05 17:22:11 +03:00
parent 04d962c18c
commit 82f9eed985

View File

@ -192,14 +192,33 @@ public class RemoteJsInvokeService extends AbstractJsInvokeService {
Futures.addCallback(future, new FutureCallback<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>>() { Futures.addCallback(future, new FutureCallback<TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse>>() {
@Override @Override
public void onSuccess(@Nullable TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse> result) { public void onSuccess(@Nullable TbProtoQueueMsg<JsInvokeProtos.RemoteJsResponse> result) {
if (result == null) {
queueInvokeMsgs.incrementAndGet(); queueInvokeMsgs.incrementAndGet();
} else {
JsInvokeProtos.JsInvokeResponse invokeResponse = result.getValue().getInvokeResponse();
if (invokeResponse.getSuccess()) {
queueInvokeMsgs.incrementAndGet();
} else {
JsInvokeProtos.JsInvokeErrorCode errorCode = invokeResponse.getErrorCode();
final RuntimeException e = new RuntimeException(invokeResponse.getErrorDetails());
onScriptExecutionError(scriptId, e, scriptBody);
if (JsInvokeProtos.JsInvokeErrorCode.TIMEOUT_ERROR.equals(errorCode)) {
queueTimeoutMsgs.incrementAndGet();
queueFailedMsgs.incrementAndGet();
} else if (JsInvokeProtos.JsInvokeErrorCode.COMPILATION_ERROR.equals(errorCode)
|| JsInvokeProtos.JsInvokeErrorCode.RUNTIME_ERROR.equals(errorCode)) {
queueFailedMsgs.incrementAndGet();
}
}
}
} }
@Override @Override
public void onFailure(Throwable t) { public void onFailure(Throwable t) {
onScriptExecutionError(scriptId, t, scriptBody);
if (t instanceof TimeoutException || (t.getCause() != null && t.getCause() instanceof TimeoutException)) { if (t instanceof TimeoutException || (t.getCause() != null && t.getCause() instanceof TimeoutException)) {
queueTimeoutMsgs.incrementAndGet(); queueTimeoutMsgs.incrementAndGet();
} else {
onScriptExecutionError(scriptId, t, scriptBody);
} }
queueFailedMsgs.incrementAndGet(); queueFailedMsgs.incrementAndGet();
} }