Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,16 @@ protected override ISaga<TestActorOperations> ReBuildSaga()
}

var sagaBuilder = Saga<TestActorOperations>.Create(_actorHost.Id.ToString(), this, _logger)
.WithOnSuccessCompletionCallback(OnSuccessCompletionCallbackAsync)
.WithOnRevertedCallback(OnRevertedCallbackAsync)
.WithOnFailedRevertedCallback(OnFailedRevertedCallbackAsync)
.WithOnFailedCallback(OnFailedCallbackAsync);
// Synchronous Callbacks
.WithOnSuccessCompletionCallback(OnSuccessCompletionCallback)
.WithOnRevertedCallback(OnRevertedCallback)
.WithOnFailedRevertedCallback(OnFailedRevertedCallback)
.WithOnFailedCallback(OnFailedCallback)
// Asynchronous Callbacks
.WithOnSuccessCompletionCallbackAsync(OnSuccessCompletionCallbackAsync)
.WithOnRevertedCallbackAsync(OnRevertedCallbackAsync)
.WithOnFailedRevertedCallbackAsync(OnFailedRevertedCallbackAsync)
.WithOnFailedCallbackAsync(OnFailedCallbackAsync);

if (_testInfo?.ServiceACall?.InUse ?? false)
{
Expand Down Expand Up @@ -311,58 +317,93 @@ private async Task<bool> ValidateRevertCallTestServiceAsync(TestActorOperations

#region Saga Completion Methods

private async void OnFailedRevertedCallbackAsync(string sagaLog)
// Synchronous Callback Methods
private void OnSuccessCompletionCallback(string sagaLog)
{
_logger.LogError("The Test {TestName} has resulted a failure and left some unused resources. log: {sagaLog}", _testInfo!.TestName,
Environment.NewLine + sagaLog);
_logger.LogError("The Test {TestName} has resulted in success. (Synchronous Callback) log: {sagaLog}", _testInfo!.TestName, sagaLog);
var testResult = new TestResult
{
TestInfo = _testInfo,
IsSuccess = true,
SagaLog = sagaLog
};
Task.Run(() => PublishMessageToSignalRAsync(testResult));
}

private void OnRevertedCallback(string sagaLog)
{
_logger.LogError("The Test {TestName} has resulted in a failure. All resources are deleted. (Synchronous Callback) log: {sagaLog}", _testInfo!.TestName, sagaLog);
var testResult = new TestResult
{
TestInfo = _testInfo,
IsSuccess = false,
SagaLog = sagaLog
};

await PublishMessageToSignalRAsync(testResult);
Task.Run(() => PublishMessageToSignalRAsync(testResult));
}

private async void OnRevertedCallbackAsync(string sagaLog)
private void OnFailedRevertedCallback(string sagaLog)
{
_logger.LogError("The Test {TestName} has resulted a failure. log: {sagaLog}", _testInfo!.TestName,
Environment.NewLine + sagaLog);

_logger.LogError("The Test {TestName} has failed and left some unused resources. (Synchronous Callback) log: {sagaLog}", _testInfo!.TestName, sagaLog);
var testResult = new TestResult
{
TestInfo = _testInfo,
IsSuccess = false,
SagaLog = sagaLog
};

await PublishMessageToSignalRAsync(testResult);
Task.Run(() => PublishMessageToSignalRAsync(testResult));
}

private async void OnFailedCallbackAsync(string sagaLog)
private void OnFailedCallback(string sagaLog)
{
_logger.LogError("The Test {TestName} has resulted a failure, starting reverting resources.", _testInfo!.TestName);

await Task.CompletedTask;
_logger.LogError("The Test {TestName} has failed. Starting to revert resources. (Synchronous Callback)", _testInfo!.TestName);
// Optionally, send a message to the customer
}

private async void OnSuccessCompletionCallbackAsync(string sagaLog)
// Asynchronous Callback Methods
private async Task OnSuccessCompletionCallbackAsync(string sagaLog)
{
_logger.LogError("The Test {TestName} has resulted a success. log: {sagaLog}", _testInfo!.TestName,
Environment.NewLine + sagaLog);

_logger.LogError("The Test {TestName} has resulted in success. (Asynchronous Callback) log: {sagaLog}", _testInfo!.TestName, sagaLog);
var testResult = new TestResult
{
TestInfo = _testInfo,
IsSuccess = true,
SagaLog = sagaLog
};
await PublishMessageToSignalRAsync(testResult);
}

private async Task OnRevertedCallbackAsync(string sagaLog)
{
_logger.LogError("The Test {TestName} has resulted in a failure. All resources are deleted. (Asynchronous Callback) log: {sagaLog}", _testInfo!.TestName, sagaLog);
var testResult = new TestResult
{
TestInfo = _testInfo,
IsSuccess = false,
SagaLog = sagaLog
};
await PublishMessageToSignalRAsync(testResult);
}

private async Task OnFailedRevertedCallbackAsync(string sagaLog)
{
_logger.LogError("The Test {TestName} has failed and left some unused resources. (Asynchronous Callback) log: {sagaLog}", _testInfo!.TestName, sagaLog);
var testResult = new TestResult
{
TestInfo = _testInfo,
IsSuccess = false,
SagaLog = sagaLog
};
await PublishMessageToSignalRAsync(testResult);
}

private async Task OnFailedCallbackAsync(string sagaLog)
{
_logger.LogError("The Test {TestName} has failed. Starting to revert resources. (Asynchronous Callback)", _testInfo!.TestName);
// Optionally, send a message to the customer
await Task.CompletedTask;
}

private async Task OnSagaCompletedAsync(object? _, SagaCompletionEventArgs e)
{
_logger.LogInformation($"Saga {e.SagaId} completed with status {e.Status}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,17 @@ public MainSagaActor(ActorHost host, ILogger<MainSagaActor> logger, IServiceProv
protected override ISaga<MainSagaActorOperations> ReBuildSaga()
{
var sagaBuilder = Saga<MainSagaActorOperations>.Create(ActorHost.Id.ToString(), this, Logger)
.WithOnSuccessCompletionCallback(OnSuccessCompletionCallbackAsync)
.WithOnRevertedCallback(OnRevertedCallbackAsync)
.WithOnFailedRevertedCallback(OnFailedRevertedCallbackAsync)
.WithOnFailedCallback(OnFailedCallbackAsync)
// Synchronous Callbacks
.WithOnSuccessCompletionCallback(OnSuccessCompletionCallback)
.WithOnRevertedCallback(OnRevertedCallback)
.WithOnFailedRevertedCallback(OnFailedRevertedCallback)
.WithOnFailedCallback(OnFailedCallback)

// Asynchronous Callbacks
.WithOnSuccessCompletionCallbackAsync(OnSuccessCompletionCallbackAsync)
.WithOnRevertedCallbackAsync(OnRevertedCallbackAsync)
.WithOnFailedRevertedCallbackAsync(OnFailedRevertedCallbackAsync)
.WithOnFailedCallbackAsync(OnFailedCallbackAsync)

.WithOperation(MainSagaActorOperations.CallSubSaga)
.WithDoOperation(OnCallSubSagaAsync)
Expand Down Expand Up @@ -67,27 +74,52 @@ public Task<TestResult> GetTestResultAsync()
return Task.FromResult(_testResult);
}

// Synchronous Callback Methods
private void OnSuccessCompletionCallback(string log)
{
Logger.LogInformation("MainSagaActor completed successfully. (Synchronous Callback)");
}

private void OnRevertedCallback(string log)
{
Logger.LogInformation("MainSagaActor reverted successfully. (Synchronous Callback)");
}

private void OnFailedRevertedCallback(string log)
{
Logger.LogInformation("MainSagaActor failed to revert. (Synchronous Callback)");
}

private void OnFailedCallback(string log)
{
Logger.LogInformation("MainSagaActor failed. (Synchronous Callback)");
}

private void OnSuccessCompletionCallbackAsync(string obj)
// Asynchronous Callback Methods
private async Task OnSuccessCompletionCallbackAsync(string log)
{
_testResult = TestResult.Succeeded;
Logger.LogInformation("MainSagaActor completed successfully.");
Logger.LogInformation("MainSagaActor completed successfully. (Asynchronous Callback)");
await Task.CompletedTask;
}

private void OnRevertedCallbackAsync(string obj)
private async Task OnRevertedCallbackAsync(string log)
{
Logger.LogInformation("MainSagaActor reverted successfully.");
Logger.LogInformation("MainSagaActor reverted successfully. (Asynchronous Callback)");
await Task.CompletedTask;
}

private void OnFailedRevertedCallbackAsync(string obj)
private async Task OnFailedRevertedCallbackAsync(string log)
{
Logger.LogInformation("MainSagaActor failed to revert.");
Logger.LogInformation("MainSagaActor failed to revert. (Asynchronous Callback)");
await Task.CompletedTask;
}

private void OnFailedCallbackAsync(string obj)
private async Task OnFailedCallbackAsync(string log)
{
_testResult = TestResult.Failed;
Logger.LogInformation("MainSagaActor failed.");
Logger.LogInformation("MainSagaActor failed. (Asynchronous Callback)");
await Task.CompletedTask;
}

private async Task OnCallSubSagaAsync()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,16 @@ public SubSagaActor(ActorHost host, ILogger<SubSagaActor> logger, IServiceProvid
protected override ISaga<SubSagaActorOperations> ReBuildSaga()
{
var sagaBuilder = Saga<SubSagaActorOperations>.Create(ActorHost.Id.ToString(), this, Logger)
.WithOnSuccessCompletionCallback(OnSuccessCompletionCallbackAsync)
.WithOnRevertedCallback(OnRevertedCallbackAsync)
.WithOnFailedRevertedCallback(OnFailedRevertedCallbackAsync)
.WithOnFailedCallback(OnFailedCallbackAsync)
// Synchronous Callbacks
.WithOnSuccessCompletionCallback(OnSuccessCompletionCallback)
.WithOnRevertedCallback(OnRevertedCallback)
.WithOnFailedRevertedCallback(OnFailedRevertedCallback)
.WithOnFailedCallback(OnFailedCallback)
// Asynchronous Callbacks
.WithOnSuccessCompletionCallbackAsync(OnSuccessCompletionCallbackAsync)
.WithOnRevertedCallbackAsync(OnRevertedCallbackAsync)
.WithOnFailedRevertedCallbackAsync(OnFailedRevertedCallbackAsync)
.WithOnFailedCallbackAsync(OnFailedCallbackAsync)

.WithOperation(SubSagaActorOperations.Add)
.WithDoOperation(OnAddInSubSagaAsync)
Expand Down Expand Up @@ -68,7 +74,7 @@ public async Task AddAsync(int a, int b, TimeSpan delay)
private async Task OnAddInSubSagaAsync()
{
//take delay from state store
var delay = StateManager.GetStateAsync<double>("delay").Result;
var delay = await StateManager.GetStateAsync<double>("delay");
Logger.LogInformation("AddInSubSagaAsync called to test the sub-saga with delay {Delay}", delay);

await Task.Delay(TimeSpan.FromSeconds(delay));
Expand All @@ -93,24 +99,50 @@ public async Task DoneAsync()
await CallbackMainSagaAsync(new DoneResult {Result = true});
}

private void OnSuccessCompletionCallbackAsync(string obj)
// Synchronous Callback Methods
private void OnSuccessCompletionCallback(string log)
{
Logger.LogInformation("MainSagaActor completed successfully.");
Logger.LogInformation("SubSagaActor completed successfully. (Synchronous Callback)");
}

private void OnRevertedCallbackAsync(string obj)
private void OnRevertedCallback(string log)
{
Logger.LogInformation("MainSagaActor reverted successfully.");
Logger.LogInformation("SubSagaActor reverted successfully. (Synchronous Callback)");
}

private void OnFailedRevertedCallbackAsync(string obj)
private void OnFailedRevertedCallback(string log)
{
Logger.LogInformation("MainSagaActor failed to revert.");
Logger.LogInformation("SubSagaActor failed to revert. (Synchronous Callback)");
}

private void OnFailedCallbackAsync(string obj)
private void OnFailedCallback(string log)
{
Logger.LogInformation("MainSagaActor failed.");
Logger.LogInformation("SubSagaActor failed. (Synchronous Callback)");
}

// Asynchronous Callback Methods
private async Task OnSuccessCompletionCallbackAsync(string log)
{
Logger.LogInformation("SubSagaActor completed successfully. (Asynchronous Callback)");
await Task.CompletedTask;
}

private async Task OnRevertedCallbackAsync(string log)
{
Logger.LogInformation("SubSagaActor reverted successfully. (Asynchronous Callback)");
await Task.CompletedTask;
}

private async Task OnFailedRevertedCallbackAsync(string log)
{
Logger.LogInformation("SubSagaActor failed to revert. (Asynchronous Callback)");
await Task.CompletedTask;
}

private async Task OnFailedCallbackAsync(string log)
{
Logger.LogInformation("SubSagaActor failed. (Asynchronous Callback)");
await Task.CompletedTask;
}

private Task OnEndSagaAsync()
Expand Down
Loading