-
Notifications
You must be signed in to change notification settings - Fork 141
/
CancellationScope.java
77 lines (66 loc) · 2.54 KB
/
CancellationScope.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
* Copyright (C) 2020 Temporal Technologies, Inc. All Rights Reserved.
*
* Copyright 2012-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Modifications copyright (C) 2017 Uber Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not
* use this file except in compliance with the License. A copy of the License is
* located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package io.temporal.workflow;
import io.temporal.failure.CanceledFailure;
import io.temporal.internal.sync.WorkflowInternal;
/**
* Handle to a cancellation scope created through {@link Workflow#newCancellationScope(Runnable)} or
* {@link Workflow#newDetachedCancellationScope(Runnable)}. Supports explicit cancelling of the code
* a cancellation scope wraps. The code in the CancellationScope has to be executed using {@link
* Runnable#run()} method.
*/
public interface CancellationScope extends Runnable {
/**
* When set to false parent thread cancellation causes this one to get canceled automatically.
* When set to true only call to {@link #cancel()} leads to this scope cancellation.
*/
boolean isDetached();
/** Cancels the scope as well as all its children */
void cancel();
/**
* Cancels the scope as well as all its children.
*
* @param reason human readable reason for the cancellation. Becomes message of the
* CanceledException thrown.
*/
void cancel(String reason);
String getCancellationReason();
/**
* Is scope was asked to cancel through {@link #cancel()} or by a parent scope.
*
* @return whether request is canceled or not.
*/
boolean isCancelRequested();
/**
* Use this promise to perform cancellation of async operations.
*
* @return promise that becomes ready when scope is canceled. It contains reason value or null if
* none was provided.
*/
Promise<String> getCancellationRequest();
static CancellationScope current() {
return WorkflowInternal.currentCancellationScope();
}
/** Throws {@link CanceledFailure} if scope is canceled. Noop if not canceled. */
static void throwCanceled() throws CanceledFailure {
if (current().isCancelRequested()) {
throw new CanceledFailure(current().getCancellationReason());
}
}
}