Skip to main content

Durable Promise Specification

Units of Coordination

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.

Promise lifecycle diagram

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.

Promise API illustrationpromise-api-illustration

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.

    TypeDataShorthand
    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 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