MNT-24441 Transaction Retries From A Behavior Can Fail During REST API Calls (#2921)

* Reset the buffered request at the beginning of the transaction
This commit is contained in:
Eva Vasques
2024-09-18 15:46:53 +01:00
committed by GitHub
parent dea78f5d30
commit 0fd088fc59

View File

@@ -110,22 +110,10 @@ public abstract class AbstractResourceWebScript extends ApiWebScript implements
@Override
public Object execute() throws Throwable
{
try
{
final Params params = paramsExtractor.extractParams(resource.getMetaData(), req);
return AbstractResourceWebScript.this.execute(resource, params, res, isReadOnly);
}
catch (Exception e)
{
if (req instanceof BufferedRequest)
{
// Reset the request in case of a transaction retry
((BufferedRequest) req).reset();
}
// re-throw original exception for retry
throw e;
}
// Reset the request so that it can be read again in case of retry
resetRequest(req);
final Params params = paramsExtractor.extractParams(resource.getMetaData(), req);
return AbstractResourceWebScript.this.execute(resource, params, res, isReadOnly);
}
};
@@ -238,6 +226,15 @@ public abstract class AbstractResourceWebScript extends ApiWebScript implements
}
}
protected void resetRequest(WebScriptRequest req)
{
if (req instanceof BufferedRequest)
{
BufferedRequest bufferedRequest = (BufferedRequest) req;
bufferedRequest.reset();
}
}
protected RetryingTransactionHelper getTransactionHelper(String api)
{
RetryingTransactionHelper transHelper = transactionService.getRetryingTransactionHelper();