44
55import java .time .Duration ;
66import java .util .ArrayList ;
7- import software . amazon . lambda . durable . DurableConfig ;
7+ import java . util . concurrent . TimeUnit ;
88import software .amazon .lambda .durable .DurableContext ;
99import software .amazon .lambda .durable .DurableFuture ;
1010import software .amazon .lambda .durable .DurableHandler ;
@@ -28,7 +28,7 @@ public record Input(int multiplier) {}
2828
2929 @ Override
3030 public String handleRequest (Input input , DurableContext context ) {
31- var startTime = System .currentTimeMillis ();
31+ var startTime = System .nanoTime ();
3232 var multiplier = input .multiplier () > 0 ? input .multiplier () : 1 ;
3333
3434 context .getLogger ().info ("Starting {} async steps with multiplier {}" , STEP_COUNT , multiplier );
@@ -47,20 +47,19 @@ public String handleRequest(Input input, DurableContext context) {
4747 var results = DurableFuture .allOf (futures );
4848 var totalSum = results .stream ().mapToInt (Integer ::intValue ).sum ();
4949
50- var executionTimeMs = System .currentTimeMillis () - startTime ;
50+ // checkpoint the executionTime so that we can have the same value when replay
51+ var executionTimeMs = context .step (
52+ "execution-time" , Long .class , stepCtx -> TimeUnit .NANOSECONDS .toMillis (System .nanoTime () - startTime ));
5153 context .getLogger ()
5254 .info ("Completed {} steps, total sum: {}, execution time: {}ms" , STEP_COUNT , totalSum , executionTimeMs );
5355
5456 // Wait 10 seconds to test replay
5557 context .wait ("post-compute-wait" , Duration .ofSeconds (10 ));
5658
57- return String .format (
58- "Completed %d async steps. Sum: %d, Replay Time: %dms" , STEP_COUNT , totalSum , executionTimeMs );
59- }
59+ var replayTimeMs = TimeUnit .NANOSECONDS .toMillis (System .nanoTime () - startTime );
6060
61- @ Override
62- protected DurableConfig createConfiguration () {
63- // add a small checkpoint delay to allow checkpoint batching
64- return DurableConfig .builder ().withCheckpointDelay (Duration .ofMillis (1 )).build ();
61+ return String .format (
62+ "Completed %d async steps. Sum: %d, Execution Time: %dms, Replay Time: %dms" ,
63+ STEP_COUNT , totalSum , executionTimeMs , replayTimeMs );
6564 }
6665}
0 commit comments