From cb93bfb0d4dd18eff38a1acfc2017ea7339b707d Mon Sep 17 00:00:00 2001 From: Steve Androulakis Date: Fri, 25 Oct 2024 13:35:12 -0700 Subject: [PATCH] Minting has its own activity --- .../earlyreturn/EarlyReturnClient.java | 2 +- .../earlyreturn/TransactionActivities.java | 7 +++-- .../TransactionActivitiesImpl.java | 29 ++++++++++--------- .../earlyreturn/TransactionWorkflowImpl.java | 6 ++-- .../earlyreturn/TransactionWorkflowTest.java | 4 ++- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/io/temporal/samples/earlyreturn/EarlyReturnClient.java b/core/src/main/java/io/temporal/samples/earlyreturn/EarlyReturnClient.java index d87e2fda..6ccb11da 100644 --- a/core/src/main/java/io/temporal/samples/earlyreturn/EarlyReturnClient.java +++ b/core/src/main/java/io/temporal/samples/earlyreturn/EarlyReturnClient.java @@ -42,7 +42,7 @@ private static void runWorkflowWithUpdateWithStart(WorkflowClient client) { TransactionRequest txRequest = new TransactionRequest( "Bob", "Alice", - -1000); // Change this amount to a negative number to have initTransaction fail + 1000); // Change this amount to a negative number to have initTransaction fail WorkflowOptions options = buildWorkflowOptions(); TransactionWorkflow workflow = client.newWorkflowStub(TransactionWorkflow.class, options); diff --git a/core/src/main/java/io/temporal/samples/earlyreturn/TransactionActivities.java b/core/src/main/java/io/temporal/samples/earlyreturn/TransactionActivities.java index 8dd8799c..8f3e866f 100644 --- a/core/src/main/java/io/temporal/samples/earlyreturn/TransactionActivities.java +++ b/core/src/main/java/io/temporal/samples/earlyreturn/TransactionActivities.java @@ -25,10 +25,13 @@ @ActivityInterface public interface TransactionActivities { @ActivityMethod - Transaction initTransaction(TransactionRequest txRequest); + Transaction mintTransactionId(TransactionRequest txRequest); @ActivityMethod - void cancelTransaction(TransactionRequest txRequest); + Transaction initTransaction(Transaction tx); + + @ActivityMethod + void cancelTransaction(Transaction tx); @ActivityMethod void completeTransaction(Transaction tx); diff --git a/core/src/main/java/io/temporal/samples/earlyreturn/TransactionActivitiesImpl.java b/core/src/main/java/io/temporal/samples/earlyreturn/TransactionActivitiesImpl.java index 6befc165..52dc6180 100644 --- a/core/src/main/java/io/temporal/samples/earlyreturn/TransactionActivitiesImpl.java +++ b/core/src/main/java/io/temporal/samples/earlyreturn/TransactionActivitiesImpl.java @@ -24,29 +24,32 @@ public class TransactionActivitiesImpl implements TransactionActivities { @Override - public Transaction initTransaction(TransactionRequest txRequest) { + public Transaction mintTransactionId(TransactionRequest request) { + System.out.println("Minting transaction ID"); + // Simulate transaction ID generation + String txId = "TXID" + String.format("%010d", (long) (Math.random() * 1_000_000_0000L)); + sleep(100); + System.out.println("Transaction ID minted: " + txId); + return new Transaction( + txId, request.getSourceAccount(), request.getTargetAccount(), request.getAmount()); + } + + @Override + public Transaction initTransaction(Transaction tx) { System.out.println("Initializing transaction"); - sleep(500); - if (txRequest.getAmount() <= 0) { - System.out.println("Invalid amount: " + txRequest.getAmount()); + sleep(300); + if (tx.getAmount() <= 0) { + System.out.println("Invalid amount: " + tx.getAmount()); throw ApplicationFailure.newNonRetryableFailure( "Non-retryable Activity Failure: Invalid Amount", "InvalidAmount"); } - // Simulate transaction ID generation - String txId = "TXID" + String.format("%010d", (long) (Math.random() * 1_000_000_0000L)); - Transaction tx = - new Transaction( - txId, - txRequest.getSourceAccount(), - txRequest.getTargetAccount(), - txRequest.getAmount()); sleep(500); return tx; } @Override - public void cancelTransaction(TransactionRequest txRequest) { + public void cancelTransaction(Transaction tx) { System.out.println("Cancelling transaction"); sleep(300); System.out.println("Transaction cancelled"); diff --git a/core/src/main/java/io/temporal/samples/earlyreturn/TransactionWorkflowImpl.java b/core/src/main/java/io/temporal/samples/earlyreturn/TransactionWorkflowImpl.java index 8af96d58..8f7c86d3 100644 --- a/core/src/main/java/io/temporal/samples/earlyreturn/TransactionWorkflowImpl.java +++ b/core/src/main/java/io/temporal/samples/earlyreturn/TransactionWorkflowImpl.java @@ -38,8 +38,10 @@ public class TransactionWorkflowImpl implements TransactionWorkflow { @Override public TxResult processTransaction(TransactionRequest txRequest) { + this.tx = activities.mintTransactionId(txRequest); + try { - this.tx = activities.initTransaction(txRequest); + this.tx = activities.initTransaction(this.tx); } catch (Exception e) { initError = e; } finally { @@ -48,7 +50,7 @@ public TxResult processTransaction(TransactionRequest txRequest) { if (initError != null) { // If initialization failed, cancel the transaction - activities.cancelTransaction(txRequest); + activities.cancelTransaction(this.tx); return new TxResult("", "Transaction cancelled."); } else { activities.completeTransaction(this.tx); diff --git a/core/src/test/java/io/temporal/samples/earlyreturn/TransactionWorkflowTest.java b/core/src/test/java/io/temporal/samples/earlyreturn/TransactionWorkflowTest.java index ab92cb68..5661d28a 100644 --- a/core/src/test/java/io/temporal/samples/earlyreturn/TransactionWorkflowTest.java +++ b/core/src/test/java/io/temporal/samples/earlyreturn/TransactionWorkflowTest.java @@ -85,7 +85,8 @@ public void testUpdateWithStartValidAmount() throws Exception { TxResult finalResult = WorkflowStub.fromTyped(workflow).getResult(TxResult.class); assertEquals("Transaction completed successfully.", finalResult.getStatus()); - // Verify activities were called + // Verify activities were calledgit + verify(activities).mintTransactionId(any()); verify(activities).initTransaction(any()); verify(activities).completeTransaction(any()); verifyNoMoreInteractions(activities); @@ -148,6 +149,7 @@ public void testUpdateWithStartInvalidAmount() throws Exception { assertEquals("Transaction cancelled.", finalResult.getStatus()); // Verify activities were called in correct order + verify(activities).mintTransactionId(any()); verify(activities).initTransaction(any()); verify(activities).cancelTransaction(any()); verifyNoMoreInteractions(activities);