Skip to content

Commit

Permalink
Continue clean up work-related task schema
Browse files Browse the repository at this point in the history
The XSD schema related to task work distribution and work state
management was cleaned up a bit more.
  • Loading branch information
mederly committed Mar 19, 2018
1 parent 1140938 commit 878d15e
Show file tree
Hide file tree
Showing 12 changed files with 65 additions and 65 deletions.
Expand Up @@ -1216,7 +1216,7 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="partitioning" type="tns:TaskPartitioningDefinitionType" minOccurs="0">
<xsd:element name="partitions" type="tns:TaskPartitionsDefinitionType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How to create and manage partitions.
Expand Down Expand Up @@ -3117,7 +3117,7 @@
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="name" type="xsd:string" minOccurs="0">
<xsd:element name="taskName" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How to derive names for worker tasks. It is possible to use substitution strings of {node} and {index}
Expand All @@ -3132,20 +3132,20 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="workersPerNode" type="tns:WorkerTasksPerNodeConfigurationType" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>
How many tasks to create?
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="otherDeltas" type="t:ItemDeltaType" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>
Other deltas to be applied to newly created worker task.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="workersPerNode" type="tns:WorkerTasksPerNodeConfigurationType" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>
How many tasks to create?
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>

Expand Down Expand Up @@ -3174,6 +3174,15 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="taskName" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How to derive names for the tasks. This overrides the name setting of parent element.
It is possible to use substitution strings of {node} and {index} here. Node is the node
identifier and index numbers workers created for particular node, starting at 1.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="executionGroup" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Expand All @@ -3183,15 +3192,6 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="name" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How to derive names for the tasks. This overrides the name setting of parent element.
It is possible to use substitution strings of {node} and {index} here. Node is the node
identifier and index numbers workers created for particular node, starting at 1.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="otherDeltas" type="t:ItemDeltaType" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>
Expand All @@ -3202,7 +3202,7 @@
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="TaskPartitioningDefinitionType">
<xsd:complexType name="TaskPartitionsDefinitionType">
<xsd:annotation>
<xsd:documentation>
Describes how to partition the work into subtasks.
Expand All @@ -3214,7 +3214,7 @@
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="partitionCount" type="xsd:int" minOccurs="0">
<xsd:element name="count" type="xsd:int" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Number of partitions to create. Optional. The default is the number of partition item values.
Expand All @@ -3228,7 +3228,7 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="name" type="xsd:string" minOccurs="0">
<xsd:element name="taskName" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How to derive names for partition tasks. It is possible to use substitution strings of {masterTaskName},
Expand Down Expand Up @@ -3296,7 +3296,7 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="name" type="xsd:string" minOccurs="0">
<xsd:element name="taskName" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
How to derive names for the partition task. It is possible to use substitution strings of {masterTaskName},
Expand Down
Expand Up @@ -21,7 +21,7 @@
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskManager;
import com.evolveum.midpoint.task.api.TaskPartitioningDefinition;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitioningDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitionsDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -57,11 +57,11 @@ private void initialize() {
}

private TaskPartitioningDefinition createPartitioningDefinition(Task masterTask) {
TaskPartitioningDefinitionType definitionInTask = masterTask.getWorkManagement() != null ?
masterTask.getWorkManagement().getPartitioning() : null;
TaskPartitioningDefinitionType partitioningDefinition = definitionInTask != null ?
definitionInTask.clone() : new TaskPartitioningDefinitionType();
partitioningDefinition.setPartitionCount(3);
TaskPartitionsDefinitionType definitionInTask = masterTask.getWorkManagement() != null ?
masterTask.getWorkManagement().getPartitions() : null;
TaskPartitionsDefinitionType partitioningDefinition = definitionInTask != null ?
definitionInTask.clone() : new TaskPartitionsDefinitionType();
partitioningDefinition.setCount(3);
partitioningDefinition.setCopyMasterExtension(true);
return new StaticTaskPartitioningDefinition(partitioningDefinition,
prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(TaskType.class));
Expand Down
Expand Up @@ -40,7 +40,7 @@
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/partitioned-reconciliation/handler-3</handlerUri>
<objectRef oid="10000000-0000-0000-0000-000000000204" type="ResourceType"/>
<workManagement>
<partitioning>
<partitions>
<partition>
<index>2</index>
<workManagement>
Expand All @@ -58,7 +58,7 @@
</workers>
</workManagement>
</partition>
</partitioning>
</partitions>
</workManagement>
<recurrence>recurring</recurrence>
<binding>loose</binding>
Expand Down
Expand Up @@ -40,7 +40,7 @@
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/partitioned-reconciliation/handler-3</handlerUri>
<objectRef oid="10000000-0000-0000-0000-000000000404" type="ResourceType"/>
<workManagement>
<partitioning>
<partitions>
<partition>
<index>2</index>
<workManagement>
Expand All @@ -58,7 +58,7 @@
</workers>
</workManagement>
</partition>
</partitioning>
</partitions>
</workManagement>
<recurrence>recurring</recurrence>
<binding>loose</binding>
Expand Down
Expand Up @@ -38,7 +38,7 @@
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/partitioned-reconciliation/handler-3</handlerUri>
<objectRef oid="10000000-0000-0000-0000-000000000004" type="ResourceType"/>
<workManagement>
<partitioning>
<partitions>
<partition>
<index>2</index>
<workManagement>
Expand All @@ -51,7 +51,7 @@
</buckets>
</workManagement>
</partition>
</partitioning>
</partitions>
</workManagement>
<recurrence>recurring</recurrence>
<binding>loose</binding>
Expand Down
Expand Up @@ -39,29 +39,29 @@
*/
public class StaticTaskPartitioningDefinition implements TaskPartitioningDefinition {

@NotNull private final TaskPartitioningDefinitionType data;
@NotNull private final TaskPartitionsDefinitionType data;
@NotNull private final List<TaskPartitionDefinition> partitions;
@NotNull private final PrismObjectDefinition<TaskType> taskDefinition;

public StaticTaskPartitioningDefinition(@NotNull TaskPartitioningDefinitionType data,
public StaticTaskPartitioningDefinition(@NotNull TaskPartitionsDefinitionType data,
@Nullable List<TaskPartitionDefinition> partitionsOverride, @NotNull PrismObjectDefinition<TaskType> taskDefinition) {
this.data = data;
this.partitions = partitionsOverride != null ? partitionsOverride : createPartitionDefinitions(data);
this.taskDefinition = taskDefinition;
}

public StaticTaskPartitioningDefinition(@NotNull TaskPartitioningDefinitionType partitioningDefinition,
public StaticTaskPartitioningDefinition(@NotNull TaskPartitionsDefinitionType partitioningDefinition,
@NotNull PrismObjectDefinition<TaskType> taskDefinition) {
this(partitioningDefinition, null, taskDefinition);
}

private List<TaskPartitionDefinition> createPartitionDefinitions(TaskPartitioningDefinitionType data) {
private List<TaskPartitionDefinition> createPartitionDefinitions(TaskPartitionsDefinitionType data) {
int count;
if (data.getPartitionCount() != null) {
count = data.getPartitionCount();
if (data.getCount() != null) {
count = data.getCount();
if (count < data.getPartition().size()) {
throw new SystemException("There are more partitions defined (" + data.getPartition() + ") than declared"
+ " by partitionCount item (" + count + ")");
+ " by partition count item (" + count + ")");
}
} else {
count = data.getPartition().size();
Expand Down Expand Up @@ -93,9 +93,9 @@ private List<TaskPartitionDefinition> createPartitionDefinitions(TaskPartitionin
}

@Override
public int getPartitionCount(Task masterTask) {
if (data.getPartitionCount() != null) {
return data.getPartitionCount();
public int getCount(Task masterTask) {
if (data.getCount() != null) {
return data.getCount();
} else {
return partitions.size();
}
Expand All @@ -108,7 +108,7 @@ public boolean isSequentialExecution(Task masterTask) {

@Override
public String getName(Task masterTask) {
return data.getName();
return data.getTaskName();
}

@Override
Expand Down Expand Up @@ -151,7 +151,7 @@ public StaticTaskPartition(@NotNull TaskPartitionDefinitionType data) {

@Override
public String getName(Task masterTask) {
return data.getName();
return data.getTaskName();
}

@Override
Expand Down
Expand Up @@ -38,7 +38,7 @@ public interface TaskPartitioningDefinition {
/**
* Number of partitions.
*/
int getPartitionCount(Task masterTask);
int getCount(Task masterTask);

/**
* Whether the subtasks should be executed sequentially.
Expand Down
Expand Up @@ -118,20 +118,20 @@ private List<Task> createSubtasks(Task masterTask, OperationResult opResult)
throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException {
TaskPartitioningDefinition partitioningDefinition = partitioningDefinitionSupplier.apply(masterTask);
List<String> subtaskOids = new ArrayList<>();
int partitionCount = partitioningDefinition.getPartitionCount(masterTask);
for (int i = 1; i <= partitionCount; i++) {
int count = partitioningDefinition.getCount(masterTask);
for (int i = 1; i <= count; i++) {
subtaskOids.add(createSubtask(i, partitioningDefinition, masterTask, opResult));
}
List<Task> subtasks = new ArrayList<>(subtaskOids.size());
for (String subtaskOid : subtaskOids) {
subtasks.add(taskManager.getTask(subtaskOid, opResult));
}
boolean sequential = partitioningDefinition.isSequentialExecution(masterTask);
for (int i = 1; i <= partitionCount; i++) {
for (int i = 1; i <= count; i++) {
Task subtask = subtasks.get(i - 1);
TaskPartitionDefinition partition = partitioningDefinition.getPartition(masterTask, i);
Collection<Integer> dependents = new HashSet<>(partition.getDependents());
if (sequential && i < partitionCount) {
if (sequential && i < count) {
dependents.add(i + 1);
}
for (Integer dependentIndex : dependents) {
Expand Down
Expand Up @@ -144,10 +144,10 @@ private void createWorker(String nodeIdentifier, int index, WorkerTasksPerNodeCo
replacements.put("index", String.valueOf(index));

String nameTemplate;
if (perNodeConfig.getName() != null) {
nameTemplate = perNodeConfig.getName();
} else if (workersCfg.getName() != null) {
nameTemplate = workersCfg.getName();
if (perNodeConfig.getTaskName() != null) {
nameTemplate = perNodeConfig.getTaskName();
} else if (workersCfg.getTaskName() != null) {
nameTemplate = workersCfg.getTaskName();
} else {
nameTemplate = coordinatorTask.getName().getOrig() + " ({node}:{index})";
}
Expand Down
Expand Up @@ -20,7 +20,7 @@
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskManager;
import com.evolveum.midpoint.task.api.TaskPartitioningDefinition;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitioningDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitionsDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;

/**
Expand All @@ -45,11 +45,11 @@ public void initializeAndRegister(String handlerUri) {

// mimics PartitionedReconciliationTaskHandlerCreator
private TaskPartitioningDefinition createPartitioningDefinition(Task masterTask) {
TaskPartitioningDefinitionType definitionInTask = masterTask.getWorkManagement() != null ?
masterTask.getWorkManagement().getPartitioning() : null;
TaskPartitioningDefinitionType partitioningDefinition = definitionInTask != null ?
definitionInTask.clone() : new TaskPartitioningDefinitionType();
partitioningDefinition.setPartitionCount(3);
TaskPartitionsDefinitionType definitionInTask = masterTask.getWorkManagement() != null ?
masterTask.getWorkManagement().getPartitions() : null;
TaskPartitionsDefinitionType partitioningDefinition = definitionInTask != null ?
definitionInTask.clone() : new TaskPartitionsDefinitionType();
partitioningDefinition.setCount(3);
partitioningDefinition.setCopyMasterExtension(true);
return new StaticTaskPartitioningDefinition(partitioningDefinition,
prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(TaskType.class));
Expand Down
Expand Up @@ -29,7 +29,7 @@
<handlerUri>http://midpoint.evolveum.com/test/partitioned-wb-task-handler</handlerUri>
<objectRef oid="ef2bc95b-76e0-48e2-86d6-3d4f02d3fafe" type="ResourceType" />
<workManagement>
<partitioning>
<partitions>
<partition>
<index>2</index>
<workManagement>
Expand All @@ -52,7 +52,7 @@
</workers>
</workManagement>
</partition>
</partitioning>
</partitions>
</workManagement>
<recurrence>single</recurrence>
<binding>loose</binding>
Expand Down
Expand Up @@ -29,7 +29,7 @@
<handlerUri>http://midpoint.evolveum.com/test/partitioned-wb-task-handler</handlerUri>
<objectRef oid="ef2bc95b-76e0-48e2-86d6-3d4f02d3fafe" type="ResourceType" />
<workManagement>
<partitioning>
<partitions>
<partition>
<index>2</index>
<workManagement>
Expand Down Expand Up @@ -66,7 +66,7 @@
</workers>
</workManagement>
</partition>
</partitioning>
</partitions>
</workManagement>
<recurrence>single</recurrence>
<binding>loose</binding>
Expand Down

0 comments on commit 878d15e

Please sign in to comment.