in Amazon.QLDB.Driver/driver/AsyncQldbDriver.cs [110:146]
public async Task<T> Execute<T>(
Func<AsyncTransactionExecutor, Task<T>> func,
RetryPolicy retryPolicy,
CancellationToken cancellationToken = default)
{
this.driverBase.ThrowIfClosed();
bool replaceDeadSession = false;
for (int retryAttempt = 1; true; retryAttempt++)
{
AsyncQldbSession session = null;
try
{
if (replaceDeadSession)
{
session = await this.StartNewSession(cancellationToken);
}
else
{
session = await this.GetSession(cancellationToken);
}
T returnedValue = await session.Execute(func, cancellationToken);
this.driverBase.ReleaseSession(session);
return returnedValue;
}
catch (QldbTransactionException qte)
{
replaceDeadSession = await this.driverBase.GetShouldReplaceDeadSessionOrThrowIfNoRetryAsync(
qte,
session,
retryAttempt,
retryPolicy,
cancellationToken);
}
}
}