diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
index cd065a0adc4..2cd31ba952a 100755
--- a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
+++ b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
@@ -3757,6 +3757,13 @@
+
+
+
+ Execution environment configuration to use for partition task.
+
+
+
@@ -3823,6 +3830,13 @@
+
+
+
+ Execution environment configuration to use for partition task.
+
+
+
diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/util/SimpleTaskAdapter.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/util/SimpleTaskAdapter.java
index 58d652e3a31..26eca933b40 100644
--- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/util/SimpleTaskAdapter.java
+++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/util/SimpleTaskAdapter.java
@@ -853,4 +853,9 @@ public ObjectReferenceType getOwnerRef() {
public Collection getCachingProfiles() {
return emptySet();
}
+
+ @Override
+ public TaskExecutionEnvironmentType getExecutionEnvironment() {
+ return null;
+ }
}
diff --git a/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/StaticTaskPartitionsDefinition.java b/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/StaticTaskPartitionsDefinition.java
index 00dae357a77..30c6ae652d4 100644
--- a/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/StaticTaskPartitionsDefinition.java
+++ b/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/StaticTaskPartitionsDefinition.java
@@ -126,6 +126,11 @@ public TaskWorkManagementType getWorkManagement(Task masterTask) {
return data.getWorkManagement();
}
+ @Override
+ public TaskExecutionEnvironmentType getExecutionEnvironment(Task masterTask) {
+ return data.getExecutionEnvironment();
+ }
+
@Override
public Boolean isCopyMasterExtension(Task masterTask) {
return data.isCopyMasterExtension();
@@ -169,6 +174,11 @@ public TaskWorkManagementType getWorkManagement(Task masterTask) {
return data.getWorkManagement();
}
+ @Override
+ public TaskExecutionEnvironmentType getExecutionEnvironment(Task masterTask) {
+ return data.getExecutionEnvironment();
+ }
+
@Override
public Boolean isCopyMasterExtension(Task masterTask) {
return data.isCopyMasterExtension();
diff --git a/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/Task.java b/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/Task.java
index 4425e675085..ea742018788 100644
--- a/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/Task.java
+++ b/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/Task.java
@@ -1047,4 +1047,6 @@ void flushPendingModifications(OperationResult parentResult) throws ObjectNotFou
@NotNull
Collection getCachingProfiles();
+
+ TaskExecutionEnvironmentType getExecutionEnvironment();
}
diff --git a/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/TaskPartitionsDefinition.java b/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/TaskPartitionsDefinition.java
index 08e93266a54..b2f6ba001d0 100644
--- a/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/TaskPartitionsDefinition.java
+++ b/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/TaskPartitionsDefinition.java
@@ -17,6 +17,7 @@
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;
@@ -77,6 +78,13 @@ 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.
*/
@@ -124,6 +132,13 @@ 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.
*/
diff --git a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskQuartzImpl.java b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskQuartzImpl.java
index bfc7c14dc48..7352b82a627 100644
--- a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskQuartzImpl.java
+++ b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskQuartzImpl.java
@@ -2603,7 +2603,12 @@ public void addSubtask(TaskType subtaskBean) {
@NotNull
@Override
public Collection getCachingProfiles() {
- TaskExecutionEnvironmentType executionEnvironment = getTaskType().getExecutionEnvironment();
+ TaskExecutionEnvironmentType executionEnvironment = getExecutionEnvironment();
return executionEnvironment != null ? executionEnvironment.getCachingProfile() : emptySet();
}
+
+ @Override
+ public TaskExecutionEnvironmentType getExecutionEnvironment() {
+ return getTaskType().getExecutionEnvironment();
+ }
}
diff --git a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/handlers/PartitioningTaskHandler.java b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/handlers/PartitioningTaskHandler.java
index 1c12aedc3f5..d76fd05921d 100644
--- a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/handlers/PartitioningTaskHandler.java
+++ b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/handlers/PartitioningTaskHandler.java
@@ -16,7 +16,6 @@
package com.evolveum.midpoint.task.quartzimpl.handlers;
-import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.delta.ItemDelta;
@@ -261,6 +260,12 @@ private String createSubtask(int index, TaskPartitionsDefinition partitionsDefin
null, partition, partitionsDefinition);
// work management is updated and stored into subtask later
+ TaskExecutionEnvironmentType executionEnvironment = applyDefaults(
+ p -> p.getExecutionEnvironment(masterTask),
+ ps -> ps.getExecutionEnvironment(masterTask),
+ masterTask.getExecutionEnvironment(), partition, partitionsDefinition);
+ subtask.setExecutionEnvironment(CloneUtil.clone(executionEnvironment));
+
String handlerUriTemplate = applyDefaults(
p -> p.getHandlerUri(masterTask),
ps -> ps.getHandlerUri(masterTask),
diff --git a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/work/WorkStateManager.java b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/work/WorkStateManager.java
index 534964276f8..d398857fcda 100644
--- a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/work/WorkStateManager.java
+++ b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/work/WorkStateManager.java
@@ -16,27 +16,9 @@
package com.evolveum.midpoint.task.quartzimpl.work;
-import static com.evolveum.midpoint.schema.util.TaskWorkStateTypeUtil.findBucketByNumber;
-import static java.util.Collections.singletonList;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.function.Function;
-import java.util.function.Supplier;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang.BooleanUtils;
-import org.jetbrains.annotations.NotNull;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContext;
-import com.evolveum.midpoint.prism.PrismObject;
-import com.evolveum.midpoint.prism.delta.ContainerDelta;
import com.evolveum.midpoint.prism.delta.ItemDelta;
-import com.evolveum.midpoint.prism.delta.ItemDeltaCollectionsUtil;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
@@ -47,7 +29,6 @@
import com.evolveum.midpoint.repo.api.VersionPrecondition;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.TaskWorkStateTypeUtil;
-import com.evolveum.midpoint.task.api.RunningTask;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskExecutionStatus;
import com.evolveum.midpoint.task.api.TaskManager;
@@ -62,7 +43,6 @@
import com.evolveum.midpoint.task.quartzimpl.work.segmentation.WorkSegmentationStrategyFactory;
import com.evolveum.midpoint.task.quartzimpl.work.segmentation.content.WorkBucketContentHandler;
import com.evolveum.midpoint.task.quartzimpl.work.segmentation.content.WorkBucketContentHandlerRegistry;
-import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.backoff.BackoffComputer;
import com.evolveum.midpoint.util.backoff.ExponentialBackoffComputer;
import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException;
@@ -71,15 +51,21 @@
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractWorkSegmentationType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskKindType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskWorkManagementType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskWorkStateType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.WorkAllocationConfigurationType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.WorkBucketStateType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.WorkBucketType;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
+import org.apache.commons.lang.BooleanUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+import static com.evolveum.midpoint.schema.util.TaskWorkStateTypeUtil.findBucketByNumber;
+import static java.util.Collections.singletonList;
/**
* Responsible for managing task work state.
@@ -109,7 +95,7 @@ private class Context {
Task coordinatorTask; // null for standalone worker tasks
final Supplier canRunSupplier;
- public Context(Supplier canRunSupplier) {
+ Context(Supplier canRunSupplier) {
this.canRunSupplier = canRunSupplier;
}
@@ -121,15 +107,15 @@ public boolean isStandalone() {
return kind == null || kind == TaskKindType.STANDALONE;
}
- public void reloadCoordinatorTask(OperationResult result) throws SchemaException, ObjectNotFoundException {
+ void reloadCoordinatorTask(OperationResult result) throws SchemaException, ObjectNotFoundException {
coordinatorTask = taskManager.getTask(coordinatorTask.getOid(), null, result);
}
- public void reloadWorkerTask(OperationResult result) throws SchemaException, ObjectNotFoundException {
+ void reloadWorkerTask(OperationResult result) throws SchemaException, ObjectNotFoundException {
workerTask = taskManager.getTask(workerTask.getOid(), null, result);
}
- public TaskWorkManagementType getWorkStateConfiguration() {
+ TaskWorkManagementType getWorkStateConfiguration() {
return isStandalone() ? workerTask.getWorkManagement() : coordinatorTask.getWorkManagement();
}
}
diff --git a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/work/workers/WorkersManager.java b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/work/workers/WorkersManager.java
index 5eabc79ff1f..7ffe85b23f9 100644
--- a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/work/workers/WorkersManager.java
+++ b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/work/workers/WorkersManager.java
@@ -250,9 +250,10 @@ private int createWorkers(Task coordinatorTask, MultiValuedMap coordinatorExtension = coordinatorTask.getExtensionClone();
if (coordinatorExtension != null) {
diff --git a/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/AbstractTaskManagerTest.java b/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/AbstractTaskManagerTest.java
index 828e472145f..72d5147a626 100644
--- a/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/AbstractTaskManagerTest.java
+++ b/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/AbstractTaskManagerTest.java
@@ -43,13 +43,10 @@
import org.testng.annotations.BeforeSuite;
import org.xml.sax.SAXException;
-import javax.xml.bind.JAXBException;
import java.io.File;
import java.io.IOException;
import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
+import java.util.*;
import static com.evolveum.midpoint.test.IntegrationTestTools.display;
import static com.evolveum.midpoint.test.IntegrationTestTools.waitFor;
@@ -77,7 +74,9 @@ public class AbstractTaskManagerTest extends AbstractTestNGSpringContextTests {
protected static final String PARALLEL_TASK_HANDLER_URI = "http://midpoint.evolveum.com/test/parallel-task-handler";
protected static final String LONG_TASK_HANDLER_URI = "http://midpoint.evolveum.com/test/long-task-handler";
- private static final String USER_ADMINISTRATOR_FILE = "src/test/resources/common/user-administrator.xml";
+ public static final String COMMON_DIR = "src/test/resources/common";
+ private static final File USER_ADMINISTRATOR_FILE = new File(COMMON_DIR, "user-administrator.xml");
+ static final File SYSTEM_CONFIGURATION_FILE = new File(COMMON_DIR, "system-configuration.xml");
// TODO make configurable. Due to a race condition there can be a small number of unoptimized complete buckets
// (it should not exceed the number of workers ... at least not by much amount :)
@@ -149,10 +148,10 @@ public void setup() throws SchemaException, SAXException, IOException {
public void initialize() throws Exception {
initHandlers();
- addObjectFromFile(USER_ADMINISTRATOR_FILE);
+ addObjectFromFile(USER_ADMINISTRATOR_FILE.getPath());
}
- protected PrismObject unmarshallJaxbFromFile(String filePath) throws IOException, JAXBException, SchemaException {
+ protected PrismObject unmarshallJaxbFromFile(String filePath) throws IOException, SchemaException {
File file = new File(filePath);
return PrismTestUtil.parseObject(file);
}
@@ -347,4 +346,13 @@ protected Collection> retrieveItemsNamed(Ob
.build();
}
+ void assertCachingProfiles(Task task, String... expectedProfiles) {
+ Set realProfiles = getCachingProfiles(task);
+ assertEquals("Wrong caching profiles in " + task, new HashSet<>(Arrays.asList(expectedProfiles)), realProfiles);
+ }
+
+ private Set getCachingProfiles(Task task) {
+ TaskExecutionEnvironmentType env = task.getExecutionEnvironment();
+ return env != null ? new HashSet<>(env.getCachingProfile()) : Collections.emptySet();
+ }
}
diff --git a/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/TestWorkersManagement.java b/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/TestWorkersManagement.java
index f99247cdd7e..f41df2da531 100644
--- a/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/TestWorkersManagement.java
+++ b/repo/task-quartz-impl/src/test/java/com/evolveum/midpoint/task/quartzimpl/TestWorkersManagement.java
@@ -16,6 +16,7 @@
package com.evolveum.midpoint.task.quartzimpl;
import com.evolveum.midpoint.prism.PrismContext;
+import com.evolveum.midpoint.schema.cache.CacheConfigurationManager;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskExecutionStatus;
@@ -23,6 +24,7 @@
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskExecutionStatusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskKindType;
import org.jetbrains.annotations.NotNull;
@@ -54,15 +56,17 @@
public class TestWorkersManagement extends AbstractTaskManagerTest {
private static final transient Trace LOGGER = TraceManager.getTrace(TestWorkersManagement.class);
- public static final long DEFAULT_SLEEP_INTERVAL = 250L;
- public static final long DEFAULT_TIMEOUT = 30000L;
+ private static final long DEFAULT_SLEEP_INTERVAL = 250L;
+ private static final long DEFAULT_TIMEOUT = 30000L;
@Autowired private WorkStateManager workStateManager;
+ @Autowired private CacheConfigurationManager cacheConfigurationManager;
private static String taskFilename(String testName, String subId) {
return "src/test/resources/workers/task-" + testNumber(testName) + "-" + subId + ".xml";
}
+ @SuppressWarnings("unused")
private static String taskFilename(String testName) {
return taskFilename(testName, "0");
}
@@ -71,6 +75,7 @@ private static String taskOid(String testName, String subId) {
return "44444444-2222-2222-2223-" + testNumber(testName) + subId + "00000000";
}
+ @SuppressWarnings("unused")
private static String taskOid(String test) {
return taskOid(test, "0");
}
@@ -79,23 +84,25 @@ private static String testNumber(String test) {
return test.substring(4, 7);
}
+ @SuppressWarnings("unused")
@NotNull
protected String workerTaskFilename(String TEST_NAME) {
return taskFilename(TEST_NAME, "w");
}
@NotNull
- protected String coordinatorTaskFilename(String TEST_NAME) {
+ private String coordinatorTaskFilename(String TEST_NAME) {
return taskFilename(TEST_NAME, "c");
}
+ @SuppressWarnings("unused")
@NotNull
protected String workerTaskOid(String TEST_NAME) {
return taskOid(TEST_NAME, "w");
}
@NotNull
- protected String coordinatorTaskOid(String TEST_NAME) {
+ private String coordinatorTaskOid(String TEST_NAME) {
return taskOid(TEST_NAME, "c");
}
@@ -104,6 +111,9 @@ public void initialize() throws Exception {
super.initialize();
workStateManager.setFreeBucketWaitIntervalOverride(1000L);
DebugUtil.setPrettyPrintBeansAs(PrismContext.LANG_YAML);
+
+ cacheConfigurationManager.applyCachingConfiguration(
+ (SystemConfigurationType) prismContext.parseObject(SYSTEM_CONFIGURATION_FILE).asObjectable());
}
@Test
@@ -134,6 +144,8 @@ public void test100CreateWorkersSingle() throws Exception {
display("coordinator task", coordinatorTask);
display("worker task", workers.get(0));
+ assertCachingProfiles(coordinatorTask, "profile1");
+ assertCachingProfiles(workers.get(0), "profile1");
waitForTaskClose(coordinatorTaskOid, result, DEFAULT_TIMEOUT, DEFAULT_SLEEP_INTERVAL);
@@ -162,7 +174,7 @@ public void test100CreateWorkersSingle() throws Exception {
}
}
- @Test
+ @Test
public void test110CreateWorkersRecurring() throws Exception {
final String TEST_NAME = "test110CreateWorkersRecurring";
OperationResult result = createResult(TEST_NAME, LOGGER);
@@ -234,6 +246,7 @@ public void test110CreateWorkersRecurring() throws Exception {
//assertEquals("Wrong state-before-suspend of coordinator", TaskExecutionStatusType.RUNNABLE,
// coordinatorTask.getStateBeforeSuspend());
assertEquals("Wrong execution status of worker", TaskExecutionStatus.CLOSED, worker.getExecutionStatus());
+ //noinspection SimplifiedTestNGAssertion
assertEquals("Wrong state-before-suspend of worker", null, worker.getStateBeforeSuspend());
// (4) ------------------------------------------------------------------------------------ WHEN (resume the tree)
@@ -252,7 +265,9 @@ public void test110CreateWorkersRecurring() throws Exception {
assertEquals("Wrong execution status of coordinator", TaskExecutionStatus.RUNNABLE,
coordinatorTask.getExecutionStatus());
+ //noinspection SimplifiedTestNGAssertion
assertEquals("Wrong state-before-suspend of coordinator", null, coordinatorTask.getStateBeforeSuspend());
+ //noinspection SimplifiedTestNGAssertion
assertEquals("Wrong state-before-suspend of worker", null, worker.getStateBeforeSuspend());
// (5) ------------------------------------------------------------------------------------ WHEN (suspend the tree while worker is executing)
@@ -332,8 +347,14 @@ public void test200SimplePartitioning() throws Exception {
assertEquals("Wrong task kind", TaskKindType.PARTITIONED_MASTER, masterTask.getWorkManagement().getTaskKind());
assertEquals("Wrong # of partitions", 3, subtasks.size());
+ assertCachingProfiles(masterTask, "profile1");
+ assertCachingProfiles(subtasks.get(0), "profile1");
+ assertCachingProfiles(subtasks.get(1), "profile1");
+ assertCachingProfiles(subtasks.get(2), "profile1");
+
waitForTaskCloseCheckingSubtasks(masterTaskOid, result, DEFAULT_TIMEOUT, DEFAULT_SLEEP_INTERVAL);
+ //noinspection SimplifiedTestNGAssertion
assertEquals("Unexpected failure", null, partitionedWorkBucketsTaskHandler.getFailure());
// TODO some asserts here
@@ -369,6 +390,7 @@ public void test210PartitioningToWorkersSingleBucket() throws Exception {
assertEquals("Wrong task kind", TaskKindType.PARTITIONED_MASTER, masterTask.getWorkManagement().getTaskKind());
assertEquals("Wrong # of partitions", 3, subtasks.size());
+ Task first = subtasks.stream().filter(t -> t.getName().getOrig().contains("(1)")).findFirst().orElse(null);
Task second = subtasks.stream().filter(t -> t.getName().getOrig().contains("(2)")).findFirst().orElse(null);
Task third = subtasks.stream().filter(t -> t.getName().getOrig().contains("(3)")).findFirst().orElse(null);
assertNotNull("Second-phase task was not created", second);
@@ -381,6 +403,12 @@ public void test210PartitioningToWorkersSingleBucket() throws Exception {
display("Subtasks of second task after completion", secondSubtasks);
assertEquals("Wrong # of second task's subtasks", 3, secondSubtasks.size());
+ assertCachingProfiles(masterTask, "profile1");
+ assertCachingProfiles(first, "profile1");
+ assertCachingProfiles(second, "profile2");
+ assertCachingProfiles(third, "profile1");
+ secondSubtasks.forEach(t -> assertCachingProfiles(t, "profile2"));
+
waitForTaskCloseCheckingSubtasks(third.getOid(), result, DEFAULT_TIMEOUT, DEFAULT_SLEEP_INTERVAL);
third = taskManager.getTask(third.getOid(), result);
display("Third task after completion", third);
@@ -390,6 +418,7 @@ public void test210PartitioningToWorkersSingleBucket() throws Exception {
waitForTaskCloseCheckingSubtasks(masterTaskOid, result, DEFAULT_TIMEOUT, DEFAULT_SLEEP_INTERVAL);
+ //noinspection SimplifiedTestNGAssertion
assertEquals("Unexpected failure", null, partitionedWorkBucketsTaskHandler.getFailure());
// TODO some asserts here
@@ -400,7 +429,7 @@ public void test210PartitioningToWorkersSingleBucket() throws Exception {
}
}
- @Test(enabled = false) // MID-5041
+ @Test
public void test220PartitioningToWorkersMoreBuckets() throws Exception {
final String TEST_NAME = "test220PartitioningToWorkersMoreBuckets";
OperationResult result = createResult(TEST_NAME, LOGGER);
@@ -425,6 +454,7 @@ public void test220PartitioningToWorkersMoreBuckets() throws Exception {
assertEquals("Wrong task kind", TaskKindType.PARTITIONED_MASTER, masterTask.getWorkManagement().getTaskKind());
assertEquals("Wrong # of partitions", 3, subtasks.size());
+ Task first = subtasks.stream().filter(t -> t.getName().getOrig().contains("(1)")).findFirst().orElse(null);
Task second = subtasks.stream().filter(t -> t.getName().getOrig().contains("(2)")).findFirst().orElse(null);
Task third = subtasks.stream().filter(t -> t.getName().getOrig().contains("(3)")).findFirst().orElse(null);
assertNotNull("Second-phase task was not created", second);
@@ -444,8 +474,16 @@ public void test220PartitioningToWorkersMoreBuckets() throws Exception {
display("Subtasks of third task after completion", thirdSubtasks);
assertEquals("Wrong # of third task's subtasks", 2, thirdSubtasks.size());
+ assertCachingProfiles(masterTask, "profile1");
+ assertCachingProfiles(first, "profile2");
+ assertCachingProfiles(second, "profile2");
+ assertCachingProfiles(third, "profile3");
+ secondSubtasks.forEach(t -> assertCachingProfiles(t, "profile2"));
+ thirdSubtasks.forEach(t -> assertCachingProfiles(t, "profile3"));
+
waitForTaskCloseCheckingSubtasks(masterTaskOid, result, DEFAULT_TIMEOUT, DEFAULT_SLEEP_INTERVAL);
+ //noinspection SimplifiedTestNGAssertion
assertEquals("Unexpected failure", null, partitionedWorkBucketsTaskHandler.getFailure());
assertEquals("Wrong # of items processed", 41, partitionedWorkBucketsTaskHandler.getItemsProcessed());
diff --git a/repo/task-quartz-impl/src/test/resources/common/system-configuration.xml b/repo/task-quartz-impl/src/test/resources/common/system-configuration.xml
new file mode 100644
index 00000000000..527fe08d8e6
--- /dev/null
+++ b/repo/task-quartz-impl/src/test/resources/common/system-configuration.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ profile1
+
+
+ profile2
+
+
+ profile3
+
+
+
+
\ No newline at end of file
diff --git a/repo/task-quartz-impl/src/test/resources/workers/task-100-c.xml b/repo/task-quartz-impl/src/test/resources/workers/task-100-c.xml
index 91a86cb82d8..2646d4122ef 100644
--- a/repo/task-quartz-impl/src/test/resources/workers/task-100-c.xml
+++ b/repo/task-quartz-impl/src/test/resources/workers/task-100-c.xml
@@ -44,4 +44,7 @@
single
loose
+
+ profile1
+
diff --git a/repo/task-quartz-impl/src/test/resources/workers/task-200-r.xml b/repo/task-quartz-impl/src/test/resources/workers/task-200-r.xml
index 141d7bae7d3..c64b96cbeec 100644
--- a/repo/task-quartz-impl/src/test/resources/workers/task-200-r.xml
+++ b/repo/task-quartz-impl/src/test/resources/workers/task-200-r.xml
@@ -30,4 +30,7 @@
single
loose
+
+ profile1
+
diff --git a/repo/task-quartz-impl/src/test/resources/workers/task-210-r.xml b/repo/task-quartz-impl/src/test/resources/workers/task-210-r.xml
index 2fb75f06169..46798c4c047 100644
--- a/repo/task-quartz-impl/src/test/resources/workers/task-210-r.xml
+++ b/repo/task-quartz-impl/src/test/resources/workers/task-210-r.xml
@@ -40,6 +40,9 @@
+
+ profile2
+
3
@@ -56,4 +59,7 @@
single
loose
+
+ profile1
+
diff --git a/repo/task-quartz-impl/src/test/resources/workers/task-220-r.xml b/repo/task-quartz-impl/src/test/resources/workers/task-220-r.xml
index 1cbee5f8981..8c118490263 100644
--- a/repo/task-quartz-impl/src/test/resources/workers/task-220-r.xml
+++ b/repo/task-quartz-impl/src/test/resources/workers/task-220-r.xml
@@ -30,6 +30,9 @@
+
+ profile2
+
2
@@ -65,9 +68,15 @@
+
+ profile3
+
single
loose
+
+ profile1
+