Skip to content

Commit

Permalink
Fixed CancellationTokenSource Issue
Browse files Browse the repository at this point in the history
  • Loading branch information
jinan-agoda committed Feb 27, 2024
1 parent 6f1c823 commit 18f1b8d
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 25 deletions.
22 changes: 0 additions & 22 deletions Agoda.Frameworks.DB.Tests/DbRepositoryTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -666,28 +666,6 @@ public void QueryMultipleAsync_Retry_Failure()
Assert.IsNotNull(_onQueryCompleteEvents[0].Error);
Assert.IsNotNull(_onQueryCompleteEvents[1].Error);
}

[Test]
public async Task ExecuteReaderAsync_CancellationToken_Cancelled()
{
var cancellationToken = new CancellationTokenSource(TimeSpan.FromDays(1));
cancellationToken.Cancel();
var maxAttemptCount = 2;
Assert.ThrowsAsync<TaskCanceledException>(async () => await _db.ExecuteReaderAsync<string>("mobile_ro", "db.v1.sp_foo", 1,
maxAttemptCount,
cancellationToken.Token,
new IDbDataParameter[]
{
new SqlParameter("@param1", "value1"),
new SqlParameter("@param2", "value2")
}, reader => { return Task.FromResult("");})
);

_dbResources.Verify(x => x.ChooseDb("mobile_ro").UpdateWeight(It.IsAny<string>(), false), Times.Exactly(maxAttemptCount));
}


protected class FakeStoredProc : IStoredProc<string, string>
{
public string DbName => "mobile_ro";
Expand Down
6 changes: 4 additions & 2 deletions Agoda.Frameworks.DB/DbRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -303,14 +303,16 @@ public Task<T> ExecuteReaderAsync<T>(
string storedProc,
int timeoutSecs,
int maxAttemptCount,
CancellationToken token,
int taskCancellationTimeOutInMilliSecs,
IDbDataParameter[] parameters,
Func<SqlDataReader, Task<T>> callback)
{
return _dbResources.ChooseDb(database).ExecuteAsync(async (connectionStr, _) =>
{
var stopwatch = Stopwatch.StartNew();
Exception error = null;
var cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.CancelAfter(taskCancellationTimeOutInMilliSecs);
try
{
using (var connection = _generateConnection(connectionStr))
Expand All @@ -332,7 +334,7 @@ public Task<T> ExecuteReaderAsync<T>(
CommandTimeout = timeoutSecs
};
sqlCommand.Parameters.AddRange(parameters);
using (var reader = await sqlCommand.ExecuteReaderAsync(token))
using (var reader = await sqlCommand.ExecuteReaderAsync(cancellationTokenSource.Token))
{
return await callback(reader);
}
Expand Down
2 changes: 1 addition & 1 deletion Agoda.Frameworks.DB/IDbRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ Task<T> ExecuteReaderAsync<T>(
string storedProc,
int timeoutSecs,
int maxAttemptCount,
CancellationToken token,
int taskCancellationTimeOutInMilliSecs,
IDbDataParameter[] parameters,
Func<SqlDataReader, Task<T>> callback);

Expand Down

0 comments on commit 18f1b8d

Please sign in to comment.