Skip to content

Commit fcbad5b

Browse files
committed
send callback success updates in parallel, and delay success to ensure invocation completes
1 parent 6320b63 commit fcbad5b

File tree

2 files changed

+39
-34
lines changed

2 files changed

+39
-34
lines changed

packages/aws-durable-execution-sdk-js-examples/src/examples/create-callback/concurrent/create-callback-concurrent.history.json

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
{
33
"EventType": "ExecutionStarted",
44
"EventId": 1,
5-
"Id": "baad178f-c918-474e-932a-7d0f8868e4be",
6-
"EventTimestamp": "2025-12-10T00:15:09.988Z",
5+
"Id": "ef61112a-8abb-4cb1-b4eb-e84df17b3eff",
6+
"EventTimestamp": "2025-12-11T22:10:27.253Z",
77
"ExecutionStartedDetails": {
88
"Input": {
99
"Payload": "{}"
@@ -16,9 +16,9 @@
1616
"EventId": 2,
1717
"Id": "c4ca4238a0b92382",
1818
"Name": "api-call-1",
19-
"EventTimestamp": "2025-12-10T00:15:10.018Z",
19+
"EventTimestamp": "2025-12-11T22:10:27.286Z",
2020
"CallbackStartedDetails": {
21-
"CallbackId": "eyJleGVjdXRpb25JZCI6IjNlZWIyMjRlLWM2ZGMtNDMzZC04NjFhLWI2YzlhZTIzMjg3NSIsIm9wZXJhdGlvbklkIjoiYzRjYTQyMzhhMGI5MjM4MiIsInRva2VuIjoiM2RjNGQ0ZjAtZGM4OS00YThiLTgxZDgtMmExZDE2MTVhMGRkIn0=",
21+
"CallbackId": "eyJleGVjdXRpb25JZCI6ImY5MmRjZDMzLTE1NTEtNDg2OS04ZDhmLTVkY2E1ZmMzNjM0YyIsIm9wZXJhdGlvbklkIjoiYzRjYTQyMzhhMGI5MjM4MiIsInRva2VuIjoiYmMxM2U4MjYtNmIyZC00MzQyLThjOTYtNDg1MmM1NDhjNTk2In0=",
2222
"Timeout": 300,
2323
"Input": {}
2424
}
@@ -29,9 +29,9 @@
2929
"EventId": 3,
3030
"Id": "c81e728d9d4c2f63",
3131
"Name": "api-call-2",
32-
"EventTimestamp": "2025-12-10T00:15:10.039Z",
32+
"EventTimestamp": "2025-12-11T22:10:27.307Z",
3333
"CallbackStartedDetails": {
34-
"CallbackId": "eyJleGVjdXRpb25JZCI6IjNlZWIyMjRlLWM2ZGMtNDMzZC04NjFhLWI2YzlhZTIzMjg3NSIsIm9wZXJhdGlvbklkIjoiYzgxZTcyOGQ5ZDRjMmY2MyIsInRva2VuIjoiMjAwMjczNzMtNWM0Zi00OGY2LTg0NTEtODc4MmM5Njg4ZTNiIn0=",
34+
"CallbackId": "eyJleGVjdXRpb25JZCI6ImY5MmRjZDMzLTE1NTEtNDg2OS04ZDhmLTVkY2E1ZmMzNjM0YyIsIm9wZXJhdGlvbklkIjoiYzgxZTcyOGQ5ZDRjMmY2MyIsInRva2VuIjoiY2EyOWZmYWQtZDMyMi00YmQ1LTlkNGMtNGY4ZjAxYTk2MjI1In0=",
3535
"Timeout": 300,
3636
"Input": {}
3737
}
@@ -42,20 +42,31 @@
4242
"EventId": 4,
4343
"Id": "eccbc87e4b5ce2fe",
4444
"Name": "api-call-3",
45-
"EventTimestamp": "2025-12-10T00:15:10.067Z",
45+
"EventTimestamp": "2025-12-11T22:10:27.327Z",
4646
"CallbackStartedDetails": {
47-
"CallbackId": "eyJleGVjdXRpb25JZCI6IjNlZWIyMjRlLWM2ZGMtNDMzZC04NjFhLWI2YzlhZTIzMjg3NSIsIm9wZXJhdGlvbklkIjoiZWNjYmM4N2U0YjVjZTJmZSIsInRva2VuIjoiZTAyMTdlNWItMDQyZS00MmRjLWEwNmEtZGFkMzQ4ZjgzNzQwIn0=",
47+
"CallbackId": "eyJleGVjdXRpb25JZCI6ImY5MmRjZDMzLTE1NTEtNDg2OS04ZDhmLTVkY2E1ZmMzNjM0YyIsIm9wZXJhdGlvbklkIjoiZWNjYmM4N2U0YjVjZTJmZSIsInRva2VuIjoiYjAzNTJkYTItMjlhNy00NjViLWI1ZDItNzdjMDgxOTI1MzBlIn0=",
4848
"Timeout": 300,
4949
"Input": {}
5050
}
5151
},
52+
{
53+
"EventType": "InvocationCompleted",
54+
"EventId": 5,
55+
"EventTimestamp": "2025-12-11T22:10:27.347Z",
56+
"InvocationCompletedDetails": {
57+
"StartTimestamp": "2025-12-11T22:10:27.253Z",
58+
"EndTimestamp": "2025-12-11T22:10:27.347Z",
59+
"Error": {},
60+
"RequestId": "87f8f141-1f5f-456f-b2ce-332246be3e33"
61+
}
62+
},
5263
{
5364
"EventType": "CallbackSucceeded",
5465
"SubType": "Callback",
55-
"EventId": 5,
66+
"EventId": 6,
5667
"Id": "c81e728d9d4c2f63",
5768
"Name": "api-call-2",
58-
"EventTimestamp": "2025-12-10T00:15:10.070Z",
69+
"EventTimestamp": "2025-12-11T22:10:27.431Z",
5970
"CallbackSucceededDetails": {
6071
"Result": {
6172
"Payload": "{\"id\":2,\"data\":\"second\"}"
@@ -65,10 +76,10 @@
6576
{
6677
"EventType": "CallbackSucceeded",
6778
"SubType": "Callback",
68-
"EventId": 6,
79+
"EventId": 7,
6980
"Id": "c4ca4238a0b92382",
7081
"Name": "api-call-1",
71-
"EventTimestamp": "2025-12-10T00:15:10.071Z",
82+
"EventTimestamp": "2025-12-11T22:10:27.432Z",
7283
"CallbackSucceededDetails": {
7384
"Result": {
7485
"Payload": "{\"id\":1,\"data\":\"first\"}"
@@ -78,43 +89,32 @@
7889
{
7990
"EventType": "CallbackSucceeded",
8091
"SubType": "Callback",
81-
"EventId": 7,
92+
"EventId": 8,
8293
"Id": "eccbc87e4b5ce2fe",
8394
"Name": "api-call-3",
84-
"EventTimestamp": "2025-12-10T00:15:10.075Z",
95+
"EventTimestamp": "2025-12-11T22:10:27.432Z",
8596
"CallbackSucceededDetails": {
8697
"Result": {
8798
"Payload": "{\"id\":3,\"data\":\"third\"}"
8899
}
89100
}
90101
},
91-
{
92-
"EventType": "InvocationCompleted",
93-
"EventId": 8,
94-
"EventTimestamp": "2025-12-10T00:15:10.126Z",
95-
"InvocationCompletedDetails": {
96-
"StartTimestamp": "2025-12-10T00:15:09.987Z",
97-
"EndTimestamp": "2025-12-10T00:15:10.126Z",
98-
"Error": {},
99-
"RequestId": "6f2132e4-4618-4e08-88c0-9819e79685ca"
100-
}
101-
},
102102
{
103103
"EventType": "InvocationCompleted",
104104
"EventId": 9,
105-
"EventTimestamp": "2025-12-10T00:15:10.146Z",
105+
"EventTimestamp": "2025-12-11T22:10:27.453Z",
106106
"InvocationCompletedDetails": {
107-
"StartTimestamp": "2025-12-10T00:15:10.146Z",
108-
"EndTimestamp": "2025-12-10T00:15:10.146Z",
107+
"StartTimestamp": "2025-12-11T22:10:27.452Z",
108+
"EndTimestamp": "2025-12-11T22:10:27.453Z",
109109
"Error": {},
110-
"RequestId": "7b23a50d-1b08-47d5-96ed-473f84c01ffd"
110+
"RequestId": "9f51c6e9-d21b-4ba7-be12-2ced22ae2f29"
111111
}
112112
},
113113
{
114114
"EventType": "ExecutionSucceeded",
115115
"EventId": 10,
116-
"Id": "baad178f-c918-474e-932a-7d0f8868e4be",
117-
"EventTimestamp": "2025-12-10T00:15:10.147Z",
116+
"Id": "ef61112a-8abb-4cb1-b4eb-e84df17b3eff",
117+
"EventTimestamp": "2025-12-11T22:10:27.453Z",
118118
"ExecutionSucceededDetails": {
119119
"Result": {
120120
"Payload": "{\"results\":[\"{\\\"id\\\":1,\\\"data\\\":\\\"first\\\"}\",\"{\\\"id\\\":2,\\\"data\\\":\\\"second\\\"}\",\"{\\\"id\\\":3,\\\"data\\\":\\\"third\\\"}\"],\"allCompleted\":true}"

packages/aws-durable-execution-sdk-js-examples/src/examples/create-callback/concurrent/create-callback-concurrent.test.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,27 @@ createTests({
2525
callback3.waitForData(WaitingOperationStatus.STARTED),
2626
]);
2727

28+
// Wait a bit to ensure invocations complete (TODO: add a waitForInvocation to testing lib)
29+
await new Promise((resolve) => setTimeout(resolve, 100));
30+
2831
// Complete callbacks in different order
2932
const callbackResult2 = JSON.stringify({
3033
id: 2,
3134
data: "second",
3235
});
33-
await callback2.sendCallbackSuccess(callbackResult2);
3436
const callbackResult1 = JSON.stringify({
3537
id: 1,
3638
data: "first",
3739
});
38-
await callback1.sendCallbackSuccess(callbackResult1);
3940
const callbackResult3 = JSON.stringify({
4041
id: 3,
4142
data: "third",
4243
});
43-
await callback3.sendCallbackSuccess(callbackResult3);
44+
await Promise.all([
45+
callback2.sendCallbackSuccess(callbackResult2),
46+
callback1.sendCallbackSuccess(callbackResult1),
47+
callback3.sendCallbackSuccess(callbackResult3),
48+
]);
4449

4550
const result = await executionPromise;
4651

0 commit comments

Comments
 (0)