Durable Promise Specification
Promises are fundamental units of coordination. Distributed Async Await proposes Durable Promises — that is, promises that persist in storage and enable coordination across process boundaries.
Within the Distributed Async Await specification, each execution, whether that is a function execution or an action taking place in the physical world, pairs to a promise.
Distributed Async Await requires that promise data objects are stored to disk, thus making the promises durable, and giving them the name Durable 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.
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.
API
Durable Promise Application Programming Interface
Logically, the Application Programming Interface (API) is divided in two parts, the Downstream API and the Upstream API.
Downstream API
-
Create
A downstream component may create a promise.
Create(promise-id, idempotency-key, param, header, timeout, strict)
-
Cancel
A downstream component can cancel an existing promise.
Cancel(promise-id, idempotency-key, value, header, strict)
-
Callback
A downstream component can register a callback on an existing promise.
Callback(id, promise-id, root-promise-id, timeout, recv)
A recv specifies the transport on which the callback will occur. Below is a non-exhaustive list of supported receivers.
Type Data Shorthand poll
{"group": "string", "id": "string"}
poll://group:id
http
{"headers": {"string": "string"}, "url": "string"}
http://example.com
Upstream API
-
Resolve
An upstream component can resolve an existing promise, signaling success.
Resolve(promise-id, idempotency-key, value, header, strict)
-
Reject
An upstream component can reject a promise, signalling failure.
Reject(promise-id, idempotency-key, value, header, strict)
OpenAPI spec example
openapi: 3.0.0
info:
title: Durable Promise API
version: x.x.x
license:
name: Apache 2.0
url: https://opensource.org/license/apache-2-0
servers:
- url: https://your_public_api_url
description: <your_public_server_description>
- url: http://localhost:<port>
description: <your_local_server_description>
paths:
/promises:
get:
tags: [Promises]
summary: Search promises
operationId: searchPromises
parameters:
- in: header
name: request-id
schema: { type: string }
- name: id
in: query
schema: { type: string }
- name: state
in: query
schema: { type: string, enum: [pending, resolved, rejected] }
- name: tags
in: query
style: deepObject
explode: true
schema:
type: object
additionalProperties: { type: string }
- name: limit
in: query
schema: { type: integer }
- name: cursor
in: query
schema: { type: string }
responses:
200:
description: OK
content:
application/json:
schema:
type: object
properties:
promises:
type: array
items:
$ref: "#/components/schemas/Promise"
cursor:
type: string
post:
tags: [Promises]
summary: Create promise
operationId: createPromise
parameters:
- in: header
name: request-id
schema: { type: string }
- in: header
name: idempotency-key
schema: { type: string }
- in: header
name: strict
schema: { type: boolean }
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [id, timeout]
properties:
id: { type: string }
timeout: { type: integer, format: int64 }
param: { $ref: "#/components/schemas/Value" }
tags:
type: object
additionalProperties: { type: string }
responses:
200:
description: OK
content:
application/json:
schema: { $ref: "#/components/schemas/Promise" }
201:
description: Created
content:
application/json:
schema: { $ref: "#/components/schemas/Promise" }
400: { description: Invalid request }
403: { description: Forbidden }
409: { description: Promise already exists }
/promises/{id}:
get:
tags: [Promises]
summary: Read promise
operationId: readPromise
parameters:
- in: path
name: id
required: true
schema: { type: string }
- in: header
name: request-id
schema: { type: string }
responses:
200:
description: OK
content:
application/json:
schema: { $ref: "#/components/schemas/Promise" }
400: { description: Invalid request }
404: { description: Promise not found }
patch:
tags: [Promises]
summary: Complete promise
operationId: completePromise
parameters:
- in: path
name: id
required: true
schema: { type: string }
- in: header
name: request-id
schema: { type: string }
- in: header
name: idempotency-key
schema: { type: string }
- in: header
name: strict
schema: { type: boolean }
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [state]
properties:
state:
type: string
enum: [RESOLVED, REJECTED, REJECTED_CANCELED]
value: { $ref: "#/components/schemas/Value" }
responses:
200:
description: OK
content:
application/json:
schema: { $ref: "#/components/schemas/Promise" }
400: { description: Invalid request }
403: { description: Forbidden }
404: { description: Promise not found }
components:
schemas:
Promise:
type: object
required: [id, state, timeout, param, value, tags]
properties:
id: { type: string }
state:
type: string
enum:
[PENDING, RESOLVED, REJECTED, REJECTED_CANCELED, REJECTED_TIMEDOUT]
timeout: { type: integer, format: int64 }
param: { $ref: "#/components/schemas/Value" }
value: { $ref: "#/components/schemas/Value" }
tags:
type: object
additionalProperties: { type: string }
idempotencyKeyForCreate: { type: string, readOnly: true }
idempotencyKeyForComplete: { type: string, readOnly: true }
createdOn: { type: integer, format: int64 }
completedOn: { type: integer, format: int64 }
Value:
type: object
properties:
headers:
type: object
additionalProperties: { type: string }
data: { type: string }
Task:
type: object
required: [id, counter, timeout]
properties:
id: { type: string }
counter: { type: integer }
timeout: { type: integer, format: int64 }
processId: { type: string }
createdOn: { type: integer, format: int64 }
completedOn: { type: integer, format: int64 }
State transitions
Current State | Action | Next State | Output | |
---|---|---|---|---|
1 | Init | Create(id, -, T) | Pending(id, -, -) | OK |
2 | Init | Create(id, -, F) | Pending(id, -, -) | OK |
3 | Init | Create(id, ikc, T) | Pending(id, ikc, -) | OK |
4 | Init | Create(id, ikc, F) | Pending(id, ikc, -) | OK |
5 | Init | Resolve(id, -, T) | Init | KO, Already Init |
6 | Init | Resolve(id, -, F) | Init | KO, Already Init |
7 | Init | Resolve(id, iku, T) | Init | KO, Already Init |
8 | Init | Resolve(id, iku, F) | Init | KO, Already Init |
9 | Init | Reject(id, -, T) | Init | KO, Already Init |
10 | Init | Reject(id, -, F) | Init | KO, Already Init |
11 | Init | Reject(id, iku, T) | Init | KO, Already Init |
12 | Init | Reject(id, iku, F) | Init | KO, Already Init |
13 | Init | Cancel(id, -, T) | Init | KO, Already Init |
14 | Init | Cancel(id, -, F) | Init | KO, Already Init |
15 | Init | Cancel(id, iku, T) | Init | KO, Already Init |
16 | Init | Cancel(id, iku, F) | Init | KO, Already Init |
17 | Pending(id, -, -) | Create(id, -, T) | Pending(id, -, -) | KO, Already Pending |
18 | Pending(id, -, -) | Create(id, -, F) | Pending(id, -, -) | KO, Already Pending |
19 | Pending(id, -, -) | Create(id, ikc, T) | Pending(id, -, -) | KO, Already Pending |
20 | Pending(id, -, -) | Create(id, ikc, F) | Pending(id, -, -) | KO, Already Pending |
21 | Pending(id, -, -) | Resolve(id, -, T) | Resolved(id, -, -) | OK |
22 | Pending(id, -, -) | Resolve(id, -, F) | Resolved(id, -, -) | OK |
23 | Pending(id, -, -) | Resolve(id, iku, T) | Resolved(id, -, iku) | OK |
24 | Pending(id, -, -) | Resolve(id, iku, F) | Resolved(id, -, iku) | OK |
25 | Pending(id, -, -) | Reject(id, -, T) | Rejected(id, -, -) | OK |
26 | Pending(id, -, -) | Reject(id, -, F) | Rejected(id, -, -) | OK |
27 | Pending(id, -, -) | Reject(id, iku, T) | Rejected(id, -, iku) | OK |
28 | Pending(id, -, -) | Reject(id, iku, F) | Rejected(id, -, iku) | OK |
29 | Pending(id, -, -) | Cancel(id, -, T) | Canceled(id, -, -) | OK |
30 | Pending(id, -, -) | Cancel(id, -, F) | Canceled(id, -, -) | OK |
31 | Pending(id, -, -) | Cancel(id, iku, T) | Canceled(id, -, iku) | OK |
32 | Pending(id, -, -) | Cancel(id, iku, F) | Canceled(id, -, iku) | OK |
33 | Pending(id, ikc, -) | Create(id, -, T) | Pending(id, ikc, -) | KO, Already Pending |
34 | Pending(id, ikc, -) | Create(id, -, F) | Pending(id, ikc, -) | KO, Already Pending |
35 | Pending(id, ikc, -) | Create(id, ikc, T) | Pending(id, ikc, -) | OK, Deduplicated |
36 | Pending(id, ikc, -) | Create(id, ikc, F) | Pending(id, ikc, -) | OK, Deduplicated |
37 | Pending(id, ikc, -) | Create(id, ikc*, T) | Pending(id, ikc, -) | KO, Already Pending |
38 | Pending(id, ikc, -) | Create(id, ikc*, F) | Pending(id, ikc, -) | KO, Already Pending |
39 | Pending(id, ikc, -) | Resolve(id, -, T) | Resolved(id, ikc, -) | OK |
40 | Pending(id, ikc, -) | Resolve(id, -, F) | Resolved(id, ikc, -) | OK |
41 | Pending(id, ikc, -) | Resolve(id, iku, T) | Resolved(id, ikc, iku) | OK |
42 | Pending(id, ikc, -) | Resolve(id, iku, F) | Resolved(id, ikc, iku) | OK |
43 | Pending(id, ikc, -) | Reject(id, -, T) | Rejected(id, ikc, -) | OK |
44 | Pending(id, ikc, -) | Reject(id, -, F) | Rejected(id, ikc, -) | OK |
45 | Pending(id, ikc, -) | Reject(id, iku, T) | Rejected(id, ikc, iku) | OK |
46 | Pending(id, ikc, -) | Reject(id, iku, F) | Rejected(id, ikc, iku) | OK |
47 | Pending(id, ikc, -) | Cancel(id, -, T) | Canceled(id, ikc, -) | OK |
48 | Pending(id, ikc, -) | Cancel(id, -, F) | Canceled(id, ikc, -) | OK |
49 | Pending(id, ikc, -) | Cancel(id, iku, T) | Canceled(id, ikc, iku) | OK |
50 | Pending(id, ikc, -) | Cancel(id, iku, F) | Canceled(id, ikc, iku) | OK |
51 | Resolved(id, -, -) | Create(id, -, T) | Resolved(id, -, -) | KO, Already Resolved |
52 | Resolved(id, -, -) | Create(id, -, F) | Resolved(id, -, -) | KO, Already Resolved |
53 | Resolved(id, -, -) | Create(id, ikc, T) | Resolved(id, -, -) | KO, Already Resolved |
54 | Resolved(id, -, -) | Create(id, ikc, F) | Resolved(id, -, -) | KO, Already Resolved |
55 | Resolved(id, -, -) | Resolve(id, -, T) | Resolved(id, -, -) | KO, Already Resolved |
56 | Resolved(id, -, -) | Resolve(id, -, F) | Resolved(id, -, -) | KO, Already Resolved |
57 | Resolved(id, -, -) | Resolve(id, iku, T) | Resolved(id, -, -) | KO, Already Resolved |
58 | Resolved(id, -, -) | Resolve(id, iku, F) | Resolved(id, -, -) | KO, Already Resolved |
59 | Resolved(id, -, -) | Reject(id, -, T) | Resolved(id, -, -) | KO, Already Resolved |
60 | Resolved(id, -, -) | Reject(id, -, F) | Resolved(id, -, -) | KO, Already Resolved |
61 | Resolved(id, -, -) | Reject(id, iku, T) | Resolved(id, -, -) | KO, Already Resolved |
62 | Resolved(id, -, -) | Reject(id, iku, F) | Resolved(id, -, -) | KO, Already Resolved |
63 | Resolved(id, -, -) | Cancel(id, -, T) | Resolved(id, -, -) | KO, Already Resolved |
64 | Resolved(id, -, -) | Cancel(id, -, F) | Resolved(id, -, -) | KO, Already Resolved |
65 | Resolved(id, -, -) | Cancel(id, iku, T) | Resolved(id, -, -) | KO, Already Resolved |
66 | Resolved(id, -, -) | Cancel(id, iku, F) | Resolved(id, -, -) | KO, Already Resolved |
67 | Resolved(id, -, iku) | Create(id, -, T) | Resolved(id, -, iku) | KO, Already Resolved |
68 | Resolved(id, -, iku) | Create(id, -, F) | Resolved(id, -, iku) | KO, Already Resolved |
69 | Resolved(id, -, iku) | Create(id, ikc, T) | Resolved(id, -, iku) | KO, Already Resolved |
70 | Resolved(id, -, iku) | Create(id, ikc, F) | Resolved(id, -, iku) | KO, Already Resolved |
71 | Resolved(id, -, iku) | Resolve(id, -, T) | Resolved(id, -, iku) | KO, Already Resolved |
72 | Resolved(id, -, iku) | Resolve(id, -, F) | Resolved(id, -, iku) | KO, Already Resolved |
73 | Resolved(id, -, iku) | Resolve(id, iku, T) | Resolved(id, -, iku) | OK, Deduplicated |
74 | Resolved(id, -, iku) | Resolve(id, iku, F) | Resolved(id, -, iku) | OK, Deduplicated |
75 | Resolved(id, -, iku) | Resolve(id, iku*, T) | Resolved(id, -, iku) | KO, Already Resolved |
76 | Resolved(id, -, iku) | Resolve(id, iku*, F) | Resolved(id, -, iku) | KO, Already Resolved |
77 | Resolved(id, -, iku) | Reject(id, -, T) | Resolved(id, -, iku) | KO, Already Resolved |
78 | Resolved(id, -, iku) | Reject(id, -, F) | Resolved(id, -, iku) | KO, Already Resolved |
79 | Resolved(id, -, iku) | Reject(id, iku, T) | Resolved(id, -, iku) | KO, Already Resolved |
80 | Resolved(id, -, iku) | Reject(id, iku, F) | Resolved(id, -, iku) | OK, Deduplicated |
81 | Resolved(id, -, iku) | Reject(id, iku*, T) | Resolved(id, -, iku) | KO, Already Resolved |
82 | Resolved(id, -, iku) | Reject(id, iku*, F) | Resolved(id, -, iku) | KO, Already Resolved |
83 | Resolved(id, -, iku) | Cancel(id, -, T) | Resolved(id, -, iku) | KO, Already Resolved |
84 | Resolved(id, -, iku) | Cancel(id, -, F) | Resolved(id, -, iku) | KO, Already Resolved |
85 | Resolved(id, -, iku) | Cancel(id, iku, T) | Resolved(id, -, iku) | KO, Already Resolved |
86 | Resolved(id, -, iku) | Cancel(id, iku, F) | Resolved(id, -, iku) | OK, Deduplicated |
87 | Resolved(id, -, iku) | Cancel(id, iku*, T) | Resolved(id, -, iku) | KO, Already Resolved |
88 | Resolved(id, -, iku) | Cancel(id, iku*, F) | Resolved(id, -, iku) | KO, Already Resolved |
89 | Resolved(id, ikc, -) | Create(id, -, T) | Resolved(id, ikc, -) | KO, Already Resolved |
90 | Resolved(id, ikc, -) | Create(id, -, F) | Resolved(id, ikc, -) | KO, Already Resolved |
91 | Resolved(id, ikc, -) | Create(id, ikc, T) | Resolved(id, ikc, -) | KO, Already Resolved |
92 | Resolved(id, ikc, -) | Create(id, ikc, F) | Resolved(id, ikc, -) | OK, Deduplicated |
93 | Resolved(id, ikc, -) | Create(id, ikc*, T) | Resolved(id, ikc, -) | KO, Already Resolved |
94 | Resolved(id, ikc, -) | Create(id, ikc*, F) | Resolved(id, ikc, -) | KO, Already Resolved |
95 | Resolved(id, ikc, -) | Resolve(id, -, T) | Resolved(id, ikc, -) | KO, Already Resolved |
96 | Resolved(id, ikc, -) | Resolve(id, -, F) | Resolved(id, ikc, -) | KO, Already Resolved |
97 | Resolved(id, ikc, -) | Resolve(id, iku, T) | Resolved(id, ikc, -) | KO, Already Resolved |
98 | Resolved(id, ikc, -) | Resolve(id, iku, F) | Resolved(id, ikc, -) | KO, Already Resolved |
99 | Resolved(id, ikc, -) | Reject(id, -, T) | Resolved(id, ikc, -) | KO, Already Resolved |
100 | Resolved(id, ikc, -) | Reject(id, -, F) | Resolved(id, ikc, -) | KO, Already Resolved |
101 | Resolved(id, ikc, -) | Reject(id, iku, T) | Resolved(id, ikc, -) | KO, Already Resolved |
102 | Resolved(id, ikc, -) | Reject(id, iku, F) | Resolved(id, ikc, -) | KO, Already Resolved |
103 | Resolved(id, ikc, -) | Cancel(id, -, T) | Resolved(id, ikc, -) | KO, Already Resolved |
104 | Resolved(id, ikc, -) | Cancel(id, -, F) | Resolved(id, ikc, -) | KO, Already Resolved |
105 | Resolved(id, ikc, -) | Cancel(id, iku, T) | Resolved(id, ikc, -) | KO, Already Resolved |
106 | Resolved(id, ikc, -) | Cancel(id, iku, F) | Resolved(id, ikc, -) | KO, Already Resolved |
107 | Resolved(id, ikc, iku) | Create(id, -, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
108 | Resolved(id, ikc, iku) | Create(id, -, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
109 | Resolved(id, ikc, iku) | Create(id, ikc, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
110 | Resolved(id, ikc, iku) | Create(id, ikc, F) | Resolved(id, ikc, iku) | OK, Deduplicated |
111 | Resolved(id, ikc, iku) | Create(id, ikc*, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
112 | Resolved(id, ikc, iku) | Create(id, ikc*, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
113 | Resolved(id, ikc, iku) | Resolve(id, -, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
114 | Resolved(id, ikc, iku) | Resolve(id, -, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
115 | Resolved(id, ikc, iku) | Resolve(id, iku, T) | Resolved(id, ikc, iku) | OK, Deduplicated |
116 | Resolved(id, ikc, iku) | Resolve(id, iku, F) | Resolved(id, ikc, iku) | OK, Deduplicated |
117 | Resolved(id, ikc, iku) | Resolve(id, iku*, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
118 | Resolved(id, ikc, iku) | Resolve(id, iku*, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
119 | Resolved(id, ikc, iku) | Reject(id, -, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
120 | Resolved(id, ikc, iku) | Reject(id, -, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
121 | Resolved(id, ikc, iku) | Reject(id, iku, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
122 | Resolved(id, ikc, iku) | Reject(id, iku, F) | Resolved(id, ikc, iku) | OK, Deduplicated |
123 | Resolved(id, ikc, iku) | Reject(id, iku*, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
124 | Resolved(id, ikc, iku) | Reject(id, iku*, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
125 | Resolved(id, ikc, iku) | Cancel(id, -, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
126 | Resolved(id, ikc, iku) | Cancel(id, -, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
127 | Resolved(id, ikc, iku) | Cancel(id, iku, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
128 | Resolved(id, ikc, iku) | Cancel(id, iku, F) | Resolved(id, ikc, iku) | OK, Deduplicated |
129 | Resolved(id, ikc, iku) | Cancel(id, iku*, T) | Resolved(id, ikc, iku) | KO, Already Resolved |
130 | Resolved(id, ikc, iku) | Cancel(id, iku*, F) | Resolved(id, ikc, iku) | KO, Already Resolved |
131 | Rejected(id, -, -) | Create(id, -, T) | Rejected(id, -, -) | KO, Already Rejected |
132 | Rejected(id, -, -) | Create(id, -, F) | Rejected(id, -, -) | KO, Already Rejected |
133 | Rejected(id, -, -) | Create(id, ikc, T) | Rejected(id, -, -) | KO, Already Rejected |
134 | Rejected(id, -, -) | Create(id, ikc, F) | Rejected(id, -, -) | KO, Already Rejected |
135 | Rejected(id, -, -) | Resolve(id, -, T) | Rejected(id, -, -) | KO, Already Rejected |
136 | Rejected(id, -, -) | Resolve(id, -, F) | Rejected(id, -, -) | KO, Already Rejected |
137 | Rejected(id, -, -) | Resolve(id, iku, T) | Rejected(id, -, -) | KO, Already Rejected |
138 | Rejected(id, -, -) | Resolve(id, iku, F) | Rejected(id, -, -) | KO, Already Rejected |
139 | Rejected(id, -, -) | Reject(id, -, T) | Rejected(id, -, -) | KO, Already Rejected |
140 | Rejected(id, -, -) | Reject(id, -, F) | Rejected(id, -, -) | KO, Already Rejected |
141 | Rejected(id, -, -) | Reject(id, iku, T) | Rejected(id, -, -) | KO, Already Rejected |
142 | Rejected(id, -, -) | Reject(id, iku, F) | Rejected(id, -, -) | KO, Already Rejected |
143 | Rejected(id, -, -) | Cancel(id, -, T) | Rejected(id, -, -) | KO, Already Rejected |
144 | Rejected(id, -, -) | Cancel(id, -, F) | Rejected(id, -, -) | KO, Already Rejected |
145 | Rejected(id, -, -) | Cancel(id, iku, T) | Rejected(id, -, -) | KO, Already Rejected |
146 | Rejected(id, -, -) | Cancel(id, iku, F) | Rejected(id, -, -) | KO, Already Rejected |
147 | Rejected(id, -, iku) | Create(id, -, T) | Rejected(id, -, iku) | KO, Already Rejected |
148 | Rejected(id, -, iku) | Create(id, -, F) | Rejected(id, -, iku) | KO, Already Rejected |
149 | Rejected(id, -, iku) | Create(id, ikc, T) | Rejected(id, -, iku) | KO, Already Rejected |
150 | Rejected(id, -, iku) | Create(id, ikc, F) | Rejected(id, -, iku) | KO, Already Rejected |
151 | Rejected(id, -, iku) | Resolve(id, -, T) | Rejected(id, -, iku) | KO, Already Rejected |
152 | Rejected(id, -, iku) | Resolve(id, -, F) | Rejected(id, -, iku) | KO, Already Rejected |
153 | Rejected(id, -, iku) | Resolve(id, iku, T) | Rejected(id, -, iku) | KO, Already Rejected |
154 | Rejected(id, -, iku) | Resolve(id, iku, F) | Rejected(id, -, iku) | OK, Deduplicated |
155 | Rejected(id, -, iku) | Resolve(id, iku*, T) | Rejected(id, -, iku) | KO, Already Rejected |
156 | Rejected(id, -, iku) | Resolve(id, iku*, F) | Rejected(id, -, iku) | KO, Already Rejected |
157 | Rejected(id, -, iku) | Reject(id, -, T) | Rejected(id, -, iku) | KO, Already Rejected |
158 | Rejected(id, -, iku) | Reject(id, -, F) | Rejected(id, -, iku) | KO, Already Rejected |
159 | Rejected(id, -, iku) | Reject(id, iku, T) | Rejected(id, -, iku) | OK, Deduplicated |
160 | Rejected(id, -, iku) | Reject(id, iku, F) | Rejected(id, -, iku) | OK, Deduplicated |
161 | Rejected(id, -, iku) | Reject(id, iku*, T) | Rejected(id, -, iku) | KO, Already Rejected |
162 | Rejected(id, -, iku) | Reject(id, iku*, F) | Rejected(id, -, iku) | KO, Already Rejected |
163 | Rejected(id, -, iku) | Cancel(id, -, T) | Rejected(id, -, iku) | KO, Already Rejected |
164 | Rejected(id, -, iku) | Cancel(id, -, F) | Rejected(id, -, iku) | KO, Already Rejected |
165 | Rejected(id, -, iku) | Cancel(id, iku, T) | Rejected(id, -, iku) | KO, Already Rejected |
166 | Rejected(id, -, iku) | Cancel(id, iku, F) | Rejected(id, -, iku) | OK, Deduplicated |
167 | Rejected(id, -, iku) | Cancel(id, iku*, T) | Rejected(id, -, iku) | KO, Already Rejected |
168 | Rejected(id, -, iku) | Cancel(id, iku*, F) | Rejected(id, -, iku) | KO, Already Rejected |
169 | Rejected(id, ikc, -) | Create(id, -, T) | Rejected(id, ikc, -) | KO, Already Rejected |
170 | Rejected(id, ikc, -) | Create(id, -, F) | Rejected(id, ikc, -) | KO, Already Rejected |
171 | Rejected(id, ikc, -) | Create(id, ikc, T) | Rejected(id, ikc, -) | KO, Already Rejected |
172 | Rejected(id, ikc, -) | Create(id, ikc, F) | Rejected(id, ikc, -) | OK, Deduplicated |
173 | Rejected(id, ikc, -) | Create(id, ikc*, T) | Rejected(id, ikc, -) | KO, Already Rejected |
174 | Rejected(id, ikc, -) | Create(id, ikc*, F) | Rejected(id, ikc, -) | KO, Already Rejected |
175 | Rejected(id, ikc, -) | Resolve(id, -, T) | Rejected(id, ikc, -) | KO, Already Rejected |
176 | Rejected(id, ikc, -) | Resolve(id, -, F) | Rejected(id, ikc, -) | KO, Already Rejected |
177 | Rejected(id, ikc, -) | Resolve(id, iku, T) | Rejected(id, ikc, -) | KO, Already Rejected |
178 | Rejected(id, ikc, -) | Resolve(id, iku, F) | Rejected(id, ikc, -) | KO, Already Rejected |
179 | Rejected(id, ikc, -) | Reject(id, -, T) | Rejected(id, ikc, -) | KO, Already Rejected |
180 | Rejected(id, ikc, -) | Reject(id, -, F) | Rejected(id, ikc, -) | KO, Already Rejected |
181 | Rejected(id, ikc, -) | Reject(id, iku, T) | Rejected(id, ikc, -) | KO, Already Rejected |
182 | Rejected(id, ikc, -) | Reject(id, iku, F) | Rejected(id, ikc, -) | KO, Already Rejected |
183 | Rejected(id, ikc, -) | Cancel(id, -, T) | Rejected(id, ikc, -) | KO, Already Rejected |
184 | Rejected(id, ikc, -) | Cancel(id, -, F) | Rejected(id, ikc, -) | KO, Already Rejected |
185 | Rejected(id, ikc, -) | Cancel(id, iku, T) | Rejected(id, ikc, -) | KO, Already Rejected |
186 | Rejected(id, ikc, -) | Cancel(id, iku, F) | Rejected(id, ikc, -) | KO, Already Rejected |
187 | Rejected(id, ikc, iku) | Create(id, -, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
188 | Rejected(id, ikc, iku) | Create(id, -, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
189 | Rejected(id, ikc, iku) | Create(id, ikc, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
190 | Rejected(id, ikc, iku) | Create(id, ikc, F) | Rejected(id, ikc, iku) | OK, Deduplicated |
191 | Rejected(id, ikc, iku) | Create(id, ikc*, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
192 | Rejected(id, ikc, iku) | Create(id, ikc*, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
193 | Rejected(id, ikc, iku) | Resolve(id, -, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
194 | Rejected(id, ikc, iku) | Resolve(id, -, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
195 | Rejected(id, ikc, iku) | Resolve(id, iku, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
196 | Rejected(id, ikc, iku) | Resolve(id, iku, F) | Rejected(id, ikc, iku) | OK, Deduplicated |
197 | Rejected(id, ikc, iku) | Resolve(id, iku*, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
198 | Rejected(id, ikc, iku) | Resolve(id, iku*, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
199 | Rejected(id, ikc, iku) | Reject(id, -, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
200 | Rejected(id, ikc, iku) | Reject(id, -, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
201 | Rejected(id, ikc, iku) | Reject(id, iku, T) | Rejected(id, ikc, iku) | OK, Deduplicated |
202 | Rejected(id, ikc, iku) | Reject(id, iku, F) | Rejected(id, ikc, iku) | OK, Deduplicated |
203 | Rejected(id, ikc, iku) | Reject(id, iku*, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
204 | Rejected(id, ikc, iku) | Reject(id, iku*, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
205 | Rejected(id, ikc, iku) | Cancel(id, -, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
206 | Rejected(id, ikc, iku) | Cancel(id, -, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
207 | Rejected(id, ikc, iku) | Cancel(id, iku, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
208 | Rejected(id, ikc, iku) | Cancel(id, iku, F) | Rejected(id, ikc, iku) | OK, Deduplicated |
209 | Rejected(id, ikc, iku) | Cancel(id, iku*, T) | Rejected(id, ikc, iku) | KO, Already Rejected |
210 | Rejected(id, ikc, iku) | Cancel(id, iku*, F) | Rejected(id, ikc, iku) | KO, Already Rejected |
211 | Canceled(id, -, -) | Create(id, -, T) | Canceled(id, -, -) | KO, Already Canceled |
212 | Canceled(id, -, -) | Create(id, -, F) | Canceled(id, -, -) | KO, Already Canceled |
213 | Canceled(id, -, -) | Create(id, ikc, T) | Canceled(id, -, -) | KO, Already Canceled |
214 | Canceled(id, -, -) | Create(id, ikc, F) | Canceled(id, -, -) | KO, Already Canceled |
215 | Canceled(id, -, -) | Resolve(id, -, T) | Canceled(id, -, -) | KO, Already Canceled |
216 | Canceled(id, -, -) | Resolve(id, -, F) | Canceled(id, -, -) | KO, Already Canceled |
217 | Canceled(id, -, -) | Resolve(id, iku, T) | Canceled(id, -, -) | KO, Already Canceled |
218 | Canceled(id, -, -) | Resolve(id, iku, F) | Canceled(id, -, -) | KO, Already Canceled |
219 | Canceled(id, -, -) | Reject(id, -, T) | Canceled(id, -, -) | KO, Already Canceled |
220 | Canceled(id, -, -) | Reject(id, -, F) | Canceled(id, -, -) | KO, Already Canceled |
221 | Canceled(id, -, -) | Reject(id, iku, T) | Canceled(id, -, -) | KO, Already Canceled |
222 | Canceled(id, -, -) | Reject(id, iku, F) | Canceled(id, -, -) | KO, Already Canceled |
223 | Canceled(id, -, -) | Cancel(id, -, T) | Canceled(id, -, -) | KO, Already Canceled |
224 | Canceled(id, -, -) | Cancel(id, -, F) | Canceled(id, -, -) | KO, Already Canceled |
225 | Canceled(id, -, -) | Cancel(id, iku, T) | Canceled(id, -, -) | KO, Already Canceled |
226 | Canceled(id, -, -) | Cancel(id, iku, F) | Canceled(id, -, -) | KO, Already Canceled |
227 | Canceled(id, -, iku) | Create(id, -, T) | Canceled(id, -, iku) | KO, Already Canceled |
228 | Canceled(id, -, iku) | Create(id, -, F) | Canceled(id, -, iku) | KO, Already Canceled |
229 | Canceled(id, -, iku) | Create(id, ikc, T) | Canceled(id, -, iku) | KO, Already Canceled |
230 | Canceled(id, -, iku) | Create(id, ikc, F) | Canceled(id, -, iku) | KO, Already Canceled |
231 | Canceled(id, -, iku) | Resolve(id, -, T) | Canceled(id, -, iku) | KO, Already Canceled |
232 | Canceled(id, -, iku) | Resolve(id, -, F) | Canceled(id, -, iku) | KO, Already Canceled |
233 | Canceled(id, -, iku) | Resolve(id, iku, T) | Canceled(id, -, iku) | KO, Already Canceled |
234 | Canceled(id, -, iku) | Resolve(id, iku, F) | Canceled(id, -, iku) | OK, Deduplicated |
235 | Canceled(id, -, iku) | Resolve(id, iku*, T) | Canceled(id, -, iku) | KO, Already Canceled |
236 | Canceled(id, -, iku) | Resolve(id, iku*, F) | Canceled(id, -, iku) | KO, Already Canceled |
237 | Canceled(id, -, iku) | Reject(id, -, T) | Canceled(id, -, iku) | KO, Already Canceled |
238 | Canceled(id, -, iku) | Reject(id, -, F) | Canceled(id, -, iku) | KO, Already Canceled |
239 | Canceled(id, -, iku) | Reject(id, iku, T) | Canceled(id, -, iku) | KO, Already Canceled |
240 | Canceled(id, -, iku) | Reject(id, iku, F) | Canceled(id, -, iku) | OK, Deduplicated |
241 | Canceled(id, -, iku) | Reject(id, iku*, T) | Canceled(id, -, iku) | KO, Already Canceled |
242 | Canceled(id, -, iku) | Reject(id, iku*, F) | Canceled(id, -, iku) | KO, Already Canceled |
243 | Canceled(id, -, iku) | Cancel(id, -, T) | Canceled(id, -, iku) | KO, Already Canceled |
244 | Canceled(id, -, iku) | Cancel(id, -, F) | Canceled(id, -, iku) | KO, Already Canceled |
245 | Canceled(id, -, iku) | Cancel(id, iku, T) | Canceled(id, -, iku) | OK, Deduplicated |
246 | Canceled(id, -, iku) | Cancel(id, iku, F) | Canceled(id, -, iku) | OK, Deduplicated |
247 | Canceled(id, -, iku) | Cancel(id, iku*, T) | Canceled(id, -, iku) | KO, Already Canceled |
248 | Canceled(id, -, iku) | Cancel(id, iku*, F) | Canceled(id, -, iku) | KO, Already Canceled |
249 | Canceled(id, ikc, -) | Create(id, -, T) | Canceled(id, ikc, -) | KO, Already Canceled |
250 | Canceled(id, ikc, -) | Create(id, -, F) | Canceled(id, ikc, -) | KO, Already Canceled |
251 | Canceled(id, ikc, -) | Create(id, ikc, T) | Canceled(id, ikc, -) | KO, Already Canceled |
252 | Canceled(id, ikc, -) | Create(id, ikc, F) | Canceled(id, ikc, -) | OK, Deduplicated |
253 | Canceled(id, ikc, -) | Create(id, ikc*, T) | Canceled(id, ikc, -) | KO, Already Canceled |
254 | Canceled(id, ikc, -) | Create(id, ikc*, F) | Canceled(id, ikc, -) | KO, Already Canceled |
255 | Canceled(id, ikc, -) | Resolve(id, -, T) | Canceled(id, ikc, -) | KO, Already Canceled |
256 | Canceled(id, ikc, -) | Resolve(id, -, F) | Canceled(id, ikc, -) | KO, Already Canceled |
257 | Canceled(id, ikc, -) | Resolve(id, iku, T) | Canceled(id, ikc, -) | KO, Already Canceled |
258 | Canceled(id, ikc, -) | Resolve(id, iku, F) | Canceled(id, ikc, -) | KO, Already Canceled |
259 | Canceled(id, ikc, -) | Reject(id, -, T) | Canceled(id, ikc, -) | KO, Already Canceled |
260 | Canceled(id, ikc, -) | Reject(id, -, F) | Canceled(id, ikc, -) | KO, Already Canceled |
261 | Canceled(id, ikc, -) | Reject(id, iku, T) | Canceled(id, ikc, -) | KO, Already Canceled |
262 | Canceled(id, ikc, -) | Reject(id, iku, F) | Canceled(id, ikc, -) | KO, Already Canceled |
263 | Canceled(id, ikc, -) | Cancel(id, -, T) | Canceled(id, ikc, -) | KO, Already Canceled |
264 | Canceled(id, ikc, -) | Cancel(id, -, F) | Canceled(id, ikc, -) | KO, Already Canceled |
265 | Canceled(id, ikc, -) | Cancel(id, iku, T) | Canceled(id, ikc, -) | KO, Already Canceled |
266 | Canceled(id, ikc, -) | Cancel(id, iku, F) | Canceled(id, ikc, -) | KO, Already Canceled |
267 | Canceled(id, ikc, iku) | Create(id, -, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
268 | Canceled(id, ikc, iku) | Create(id, -, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
269 | Canceled(id, ikc, iku) | Create(id, ikc, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
270 | Canceled(id, ikc, iku) | Create(id, ikc, F) | Canceled(id, ikc, iku) | OK, Deduplicated |
271 | Canceled(id, ikc, iku) | Create(id, ikc*, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
272 | Canceled(id, ikc, iku) | Create(id, ikc*, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
273 | Canceled(id, ikc, iku) | Resolve(id, -, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
274 | Canceled(id, ikc, iku) | Resolve(id, -, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
275 | Canceled(id, ikc, iku) | Resolve(id, iku, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
276 | Canceled(id, ikc, iku) | Resolve(id, iku, F) | Canceled(id, ikc, iku) | OK, Deduplicated |
277 | Canceled(id, ikc, iku) | Resolve(id, iku*, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
278 | Canceled(id, ikc, iku) | Resolve(id, iku*, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
279 | Canceled(id, ikc, iku) | Reject(id, -, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
280 | Canceled(id, ikc, iku) | Reject(id, -, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
281 | Canceled(id, ikc, iku) | Reject(id, iku, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
282 | Canceled(id, ikc, iku) | Reject(id, iku, F) | Canceled(id, ikc, iku) | OK, Deduplicated |
283 | Canceled(id, ikc, iku) | Reject(id, iku*, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
284 | Canceled(id, ikc, iku) | Reject(id, iku*, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
285 | Canceled(id, ikc, iku) | Cancel(id, -, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
286 | Canceled(id, ikc, iku) | Cancel(id, -, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
287 | Canceled(id, ikc, iku) | Cancel(id, iku, T) | Canceled(id, ikc, iku) | OK, Deduplicated |
288 | Canceled(id, ikc, iku) | Cancel(id, iku, F) | Canceled(id, ikc, iku) | OK, Deduplicated |
289 | Canceled(id, ikc, iku) | Cancel(id, iku*, T) | Canceled(id, ikc, iku) | KO, Already Canceled |
290 | Canceled(id, ikc, iku) | Cancel(id, iku*, F) | Canceled(id, ikc, iku) | KO, Already Canceled |
291 | Timedout(id, -, -) | Create(id, -, T) | Timedout(id, -, -) | KO, Already Timedout |
292 | Timedout(id, -, -) | Create(id, -, F) | Timedout(id, -, -) | KO, Already Timedout |
293 | Timedout(id, -, -) | Create(id, ikc, T) | Timedout(id, -, -) | KO, Already Timedout |
294 | Timedout(id, -, -) | Create(id, ikc, F) | Timedout(id, -, -) | KO, Already Timedout |
295 | Timedout(id, -, -) | Resolve(id, -, T) | Timedout(id, -, -) | KO, Already Timedout |
296 | Timedout(id, -, -) | Resolve(id, -, F) | Timedout(id, -, -) | OK, Deduplicated |
297 | Timedout(id, -, -) | Resolve(id, iku, T) | Timedout(id, -, -) | KO, Already Timedout |
298 | Timedout(id, -, -) | Resolve(id, iku, F) | Timedout(id, -, -) | OK, Deduplicated |
299 | Timedout(id, -, -) | Reject(id, -, T) | Timedout(id, -, -) | KO, Already Timedout |
300 | Timedout(id, -, -) | Reject(id, -, F) | Timedout(id, -, -) | OK, Deduplicated |
301 | Timedout(id, -, -) | Reject(id, iku, T) | Timedout(id, -, -) | KO, Already Timedout |
302 | Timedout(id, -, -) | Reject(id, iku, F) | Timedout(id, -, -) | OK, Deduplicated |
303 | Timedout(id, -, -) | Cancel(id, -, T) | Timedout(id, -, -) | KO, Already Timedout |
304 | Timedout(id, -, -) | Cancel(id, -, F) | Timedout(id, -, -) | OK, Deduplicated |
305 | Timedout(id, -, -) | Cancel(id, iku, T) | Timedout(id, -, -) | KO, Already Timedout |
306 | Timedout(id, -, -) | Cancel(id, iku, F) | Timedout(id, -, -) | OK, Deduplicated |
307 | Timedout(id, ikc, -) | Create(id, -, T) | Timedout(id, ikc, -) | KO, Already Timedout |
308 | Timedout(id, ikc, -) | Create(id, -, F) | Timedout(id, ikc, -) | KO, Already Timedout |
309 | Timedout(id, ikc, -) | Create(id, ikc, T) | Timedout(id, ikc, -) | KO, Already Timedout |
310 | Timedout(id, ikc, -) | Create(id, ikc, F) | Timedout(id, ikc, -) | OK, Deduplicated |
311 | Timedout(id, ikc, -) | Create(id, ikc*, T) | Timedout(id, ikc, -) | KO, Already Timedout |
312 | Timedout(id, ikc, -) | Create(id, ikc*, F) | Timedout(id, ikc, -) | KO, Already Timedout |
313 | Timedout(id, ikc, -) | Resolve(id, -, T) | Timedout(id, ikc, -) | KO, Already Timedout |
314 | Timedout(id, ikc, -) | Resolve(id, -, F) | Timedout(id, ikc, -) | OK, Deduplicated |
315 | Timedout(id, ikc, -) | Resolve(id, iku, T) | Timedout(id, ikc, -) | KO, Already Timedout |
316 | Timedout(id, ikc, -) | Resolve(id, iku, F) | Timedout(id, ikc, -) | OK, Deduplicated |
317 | Timedout(id, ikc, -) | Reject(id, -, T) | Timedout(id, ikc, -) | KO, Already Timedout |
318 | Timedout(id, ikc, -) | Reject(id, -, F) | Timedout(id, ikc, -) | OK, Deduplicated |
319 | Timedout(id, ikc, -) | Reject(id, iku, T) | Timedout(id, ikc, -) | KO, Already Timedout |
320 | Timedout(id, ikc, -) | Reject(id, iku, F) | Timedout(id, ikc, -) | OK, Deduplicated |
321 | Timedout(id, ikc, -) | Cancel(id, -, T) | Timedout(id, ikc, -) | KO, Already Timedout |
322 | Timedout(id, ikc, -) | Cancel(id, -, F) | Timedout(id, ikc, -) | OK, Deduplicated |
323 | Timedout(id, ikc, -) | Cancel(id, iku, T) | Timedout(id, ikc, -) | KO, Already Timedout |
324 | Timedout(id, ikc, -) | Cancel(id, iku, F) | Timedout(id, ikc, -) | OK, Deduplicated |