/
TaskPartitionsDefinition.java
166 lines (144 loc) · 4.5 KB
/
TaskPartitionsDefinition.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/*
* Copyright (c) 2010-2018 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License 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 com.evolveum.midpoint.task.api;
import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskExecutionEnvironmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskWorkManagementType;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Collections;
/**
* Configuration for PartitioningTaskHandler: describes how to create subtasks (partitions) for the given master task.
*
* Templates can contain the following macros:
* - {index}: number of the subtask, starting at 1
* - {masterTaskName}: name of the master task
* - {masterTaskHandlerUri}: URI of the master task handler
*
* @author mederly
*/
public interface TaskPartitionsDefinition {
/**
* Number of partitions.
*/
int getCount(Task masterTask);
/**
* Whether the subtasks should be executed sequentially.
*/
default boolean isSequentialExecution(Task masterTask) {
return true;
}
/**
* Whether the partitions should be durable i.e. whether they should persist through master task restarts.
* This is useful e.g. for partitioned validity scanner because each partition keeps its own last
* scan timestamp. (EXPERIMENTAL)
*/
default boolean isDurablePartitions(Task masterTask) {
return false;
}
/**
* Template for the subtask name. The default is {masterTaskName} ({index})
*/
default String getName(Task masterTask) {
return null;
}
/**
* Handler URI for the subtask. The default is {masterTaskHandlerUri}#{index}
*/
default String getHandlerUri(Task masterTask) {
return null;
}
/**
* Work management for the subtasks.
*/
default TaskWorkManagementType getWorkManagement(Task masterTask) {
return null;
}
/**
* Execution environment to be used in subtask.
*/
default TaskExecutionEnvironmentType getExecutionEnvironment(Task masterTask) {
return null;
}
/**
* Whether to copy extension from master task into subtask.
*/
default Boolean isCopyMasterExtension(Task masterTask) {
return null;
}
/**
* Deltas to be applied to subtask after its creation. Applied before strategy.otherDeltas.
*/
@NotNull
default Collection<ItemDelta<?, ?>> getOtherDeltas(Task masterTask) {
return Collections.emptySet();
}
/**
* Partition with a given number, starting at 1.
*/
@NotNull
TaskPartitionDefinition getPartition(Task masterTask, int index);
/**
* Description of a given partition.
*/
interface TaskPartitionDefinition {
/**
* Template for the subtask name. Overrides strategy.taskNameTemplate. The default is {masterTaskName} ({index})
*/
default String getName(Task masterTask) {
return null;
}
/**
* Template for the subtask handler URI. Overrides strategy.handlerUriTemplate. The default is {masterTaskHandlerUri}#{index}
*/
default String getHandlerUri(Task masterTask) {
return null;
}
/**
* Work state configuration to be planted into subtask, if copyWorkStateConfiguration is not true.
*/
default TaskWorkManagementType getWorkManagement(Task masterTask) {
return null;
}
/**
* Execution environment to be used in subtask. Overrides strategy.executionEnvironment.
*/
default TaskExecutionEnvironmentType getExecutionEnvironment(Task masterTask) {
return null;
}
/**
* Whether to copy extension from master task into subtask. Overrides strategy.copyMasterExtension.
*/
default Boolean isCopyMasterExtension(Task masterTask) {
return null;
}
/**
* Deltas to be applied to subtask after its creation. Applied before strategy.otherDeltas.
*/
@NotNull
default Collection<ItemDelta<?, ?>> getOtherDeltas(Task masterTask) {
return Collections.emptySet();
}
/**
* Dependents of this subtask, i.e. subtasks that should be started only after this subtask has finished.
* Provided as indices starting at 1.
*/
@NotNull
default Collection<Integer> getDependents() {
return Collections.emptySet();
}
}
}