Home

Awesome

Durable Promise Specification

Keywords

Promise, Future, Awaitable, Future Value, Write Once Register, Write Only Register, Single Assignment Container, Concurrency, Coordination

tl;dr This repository is a specification for a Durable Promise API

20 years after the launch of Amazon Web Services, building reliable and scalable cloud-based applications is a challenge even for the most seasoned developers. Developing distributed applications is a dissonant mix of idioms, patterns, and technologies, feeling fragmented and inconsistent. Yet developing traditional applications feels coherent and consistent. Developers who craft these applications have access to composable abstractions, functions & promises a.k.a async•await, and enjoy a delightful developer experience.

Even the largest traditional systems are built consistently from the smallest building blocks: functions & promises. Functions & promises are the foundational model to express concurrency and coordination. While their interpretations vary across languages and runtimes, the ideas are the same.

Promises

A promise, also called future, awaitable, or deferred is a representation of a future value. A promise is either pending or completed, that is, resolved or rejected: A promise is pending, signaling that the value is not yet available or completed, signaling success or failure.

Promise

A promise is a coordination primitive: In a typical scenario, a downstream function execution creates a promise and awaits its completion. An upstream function execution either resolves or rejects the promise. On completion, the downstream execution resumes with the value of the promise.

Promise API

Adding Durability

Recently, durable functions a.k.a durable executions have emerged as an abstraction for building distributed systems. Durable functions are functions with strong execution guarantees. Traditional, that is, volatile functions are bound to a single runtime. If the runtime crashes, any volatile function execution ceases to exist. Durable function executions are not bound to a runtime. If the runtime crashes, a durable function execution is simply rescheduled on a different runtime.

Durable promises are the counterpart to durable functions. Durable promises have identity and state that is not bound to a single runtime. Based on durable promises you can compose reliable and scalable distributed systems across heterogenous technology stacks.

Application Programming Interface (API)

Logically, the Application Programming Interface (API) is divided in two parts, the Downstream API and the Upstream API.

Downstream API

Upstream API

Idempotence

In a distributed system, managing duplicate and racing messages is essential. When creating, resolving, or rejecting a Durable Promise, use an idempotency key. An idempotency key is a client generated value which the server uses to recognize when two different physical requests represent the same logical request.

Current StateActionNext StateOutput
1InitCreate(id, ⊥, T)Pending(id, ⊥, ⊥)OK
2InitCreate(id, ⊥, F)Pending(id, ⊥, ⊥)OK
3InitCreate(id, ikc, T)Pending(id, ikc, ⊥)OK
4InitCreate(id, ikc, F)Pending(id, ikc, ⊥)OK
5InitResolve(id, ⊥, T)InitKO, Already Init
6InitResolve(id, ⊥, F)InitKO, Already Init
7InitResolve(id, iku, T)InitKO, Already Init
8InitResolve(id, iku, F)InitKO, Already Init
9InitReject(id, ⊥, T)InitKO, Already Init
10InitReject(id, ⊥, F)InitKO, Already Init
11InitReject(id, iku, T)InitKO, Already Init
12InitReject(id, iku, F)InitKO, Already Init
13InitCancel(id, ⊥, T)InitKO, Already Init
14InitCancel(id, ⊥, F)InitKO, Already Init
15InitCancel(id, iku, T)InitKO, Already Init
16InitCancel(id, iku, F)InitKO, Already Init
17Pending(id, ⊥, ⊥)Create(id, ⊥, T)Pending(id, ⊥, ⊥)KO, Already Pending
18Pending(id, ⊥, ⊥)Create(id, ⊥, F)Pending(id, ⊥, ⊥)KO, Already Pending
19Pending(id, ⊥, ⊥)Create(id, ikc, T)Pending(id, ⊥, ⊥)KO, Already Pending
20Pending(id, ⊥, ⊥)Create(id, ikc, F)Pending(id, ⊥, ⊥)KO, Already Pending
21Pending(id, ⊥, ⊥)Resolve(id, ⊥, T)Resolved(id, ⊥, ⊥)OK
22Pending(id, ⊥, ⊥)Resolve(id, ⊥, F)Resolved(id, ⊥, ⊥)OK
23Pending(id, ⊥, ⊥)Resolve(id, iku, T)Resolved(id, ⊥, iku)OK
24Pending(id, ⊥, ⊥)Resolve(id, iku, F)Resolved(id, ⊥, iku)OK
25Pending(id, ⊥, ⊥)Reject(id, ⊥, T)Rejected(id, ⊥, ⊥)OK
26Pending(id, ⊥, ⊥)Reject(id, ⊥, F)Rejected(id, ⊥, ⊥)OK
27Pending(id, ⊥, ⊥)Reject(id, iku, T)Rejected(id, ⊥, iku)OK
28Pending(id, ⊥, ⊥)Reject(id, iku, F)Rejected(id, ⊥, iku)OK
29Pending(id, ⊥, ⊥)Cancel(id, ⊥, T)Canceled(id, ⊥, ⊥)OK
30Pending(id, ⊥, ⊥)Cancel(id, ⊥, F)Canceled(id, ⊥, ⊥)OK
31Pending(id, ⊥, ⊥)Cancel(id, iku, T)Canceled(id, ⊥, iku)OK
32Pending(id, ⊥, ⊥)Cancel(id, iku, F)Canceled(id, ⊥, iku)OK
33Pending(id, ikc, ⊥)Create(id, ⊥, T)Pending(id, ikc, ⊥)KO, Already Pending
34Pending(id, ikc, ⊥)Create(id, ⊥, F)Pending(id, ikc, ⊥)KO, Already Pending
35Pending(id, ikc, ⊥)Create(id, ikc, T)Pending(id, ikc, ⊥)OK, Deduplicated
36Pending(id, ikc, ⊥)Create(id, ikc, F)Pending(id, ikc, ⊥)OK, Deduplicated
37Pending(id, ikc, ⊥)Create(id, ikc*, T)Pending(id, ikc, ⊥)KO, Already Pending
38Pending(id, ikc, ⊥)Create(id, ikc*, F)Pending(id, ikc, ⊥)KO, Already Pending
39Pending(id, ikc, ⊥)Resolve(id, ⊥, T)Resolved(id, ikc, ⊥)OK
40Pending(id, ikc, ⊥)Resolve(id, ⊥, F)Resolved(id, ikc, ⊥)OK
41Pending(id, ikc, ⊥)Resolve(id, iku, T)Resolved(id, ikc, iku)OK
42Pending(id, ikc, ⊥)Resolve(id, iku, F)Resolved(id, ikc, iku)OK
43Pending(id, ikc, ⊥)Reject(id, ⊥, T)Rejected(id, ikc, ⊥)OK
44Pending(id, ikc, ⊥)Reject(id, ⊥, F)Rejected(id, ikc, ⊥)OK
45Pending(id, ikc, ⊥)Reject(id, iku, T)Rejected(id, ikc, iku)OK
46Pending(id, ikc, ⊥)Reject(id, iku, F)Rejected(id, ikc, iku)OK
47Pending(id, ikc, ⊥)Cancel(id, ⊥, T)Canceled(id, ikc, ⊥)OK
48Pending(id, ikc, ⊥)Cancel(id, ⊥, F)Canceled(id, ikc, ⊥)OK
49Pending(id, ikc, ⊥)Cancel(id, iku, T)Canceled(id, ikc, iku)OK
50Pending(id, ikc, ⊥)Cancel(id, iku, F)Canceled(id, ikc, iku)OK
51Resolved(id, ⊥, ⊥)Create(id, ⊥, T)Resolved(id, ⊥, ⊥)KO, Already Resolved
52Resolved(id, ⊥, ⊥)Create(id, ⊥, F)Resolved(id, ⊥, ⊥)KO, Already Resolved
53Resolved(id, ⊥, ⊥)Create(id, ikc, T)Resolved(id, ⊥, ⊥)KO, Already Resolved
54Resolved(id, ⊥, ⊥)Create(id, ikc, F)Resolved(id, ⊥, ⊥)KO, Already Resolved
55Resolved(id, ⊥, ⊥)Resolve(id, ⊥, T)Resolved(id, ⊥, ⊥)KO, Already Resolved
56Resolved(id, ⊥, ⊥)Resolve(id, ⊥, F)Resolved(id, ⊥, ⊥)KO, Already Resolved
57Resolved(id, ⊥, ⊥)Resolve(id, iku, T)Resolved(id, ⊥, ⊥)KO, Already Resolved
58Resolved(id, ⊥, ⊥)Resolve(id, iku, F)Resolved(id, ⊥, ⊥)KO, Already Resolved
59Resolved(id, ⊥, ⊥)Reject(id, ⊥, T)Resolved(id, ⊥, ⊥)KO, Already Resolved
60Resolved(id, ⊥, ⊥)Reject(id, ⊥, F)Resolved(id, ⊥, ⊥)KO, Already Resolved
61Resolved(id, ⊥, ⊥)Reject(id, iku, T)Resolved(id, ⊥, ⊥)KO, Already Resolved
62Resolved(id, ⊥, ⊥)Reject(id, iku, F)Resolved(id, ⊥, ⊥)KO, Already Resolved
63Resolved(id, ⊥, ⊥)Cancel(id, ⊥, T)Resolved(id, ⊥, ⊥)KO, Already Resolved
64Resolved(id, ⊥, ⊥)Cancel(id, ⊥, F)Resolved(id, ⊥, ⊥)KO, Already Resolved
65Resolved(id, ⊥, ⊥)Cancel(id, iku, T)Resolved(id, ⊥, ⊥)KO, Already Resolved
66Resolved(id, ⊥, ⊥)Cancel(id, iku, F)Resolved(id, ⊥, ⊥)KO, Already Resolved
67Resolved(id, ⊥, iku)Create(id, ⊥, T)Resolved(id, ⊥, iku)KO, Already Resolved
68Resolved(id, ⊥, iku)Create(id, ⊥, F)Resolved(id, ⊥, iku)KO, Already Resolved
69Resolved(id, ⊥, iku)Create(id, ikc, T)Resolved(id, ⊥, iku)KO, Already Resolved
70Resolved(id, ⊥, iku)Create(id, ikc, F)Resolved(id, ⊥, iku)KO, Already Resolved
71Resolved(id, ⊥, iku)Resolve(id, ⊥, T)Resolved(id, ⊥, iku)KO, Already Resolved
72Resolved(id, ⊥, iku)Resolve(id, ⊥, F)Resolved(id, ⊥, iku)KO, Already Resolved
73Resolved(id, ⊥, iku)Resolve(id, iku, T)Resolved(id, ⊥, iku)OK, Deduplicated
74Resolved(id, ⊥, iku)Resolve(id, iku, F)Resolved(id, ⊥, iku)OK, Deduplicated
75Resolved(id, ⊥, iku)Resolve(id, iku*, T)Resolved(id, ⊥, iku)KO, Already Resolved
76Resolved(id, ⊥, iku)Resolve(id, iku*, F)Resolved(id, ⊥, iku)KO, Already Resolved
77Resolved(id, ⊥, iku)Reject(id, ⊥, T)Resolved(id, ⊥, iku)KO, Already Resolved
78Resolved(id, ⊥, iku)Reject(id, ⊥, F)Resolved(id, ⊥, iku)KO, Already Resolved
79Resolved(id, ⊥, iku)Reject(id, iku, T)Resolved(id, ⊥, iku)KO, Already Resolved
80Resolved(id, ⊥, iku)Reject(id, iku, F)Resolved(id, ⊥, iku)OK, Deduplicated
81Resolved(id, ⊥, iku)Reject(id, iku*, T)Resolved(id, ⊥, iku)KO, Already Resolved
82Resolved(id, ⊥, iku)Reject(id, iku*, F)Resolved(id, ⊥, iku)KO, Already Resolved
83Resolved(id, ⊥, iku)Cancel(id, ⊥, T)Resolved(id, ⊥, iku)KO, Already Resolved
84Resolved(id, ⊥, iku)Cancel(id, ⊥, F)Resolved(id, ⊥, iku)KO, Already Resolved
85Resolved(id, ⊥, iku)Cancel(id, iku, T)Resolved(id, ⊥, iku)KO, Already Resolved
86Resolved(id, ⊥, iku)Cancel(id, iku, F)Resolved(id, ⊥, iku)OK, Deduplicated
87Resolved(id, ⊥, iku)Cancel(id, iku*, T)Resolved(id, ⊥, iku)KO, Already Resolved
88Resolved(id, ⊥, iku)Cancel(id, iku*, F)Resolved(id, ⊥, iku)KO, Already Resolved
89Resolved(id, ikc, ⊥)Create(id, ⊥, T)Resolved(id, ikc, ⊥)KO, Already Resolved
90Resolved(id, ikc, ⊥)Create(id, ⊥, F)Resolved(id, ikc, ⊥)KO, Already Resolved
91Resolved(id, ikc, ⊥)Create(id, ikc, T)Resolved(id, ikc, ⊥)KO, Already Resolved
92Resolved(id, ikc, ⊥)Create(id, ikc, F)Resolved(id, ikc, ⊥)OK, Deduplicated
93Resolved(id, ikc, ⊥)Create(id, ikc*, T)Resolved(id, ikc, ⊥)KO, Already Resolved
94Resolved(id, ikc, ⊥)Create(id, ikc*, F)Resolved(id, ikc, ⊥)KO, Already Resolved
95Resolved(id, ikc, ⊥)Resolve(id, ⊥, T)Resolved(id, ikc, ⊥)KO, Already Resolved
96Resolved(id, ikc, ⊥)Resolve(id, ⊥, F)Resolved(id, ikc, ⊥)KO, Already Resolved
97Resolved(id, ikc, ⊥)Resolve(id, iku, T)Resolved(id, ikc, ⊥)KO, Already Resolved
98Resolved(id, ikc, ⊥)Resolve(id, iku, F)Resolved(id, ikc, ⊥)KO, Already Resolved
99Resolved(id, ikc, ⊥)Reject(id, ⊥, T)Resolved(id, ikc, ⊥)KO, Already Resolved
100Resolved(id, ikc, ⊥)Reject(id, ⊥, F)Resolved(id, ikc, ⊥)KO, Already Resolved
101Resolved(id, ikc, ⊥)Reject(id, iku, T)Resolved(id, ikc, ⊥)KO, Already Resolved
102Resolved(id, ikc, ⊥)Reject(id, iku, F)Resolved(id, ikc, ⊥)KO, Already Resolved
103Resolved(id, ikc, ⊥)Cancel(id, ⊥, T)Resolved(id, ikc, ⊥)KO, Already Resolved
104Resolved(id, ikc, ⊥)Cancel(id, ⊥, F)Resolved(id, ikc, ⊥)KO, Already Resolved
105Resolved(id, ikc, ⊥)Cancel(id, iku, T)Resolved(id, ikc, ⊥)KO, Already Resolved
106Resolved(id, ikc, ⊥)Cancel(id, iku, F)Resolved(id, ikc, ⊥)KO, Already Resolved
107Resolved(id, ikc, iku)Create(id, ⊥, T)Resolved(id, ikc, iku)KO, Already Resolved
108Resolved(id, ikc, iku)Create(id, ⊥, F)Resolved(id, ikc, iku)KO, Already Resolved
109Resolved(id, ikc, iku)Create(id, ikc, T)Resolved(id, ikc, iku)KO, Already Resolved
110Resolved(id, ikc, iku)Create(id, ikc, F)Resolved(id, ikc, iku)OK, Deduplicated
111Resolved(id, ikc, iku)Create(id, ikc*, T)Resolved(id, ikc, iku)KO, Already Resolved
112Resolved(id, ikc, iku)Create(id, ikc*, F)Resolved(id, ikc, iku)KO, Already Resolved
113Resolved(id, ikc, iku)Resolve(id, ⊥, T)Resolved(id, ikc, iku)KO, Already Resolved
114Resolved(id, ikc, iku)Resolve(id, ⊥, F)Resolved(id, ikc, iku)KO, Already Resolved
115Resolved(id, ikc, iku)Resolve(id, iku, T)Resolved(id, ikc, iku)OK, Deduplicated
116Resolved(id, ikc, iku)Resolve(id, iku, F)Resolved(id, ikc, iku)OK, Deduplicated
117Resolved(id, ikc, iku)Resolve(id, iku*, T)Resolved(id, ikc, iku)KO, Already Resolved
118Resolved(id, ikc, iku)Resolve(id, iku*, F)Resolved(id, ikc, iku)KO, Already Resolved
119Resolved(id, ikc, iku)Reject(id, ⊥, T)Resolved(id, ikc, iku)KO, Already Resolved
120Resolved(id, ikc, iku)Reject(id, ⊥, F)Resolved(id, ikc, iku)KO, Already Resolved
121Resolved(id, ikc, iku)Reject(id, iku, T)Resolved(id, ikc, iku)KO, Already Resolved
122Resolved(id, ikc, iku)Reject(id, iku, F)Resolved(id, ikc, iku)OK, Deduplicated
123Resolved(id, ikc, iku)Reject(id, iku*, T)Resolved(id, ikc, iku)KO, Already Resolved
124Resolved(id, ikc, iku)Reject(id, iku*, F)Resolved(id, ikc, iku)KO, Already Resolved
125Resolved(id, ikc, iku)Cancel(id, ⊥, T)Resolved(id, ikc, iku)KO, Already Resolved
126Resolved(id, ikc, iku)Cancel(id, ⊥, F)Resolved(id, ikc, iku)KO, Already Resolved
127Resolved(id, ikc, iku)Cancel(id, iku, T)Resolved(id, ikc, iku)KO, Already Resolved
128Resolved(id, ikc, iku)Cancel(id, iku, F)Resolved(id, ikc, iku)OK, Deduplicated
129Resolved(id, ikc, iku)Cancel(id, iku*, T)Resolved(id, ikc, iku)KO, Already Resolved
130Resolved(id, ikc, iku)Cancel(id, iku*, F)Resolved(id, ikc, iku)KO, Already Resolved
131Rejected(id, ⊥, ⊥)Create(id, ⊥, T)Rejected(id, ⊥, ⊥)KO, Already Rejected
132Rejected(id, ⊥, ⊥)Create(id, ⊥, F)Rejected(id, ⊥, ⊥)KO, Already Rejected
133Rejected(id, ⊥, ⊥)Create(id, ikc, T)Rejected(id, ⊥, ⊥)KO, Already Rejected
134Rejected(id, ⊥, ⊥)Create(id, ikc, F)Rejected(id, ⊥, ⊥)KO, Already Rejected
135Rejected(id, ⊥, ⊥)Resolve(id, ⊥, T)Rejected(id, ⊥, ⊥)KO, Already Rejected
136Rejected(id, ⊥, ⊥)Resolve(id, ⊥, F)Rejected(id, ⊥, ⊥)KO, Already Rejected
137Rejected(id, ⊥, ⊥)Resolve(id, iku, T)Rejected(id, ⊥, ⊥)KO, Already Rejected
138Rejected(id, ⊥, ⊥)Resolve(id, iku, F)Rejected(id, ⊥, ⊥)KO, Already Rejected
139Rejected(id, ⊥, ⊥)Reject(id, ⊥, T)Rejected(id, ⊥, ⊥)KO, Already Rejected
140Rejected(id, ⊥, ⊥)Reject(id, ⊥, F)Rejected(id, ⊥, ⊥)KO, Already Rejected
141Rejected(id, ⊥, ⊥)Reject(id, iku, T)Rejected(id, ⊥, ⊥)KO, Already Rejected
142Rejected(id, ⊥, ⊥)Reject(id, iku, F)Rejected(id, ⊥, ⊥)KO, Already Rejected
143Rejected(id, ⊥, ⊥)Cancel(id, ⊥, T)Rejected(id, ⊥, ⊥)KO, Already Rejected
144Rejected(id, ⊥, ⊥)Cancel(id, ⊥, F)Rejected(id, ⊥, ⊥)KO, Already Rejected
145Rejected(id, ⊥, ⊥)Cancel(id, iku, T)Rejected(id, ⊥, ⊥)KO, Already Rejected
146Rejected(id, ⊥, ⊥)Cancel(id, iku, F)Rejected(id, ⊥, ⊥)KO, Already Rejected
147Rejected(id, ⊥, iku)Create(id, ⊥, T)Rejected(id, ⊥, iku)KO, Already Rejected
148Rejected(id, ⊥, iku)Create(id, ⊥, F)Rejected(id, ⊥, iku)KO, Already Rejected
149Rejected(id, ⊥, iku)Create(id, ikc, T)Rejected(id, ⊥, iku)KO, Already Rejected
150Rejected(id, ⊥, iku)Create(id, ikc, F)Rejected(id, ⊥, iku)KO, Already Rejected
151Rejected(id, ⊥, iku)Resolve(id, ⊥, T)Rejected(id, ⊥, iku)KO, Already Rejected
152Rejected(id, ⊥, iku)Resolve(id, ⊥, F)Rejected(id, ⊥, iku)KO, Already Rejected
153Rejected(id, ⊥, iku)Resolve(id, iku, T)Rejected(id, ⊥, iku)KO, Already Rejected
154Rejected(id, ⊥, iku)Resolve(id, iku, F)Rejected(id, ⊥, iku)OK, Deduplicated
155Rejected(id, ⊥, iku)Resolve(id, iku*, T)Rejected(id, ⊥, iku)KO, Already Rejected
156Rejected(id, ⊥, iku)Resolve(id, iku*, F)Rejected(id, ⊥, iku)KO, Already Rejected
157Rejected(id, ⊥, iku)Reject(id, ⊥, T)Rejected(id, ⊥, iku)KO, Already Rejected
158Rejected(id, ⊥, iku)Reject(id, ⊥, F)Rejected(id, ⊥, iku)KO, Already Rejected
159Rejected(id, ⊥, iku)Reject(id, iku, T)Rejected(id, ⊥, iku)OK, Deduplicated
160Rejected(id, ⊥, iku)Reject(id, iku, F)Rejected(id, ⊥, iku)OK, Deduplicated
161Rejected(id, ⊥, iku)Reject(id, iku*, T)Rejected(id, ⊥, iku)KO, Already Rejected
162Rejected(id, ⊥, iku)Reject(id, iku*, F)Rejected(id, ⊥, iku)KO, Already Rejected
163Rejected(id, ⊥, iku)Cancel(id, ⊥, T)Rejected(id, ⊥, iku)KO, Already Rejected
164Rejected(id, ⊥, iku)Cancel(id, ⊥, F)Rejected(id, ⊥, iku)KO, Already Rejected
165Rejected(id, ⊥, iku)Cancel(id, iku, T)Rejected(id, ⊥, iku)KO, Already Rejected
166Rejected(id, ⊥, iku)Cancel(id, iku, F)Rejected(id, ⊥, iku)OK, Deduplicated
167Rejected(id, ⊥, iku)Cancel(id, iku*, T)Rejected(id, ⊥, iku)KO, Already Rejected
168Rejected(id, ⊥, iku)Cancel(id, iku*, F)Rejected(id, ⊥, iku)KO, Already Rejected
169Rejected(id, ikc, ⊥)Create(id, ⊥, T)Rejected(id, ikc, ⊥)KO, Already Rejected
170Rejected(id, ikc, ⊥)Create(id, ⊥, F)Rejected(id, ikc, ⊥)KO, Already Rejected
171Rejected(id, ikc, ⊥)Create(id, ikc, T)Rejected(id, ikc, ⊥)KO, Already Rejected
172Rejected(id, ikc, ⊥)Create(id, ikc, F)Rejected(id, ikc, ⊥)OK, Deduplicated
173Rejected(id, ikc, ⊥)Create(id, ikc*, T)Rejected(id, ikc, ⊥)KO, Already Rejected
174Rejected(id, ikc, ⊥)Create(id, ikc*, F)Rejected(id, ikc, ⊥)KO, Already Rejected
175Rejected(id, ikc, ⊥)Resolve(id, ⊥, T)Rejected(id, ikc, ⊥)KO, Already Rejected
176Rejected(id, ikc, ⊥)Resolve(id, ⊥, F)Rejected(id, ikc, ⊥)KO, Already Rejected
177Rejected(id, ikc, ⊥)Resolve(id, iku, T)Rejected(id, ikc, ⊥)KO, Already Rejected
178Rejected(id, ikc, ⊥)Resolve(id, iku, F)Rejected(id, ikc, ⊥)KO, Already Rejected
179Rejected(id, ikc, ⊥)Reject(id, ⊥, T)Rejected(id, ikc, ⊥)KO, Already Rejected
180Rejected(id, ikc, ⊥)Reject(id, ⊥, F)Rejected(id, ikc, ⊥)KO, Already Rejected
181Rejected(id, ikc, ⊥)Reject(id, iku, T)Rejected(id, ikc, ⊥)KO, Already Rejected
182Rejected(id, ikc, ⊥)Reject(id, iku, F)Rejected(id, ikc, ⊥)KO, Already Rejected
183Rejected(id, ikc, ⊥)Cancel(id, ⊥, T)Rejected(id, ikc, ⊥)KO, Already Rejected
184Rejected(id, ikc, ⊥)Cancel(id, ⊥, F)Rejected(id, ikc, ⊥)KO, Already Rejected
185Rejected(id, ikc, ⊥)Cancel(id, iku, T)Rejected(id, ikc, ⊥)KO, Already Rejected
186Rejected(id, ikc, ⊥)Cancel(id, iku, F)Rejected(id, ikc, ⊥)KO, Already Rejected
187Rejected(id, ikc, iku)Create(id, ⊥, T)Rejected(id, ikc, iku)KO, Already Rejected
188Rejected(id, ikc, iku)Create(id, ⊥, F)Rejected(id, ikc, iku)KO, Already Rejected
189Rejected(id, ikc, iku)Create(id, ikc, T)Rejected(id, ikc, iku)KO, Already Rejected
190Rejected(id, ikc, iku)Create(id, ikc, F)Rejected(id, ikc, iku)OK, Deduplicated
191Rejected(id, ikc, iku)Create(id, ikc*, T)Rejected(id, ikc, iku)KO, Already Rejected
192Rejected(id, ikc, iku)Create(id, ikc*, F)Rejected(id, ikc, iku)KO, Already Rejected
193Rejected(id, ikc, iku)Resolve(id, ⊥, T)Rejected(id, ikc, iku)KO, Already Rejected
194Rejected(id, ikc, iku)Resolve(id, ⊥, F)Rejected(id, ikc, iku)KO, Already Rejected
195Rejected(id, ikc, iku)Resolve(id, iku, T)Rejected(id, ikc, iku)KO, Already Rejected
196Rejected(id, ikc, iku)Resolve(id, iku, F)Rejected(id, ikc, iku)OK, Deduplicated
197Rejected(id, ikc, iku)Resolve(id, iku*, T)Rejected(id, ikc, iku)KO, Already Rejected
198Rejected(id, ikc, iku)Resolve(id, iku*, F)Rejected(id, ikc, iku)KO, Already Rejected
199Rejected(id, ikc, iku)Reject(id, ⊥, T)Rejected(id, ikc, iku)KO, Already Rejected
200Rejected(id, ikc, iku)Reject(id, ⊥, F)Rejected(id, ikc, iku)KO, Already Rejected
201Rejected(id, ikc, iku)Reject(id, iku, T)Rejected(id, ikc, iku)OK, Deduplicated
202Rejected(id, ikc, iku)Reject(id, iku, F)Rejected(id, ikc, iku)OK, Deduplicated
203Rejected(id, ikc, iku)Reject(id, iku*, T)Rejected(id, ikc, iku)KO, Already Rejected
204Rejected(id, ikc, iku)Reject(id, iku*, F)Rejected(id, ikc, iku)KO, Already Rejected
205Rejected(id, ikc, iku)Cancel(id, ⊥, T)Rejected(id, ikc, iku)KO, Already Rejected
206Rejected(id, ikc, iku)Cancel(id, ⊥, F)Rejected(id, ikc, iku)KO, Already Rejected
207Rejected(id, ikc, iku)Cancel(id, iku, T)Rejected(id, ikc, iku)KO, Already Rejected
208Rejected(id, ikc, iku)Cancel(id, iku, F)Rejected(id, ikc, iku)OK, Deduplicated
209Rejected(id, ikc, iku)Cancel(id, iku*, T)Rejected(id, ikc, iku)KO, Already Rejected
210Rejected(id, ikc, iku)Cancel(id, iku*, F)Rejected(id, ikc, iku)KO, Already Rejected
211Canceled(id, ⊥, ⊥)Create(id, ⊥, T)Canceled(id, ⊥, ⊥)KO, Already Canceled
212Canceled(id, ⊥, ⊥)Create(id, ⊥, F)Canceled(id, ⊥, ⊥)KO, Already Canceled
213Canceled(id, ⊥, ⊥)Create(id, ikc, T)Canceled(id, ⊥, ⊥)KO, Already Canceled
214Canceled(id, ⊥, ⊥)Create(id, ikc, F)Canceled(id, ⊥, ⊥)KO, Already Canceled
215Canceled(id, ⊥, ⊥)Resolve(id, ⊥, T)Canceled(id, ⊥, ⊥)KO, Already Canceled
216Canceled(id, ⊥, ⊥)Resolve(id, ⊥, F)Canceled(id, ⊥, ⊥)KO, Already Canceled
217Canceled(id, ⊥, ⊥)Resolve(id, iku, T)Canceled(id, ⊥, ⊥)KO, Already Canceled
218Canceled(id, ⊥, ⊥)Resolve(id, iku, F)Canceled(id, ⊥, ⊥)KO, Already Canceled
219Canceled(id, ⊥, ⊥)Reject(id, ⊥, T)Canceled(id, ⊥, ⊥)KO, Already Canceled
220Canceled(id, ⊥, ⊥)Reject(id, ⊥, F)Canceled(id, ⊥, ⊥)KO, Already Canceled
221Canceled(id, ⊥, ⊥)Reject(id, iku, T)Canceled(id, ⊥, ⊥)KO, Already Canceled
222Canceled(id, ⊥, ⊥)Reject(id, iku, F)Canceled(id, ⊥, ⊥)KO, Already Canceled
223Canceled(id, ⊥, ⊥)Cancel(id, ⊥, T)Canceled(id, ⊥, ⊥)KO, Already Canceled
224Canceled(id, ⊥, ⊥)Cancel(id, ⊥, F)Canceled(id, ⊥, ⊥)KO, Already Canceled
225Canceled(id, ⊥, ⊥)Cancel(id, iku, T)Canceled(id, ⊥, ⊥)KO, Already Canceled
226Canceled(id, ⊥, ⊥)Cancel(id, iku, F)Canceled(id, ⊥, ⊥)KO, Already Canceled
227Canceled(id, ⊥, iku)Create(id, ⊥, T)Canceled(id, ⊥, iku)KO, Already Canceled
228Canceled(id, ⊥, iku)Create(id, ⊥, F)Canceled(id, ⊥, iku)KO, Already Canceled
229Canceled(id, ⊥, iku)Create(id, ikc, T)Canceled(id, ⊥, iku)KO, Already Canceled
230Canceled(id, ⊥, iku)Create(id, ikc, F)Canceled(id, ⊥, iku)KO, Already Canceled
231Canceled(id, ⊥, iku)Resolve(id, ⊥, T)Canceled(id, ⊥, iku)KO, Already Canceled
232Canceled(id, ⊥, iku)Resolve(id, ⊥, F)Canceled(id, ⊥, iku)KO, Already Canceled
233Canceled(id, ⊥, iku)Resolve(id, iku, T)Canceled(id, ⊥, iku)KO, Already Canceled
234Canceled(id, ⊥, iku)Resolve(id, iku, F)Canceled(id, ⊥, iku)OK, Deduplicated
235Canceled(id, ⊥, iku)Resolve(id, iku*, T)Canceled(id, ⊥, iku)KO, Already Canceled
236Canceled(id, ⊥, iku)Resolve(id, iku*, F)Canceled(id, ⊥, iku)KO, Already Canceled
237Canceled(id, ⊥, iku)Reject(id, ⊥, T)Canceled(id, ⊥, iku)KO, Already Canceled
238Canceled(id, ⊥, iku)Reject(id, ⊥, F)Canceled(id, ⊥, iku)KO, Already Canceled
239Canceled(id, ⊥, iku)Reject(id, iku, T)Canceled(id, ⊥, iku)KO, Already Canceled
240Canceled(id, ⊥, iku)Reject(id, iku, F)Canceled(id, ⊥, iku)OK, Deduplicated
241Canceled(id, ⊥, iku)Reject(id, iku*, T)Canceled(id, ⊥, iku)KO, Already Canceled
242Canceled(id, ⊥, iku)Reject(id, iku*, F)Canceled(id, ⊥, iku)KO, Already Canceled
243Canceled(id, ⊥, iku)Cancel(id, ⊥, T)Canceled(id, ⊥, iku)KO, Already Canceled
244Canceled(id, ⊥, iku)Cancel(id, ⊥, F)Canceled(id, ⊥, iku)KO, Already Canceled
245Canceled(id, ⊥, iku)Cancel(id, iku, T)Canceled(id, ⊥, iku)OK, Deduplicated
246Canceled(id, ⊥, iku)Cancel(id, iku, F)Canceled(id, ⊥, iku)OK, Deduplicated
247Canceled(id, ⊥, iku)Cancel(id, iku*, T)Canceled(id, ⊥, iku)KO, Already Canceled
248Canceled(id, ⊥, iku)Cancel(id, iku*, F)Canceled(id, ⊥, iku)KO, Already Canceled
249Canceled(id, ikc, ⊥)Create(id, ⊥, T)Canceled(id, ikc, ⊥)KO, Already Canceled
250Canceled(id, ikc, ⊥)Create(id, ⊥, F)Canceled(id, ikc, ⊥)KO, Already Canceled
251Canceled(id, ikc, ⊥)Create(id, ikc, T)Canceled(id, ikc, ⊥)KO, Already Canceled
252Canceled(id, ikc, ⊥)Create(id, ikc, F)Canceled(id, ikc, ⊥)OK, Deduplicated
253Canceled(id, ikc, ⊥)Create(id, ikc*, T)Canceled(id, ikc, ⊥)KO, Already Canceled
254Canceled(id, ikc, ⊥)Create(id, ikc*, F)Canceled(id, ikc, ⊥)KO, Already Canceled
255Canceled(id, ikc, ⊥)Resolve(id, ⊥, T)Canceled(id, ikc, ⊥)KO, Already Canceled
256Canceled(id, ikc, ⊥)Resolve(id, ⊥, F)Canceled(id, ikc, ⊥)KO, Already Canceled
257Canceled(id, ikc, ⊥)Resolve(id, iku, T)Canceled(id, ikc, ⊥)KO, Already Canceled
258Canceled(id, ikc, ⊥)Resolve(id, iku, F)Canceled(id, ikc, ⊥)KO, Already Canceled
259Canceled(id, ikc, ⊥)Reject(id, ⊥, T)Canceled(id, ikc, ⊥)KO, Already Canceled
260Canceled(id, ikc, ⊥)Reject(id, ⊥, F)Canceled(id, ikc, ⊥)KO, Already Canceled
261Canceled(id, ikc, ⊥)Reject(id, iku, T)Canceled(id, ikc, ⊥)KO, Already Canceled
262Canceled(id, ikc, ⊥)Reject(id, iku, F)Canceled(id, ikc, ⊥)KO, Already Canceled
263Canceled(id, ikc, ⊥)Cancel(id, ⊥, T)Canceled(id, ikc, ⊥)KO, Already Canceled
264Canceled(id, ikc, ⊥)Cancel(id, ⊥, F)Canceled(id, ikc, ⊥)KO, Already Canceled
265Canceled(id, ikc, ⊥)Cancel(id, iku, T)Canceled(id, ikc, ⊥)KO, Already Canceled
266Canceled(id, ikc, ⊥)Cancel(id, iku, F)Canceled(id, ikc, ⊥)KO, Already Canceled
267Canceled(id, ikc, iku)Create(id, ⊥, T)Canceled(id, ikc, iku)KO, Already Canceled
268Canceled(id, ikc, iku)Create(id, ⊥, F)Canceled(id, ikc, iku)KO, Already Canceled
269Canceled(id, ikc, iku)Create(id, ikc, T)Canceled(id, ikc, iku)KO, Already Canceled
270Canceled(id, ikc, iku)Create(id, ikc, F)Canceled(id, ikc, iku)OK, Deduplicated
271Canceled(id, ikc, iku)Create(id, ikc*, T)Canceled(id, ikc, iku)KO, Already Canceled
272Canceled(id, ikc, iku)Create(id, ikc*, F)Canceled(id, ikc, iku)KO, Already Canceled
273Canceled(id, ikc, iku)Resolve(id, ⊥, T)Canceled(id, ikc, iku)KO, Already Canceled
274Canceled(id, ikc, iku)Resolve(id, ⊥, F)Canceled(id, ikc, iku)KO, Already Canceled
275Canceled(id, ikc, iku)Resolve(id, iku, T)Canceled(id, ikc, iku)KO, Already Canceled
276Canceled(id, ikc, iku)Resolve(id, iku, F)Canceled(id, ikc, iku)OK, Deduplicated
277Canceled(id, ikc, iku)Resolve(id, iku*, T)Canceled(id, ikc, iku)KO, Already Canceled
278Canceled(id, ikc, iku)Resolve(id, iku*, F)Canceled(id, ikc, iku)KO, Already Canceled
279Canceled(id, ikc, iku)Reject(id, ⊥, T)Canceled(id, ikc, iku)KO, Already Canceled
280Canceled(id, ikc, iku)Reject(id, ⊥, F)Canceled(id, ikc, iku)KO, Already Canceled
281Canceled(id, ikc, iku)Reject(id, iku, T)Canceled(id, ikc, iku)KO, Already Canceled
282Canceled(id, ikc, iku)Reject(id, iku, F)Canceled(id, ikc, iku)OK, Deduplicated
283Canceled(id, ikc, iku)Reject(id, iku*, T)Canceled(id, ikc, iku)KO, Already Canceled
284Canceled(id, ikc, iku)Reject(id, iku*, F)Canceled(id, ikc, iku)KO, Already Canceled
285Canceled(id, ikc, iku)Cancel(id, ⊥, T)Canceled(id, ikc, iku)KO, Already Canceled
286Canceled(id, ikc, iku)Cancel(id, ⊥, F)Canceled(id, ikc, iku)KO, Already Canceled
287Canceled(id, ikc, iku)Cancel(id, iku, T)Canceled(id, ikc, iku)OK, Deduplicated
288Canceled(id, ikc, iku)Cancel(id, iku, F)Canceled(id, ikc, iku)OK, Deduplicated
289Canceled(id, ikc, iku)Cancel(id, iku*, T)Canceled(id, ikc, iku)KO, Already Canceled
290Canceled(id, ikc, iku)Cancel(id, iku*, F)Canceled(id, ikc, iku)KO, Already Canceled
291Timedout(id, ⊥, ⊥)Create(id, ⊥, T)Timedout(id, ⊥, ⊥)KO, Already Timedout
292Timedout(id, ⊥, ⊥)Create(id, ⊥, F)Timedout(id, ⊥, ⊥)KO, Already Timedout
293Timedout(id, ⊥, ⊥)Create(id, ikc, T)Timedout(id, ⊥, ⊥)KO, Already Timedout
294Timedout(id, ⊥, ⊥)Create(id, ikc, F)Timedout(id, ⊥, ⊥)KO, Already Timedout
295Timedout(id, ⊥, ⊥)Resolve(id, ⊥, T)Timedout(id, ⊥, ⊥)KO, Already Timedout
296Timedout(id, ⊥, ⊥)Resolve(id, ⊥, F)Timedout(id, ⊥, ⊥)OK, Deduplicated
297Timedout(id, ⊥, ⊥)Resolve(id, iku, T)Timedout(id, ⊥, ⊥)KO, Already Timedout
298Timedout(id, ⊥, ⊥)Resolve(id, iku, F)Timedout(id, ⊥, ⊥)OK, Deduplicated
299Timedout(id, ⊥, ⊥)Reject(id, ⊥, T)Timedout(id, ⊥, ⊥)KO, Already Timedout
300Timedout(id, ⊥, ⊥)Reject(id, ⊥, F)Timedout(id, ⊥, ⊥)OK, Deduplicated
301Timedout(id, ⊥, ⊥)Reject(id, iku, T)Timedout(id, ⊥, ⊥)KO, Already Timedout
302Timedout(id, ⊥, ⊥)Reject(id, iku, F)Timedout(id, ⊥, ⊥)OK, Deduplicated
303Timedout(id, ⊥, ⊥)Cancel(id, ⊥, T)Timedout(id, ⊥, ⊥)KO, Already Timedout
304Timedout(id, ⊥, ⊥)Cancel(id, ⊥, F)Timedout(id, ⊥, ⊥)OK, Deduplicated
305Timedout(id, ⊥, ⊥)Cancel(id, iku, T)Timedout(id, ⊥, ⊥)KO, Already Timedout
306Timedout(id, ⊥, ⊥)Cancel(id, iku, F)Timedout(id, ⊥, ⊥)OK, Deduplicated
307Timedout(id, ikc, ⊥)Create(id, ⊥, T)Timedout(id, ikc, ⊥)KO, Already Timedout
308Timedout(id, ikc, ⊥)Create(id, ⊥, F)Timedout(id, ikc, ⊥)KO, Already Timedout
309Timedout(id, ikc, ⊥)Create(id, ikc, T)Timedout(id, ikc, ⊥)KO, Already Timedout
310Timedout(id, ikc, ⊥)Create(id, ikc, F)Timedout(id, ikc, ⊥)OK, Deduplicated
311Timedout(id, ikc, ⊥)Create(id, ikc*, T)Timedout(id, ikc, ⊥)KO, Already Timedout
312Timedout(id, ikc, ⊥)Create(id, ikc*, F)Timedout(id, ikc, ⊥)KO, Already Timedout
313Timedout(id, ikc, ⊥)Resolve(id, ⊥, T)Timedout(id, ikc, ⊥)KO, Already Timedout
314Timedout(id, ikc, ⊥)Resolve(id, ⊥, F)Timedout(id, ikc, ⊥)OK, Deduplicated
315Timedout(id, ikc, ⊥)Resolve(id, iku, T)Timedout(id, ikc, ⊥)KO, Already Timedout
316Timedout(id, ikc, ⊥)Resolve(id, iku, F)Timedout(id, ikc, ⊥)OK, Deduplicated
317Timedout(id, ikc, ⊥)Reject(id, ⊥, T)Timedout(id, ikc, ⊥)KO, Already Timedout
318Timedout(id, ikc, ⊥)Reject(id, ⊥, F)Timedout(id, ikc, ⊥)OK, Deduplicated
319Timedout(id, ikc, ⊥)Reject(id, iku, T)Timedout(id, ikc, ⊥)KO, Already Timedout
320Timedout(id, ikc, ⊥)Reject(id, iku, F)Timedout(id, ikc, ⊥)OK, Deduplicated
321Timedout(id, ikc, ⊥)Cancel(id, ⊥, T)Timedout(id, ikc, ⊥)KO, Already Timedout
322Timedout(id, ikc, ⊥)Cancel(id, ⊥, F)Timedout(id, ikc, ⊥)OK, Deduplicated
323Timedout(id, ikc, ⊥)Cancel(id, iku, T)Timedout(id, ikc, ⊥)KO, Already Timedout
324Timedout(id, ikc, ⊥)Cancel(id, iku, F)Timedout(id, ikc, ⊥)OK, Deduplicated