Skip to content

Commit

Permalink
Check activities for supported execution modes
Browse files Browse the repository at this point in the history
If an activity does not reasonably support dry-run and/or preview
mode, we do not allow it to start in such mode - to avoid user
confusion and unexpected results.
  • Loading branch information
mederly committed Feb 3, 2023
1 parent 12f5205 commit 9b0dce8
Show file tree
Hide file tree
Showing 24 changed files with 118 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public boolean shouldCreateWorkStateOnInitialization() {

@Override
protected @NotNull ActivityRunResult runLocally(OperationResult result) throws ActivityRunException {
ensureFullExecution();
CP policy = policyGetter.apply(
getCleanupPolicies(result));
if (policy != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,15 @@ public class ShadowRefreshActivityHandler

@PostConstruct
public void register() {
handlerRegistry.register(ShadowRefreshWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
handlerRegistry.register(
ShadowRefreshWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
MyWorkDefinition.class, MyWorkDefinition::new, this);
}

@PreDestroy
public void unregister() {
handlerRegistry.unregister(ShadowRefreshWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
MyWorkDefinition.class);
handlerRegistry.unregister(
ShadowRefreshWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI, MyWorkDefinition.class);
}

@Override
Expand Down Expand Up @@ -104,6 +105,12 @@ public boolean doesRequireDirectRepositoryAccess() {
.actionsExecutedStatisticsSupported(true);
}

@Override
public void beforeRun(OperationResult result) {
super.beforeRun(result);
ensureNoPreviewNorDryRun();
}

@Override
public ObjectQuery customizeQuery(ObjectQuery configuredQuery, OperationResult result) {
if (ObjectQueryUtil.hasFilter(configuredQuery)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ public boolean doesRequireDirectRepositoryAccess() {
@Override
public void beforeRun(OperationResult result) {
ensureNoWorkerThreads();
ensureNoPreviewNorDryRun();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,16 @@ public class ShadowIntegrityCheckActivityHandler

@PostConstruct
public void register() {
handlerRegistry.register(ShadowIntegrityCheckWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
handlerRegistry.register(
ShadowIntegrityCheckWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
ShadowIntegrityCheckWorkDefinition.class, ShadowIntegrityCheckWorkDefinition::new, this);
}

@PreDestroy
public void unregister() {
handlerRegistry.unregister(ShadowIntegrityCheckWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
handlerRegistry.unregister(
ShadowIntegrityCheckWorkDefinitionType.COMPLEX_TYPE,
LEGACY_HANDLER_URI,
ShadowIntegrityCheckWorkDefinition.class);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public boolean doesRequireDirectRepositoryAccess() {
public void beforeRun(OperationResult result)
throws CommonException {
ensureNoWorkerThreads();
ensureNoPreviewNorDryRun();

ExecutionModeType executionMode = getActivityDefinition().getExecutionMode();
configuration = new ShadowCheckConfiguration(LOGGER, getWorkDefinition(), executionMode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public class IterativeScriptingActivityHandler

@Override
protected @NotNull ExecutionSupplier<ObjectType, MyWorkDefinition, IterativeScriptingActivityHandler> getExecutionSupplier() {
return MyRunSpecifics::new;
return MyRun::new;
}

@Override
Expand All @@ -91,11 +91,10 @@ public String getIdentifierPrefix() {
return "iterative-scripting";
}

static final class MyRunSpecifics extends
static final class MyRun extends
SearchBasedActivityRun<ObjectType, MyWorkDefinition, IterativeScriptingActivityHandler, AbstractActivityWorkStateType> {

MyRunSpecifics(
@NotNull ActivityRunInstantiationContext<MyWorkDefinition, IterativeScriptingActivityHandler> context, String shortName) {
MyRun(@NotNull ActivityRunInstantiationContext<MyWorkDefinition, IterativeScriptingActivityHandler> context, String shortName) {
super(context, shortName);
setInstanceReady();
}
Expand All @@ -106,6 +105,9 @@ static final class MyRunSpecifics extends
.actionsExecutedStatisticsSupported(true);
}

// We allow dry run mode, as it is conceivable that the script
// could check for it. (To be decided.)

@Override
public boolean processItem(@NotNull ObjectType object,
@NotNull ItemProcessingRequest<ObjectType> request, RunningTask workerTask, OperationResult result)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,15 @@ public class NonIterativeScriptingActivityHandler

@PostConstruct
public void register() {
handlerRegistry.register(NonIterativeScriptingWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
handlerRegistry.register(
NonIterativeScriptingWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
MyWorkDefinition.class, MyWorkDefinition::new, this);
}

@PreDestroy
public void unregister() {
handlerRegistry.unregister(NonIterativeScriptingWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
MyWorkDefinition.class);
handlerRegistry.unregister(
NonIterativeScriptingWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI, MyWorkDefinition.class);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,15 @@ public class ExplicitChangeExecutionActivityHandler

@PostConstruct
public void register() {
handlerRegistry.register(ExplicitChangeExecutionWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
handlerRegistry.register(
ExplicitChangeExecutionWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
MyWorkDefinition.class, MyWorkDefinition::new, this);
}

@PreDestroy
public void unregister() {
handlerRegistry.unregister(ExplicitChangeExecutionWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
MyWorkDefinition.class);
handlerRegistry.unregister(
ExplicitChangeExecutionWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI, MyWorkDefinition.class);
}

@Override
Expand Down Expand Up @@ -98,6 +99,11 @@ final static class MyActivityRun
setInstanceReady();
}

@Override
public void beforeRun(OperationResult result) {
ensureNoDryRun();
}

@Override
public boolean processItem(
@NotNull ItemProcessingRequest<ChangeExecutionRequest> processingRequest,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,12 @@ static final class MyRun extends
.actionsExecutedStatisticsSupported(true);
}

@Override
public void beforeRun(OperationResult result) throws CommonException, ActivityRunException {
super.beforeRun(result);
ensureNoDryRun();
}

@Override
public boolean processItem(@NotNull ObjectType object,
@NotNull ItemProcessingRequest<ObjectType> request, RunningTask workerTask, OperationResult result)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.repo.common.activity.run.ActivityRunException;

import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -108,6 +110,11 @@ static final class MyRun extends
.actionsExecutedStatisticsSupported(true);
}

@Override
public void beforeRun(OperationResult result) {
ensureNoDryRun();
}

@Override
public boolean processItem(@NotNull ObjectType object,
@NotNull ItemProcessingRequest<ObjectType> request, RunningTask workerTask, OperationResult result)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ static final class MyRun extends
@Override
public void beforeRun(OperationResult result) throws CommonException {
getActivityHandler().securityEnforcer.authorizeAll(getRunningTask(), result);
ensureNoPreviewNorDryRun();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ public final class MyRun extends
@Override
public void beforeRun(OperationResult result) throws ActivityRunException, CommonException {

ensureNoPreviewNorDryRun();

ResourceObjectSetType resourceObjectSet = getWorkDefinition().getResourceObjectSetSpecification();
RunningTask runningTask = getRunningTask();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,15 @@ public class AutoScalingActivityHandler

@PostConstruct
public void register() {
handlerRegistry.register(ActivityAutoScalingWorkDefinitionType.COMPLEX_TYPE, null,
handlerRegistry.register(
ActivityAutoScalingWorkDefinitionType.COMPLEX_TYPE, null,
AutoScalingWorkDefinition.class, AutoScalingWorkDefinition::new, this);
}

@PreDestroy
public void unregister() {
handlerRegistry.unregister(ActivityAutoScalingWorkDefinitionType.COMPLEX_TYPE, null,
AutoScalingWorkDefinition.class);
handlerRegistry.unregister(
ActivityAutoScalingWorkDefinitionType.COMPLEX_TYPE, null, AutoScalingWorkDefinition.class);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ public final class AutoScalingActivityRun extends

@Override
public void beforeRun(OperationResult result) throws CommonException, ActivityRunException {
ensureNoPreviewNorDryRun();

XMLGregorianCalendar now = getActivityHandler().getModelBeans().clock.currentTimeXMLGregorianCalendar();
latch = new ReconciliationLatch(getActivity(), getActivityState(), now);
latch.determineSituation(result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,15 @@ public class FocusValidityScanActivityHandler

@PostConstruct
public void register() {
handlerRegistry.register(FocusValidityScanWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
handlerRegistry.register(
FocusValidityScanWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
FocusValidityScanWorkDefinition.class, FocusValidityScanWorkDefinition::new, this);
}

@PreDestroy
public void unregister() {
handlerRegistry.unregister(FocusValidityScanWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
FocusValidityScanWorkDefinition.class);
handlerRegistry.unregister(
FocusValidityScanWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI, FocusValidityScanWorkDefinition.class);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,12 @@ public final class FocusValidityScanPartialRun
.actionsExecutedStatisticsSupported(true);
}

@Override
public void beforeRun(OperationResult result) {
super.beforeRun(result);
ensureNoDryRun();
}

@Override
public ObjectQuery customizeQuery(ObjectQuery configuredQuery, OperationResult result) {
TimeValidityPolicyConstraintType validityConstraint = getValidityConstraint();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ final class TriggerScanActivityRun
@Override
public void beforeRun(OperationResult result) {
super.beforeRun(result);
ensureNoDryRun();
itemProcessor = new TriggerScanItemProcessor(this);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,28 @@
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import com.evolveum.midpoint.repo.common.activity.run.AbstractActivityRun;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.provisioning.api.ProvisioningService;
import com.evolveum.midpoint.provisioning.impl.shadows.ShadowsFacade;
import com.evolveum.midpoint.repo.common.activity.definition.WorkDefinitionFactory;
import com.evolveum.midpoint.repo.common.activity.run.ActivityRunInstantiationContext;
import com.evolveum.midpoint.repo.common.activity.handlers.ActivityHandler;
import com.evolveum.midpoint.repo.common.activity.handlers.ActivityHandlerRegistry;
import com.evolveum.midpoint.repo.common.activity.run.AbstractActivityRun;
import com.evolveum.midpoint.repo.common.activity.run.ActivityRunInstantiationContext;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MultiPropagationWorkDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemObjectsType;

@Component
public class MultiPropagationActivityHandler implements ActivityHandler<MultiPropagationWorkDefinition, MultiPropagationActivityHandler> {
public class MultiPropagationActivityHandler
implements ActivityHandler<MultiPropagationWorkDefinition, MultiPropagationActivityHandler> {

public static final String LEGACY_HANDLER_URI = SchemaConstants.NS_PROVISIONING_TASK + "/propagation/multi-handler-3";
private static final String ARCHETYPE_OID = SystemObjectsType.ARCHETYPE_SYSTEM_TASK.value();

@Autowired WorkDefinitionFactory workDefinitionFactory;
@Autowired ActivityHandlerRegistry handlerRegistry;
@Autowired ProvisioningService provisioningService;
@Autowired ShadowsFacade shadowsFacade;

@PostConstruct
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ public final class MultiPropagationActivityRun
.skipWritingOperationExecutionRecords(true); // to avoid resource change (invalidates the caches)
}

@Override
public void beforeRun(OperationResult result) {
ensureNoPreviewNorDryRun();
}

@Override
public boolean processItem(@NotNull ResourceType resource,
@NotNull ItemProcessingRequest<ResourceType> request,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,16 @@
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import com.evolveum.midpoint.repo.common.activity.run.AbstractActivityRun;

import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.provisioning.api.ProvisioningService;
import com.evolveum.midpoint.provisioning.impl.shadows.ShadowsFacade;
import com.evolveum.midpoint.repo.common.activity.definition.WorkDefinitionFactory;
import com.evolveum.midpoint.repo.common.activity.run.ActivityRunInstantiationContext;
import com.evolveum.midpoint.repo.common.activity.handlers.ActivityHandler;
import com.evolveum.midpoint.repo.common.activity.handlers.ActivityHandlerRegistry;
import com.evolveum.midpoint.repo.common.activity.run.AbstractActivityRun;
import com.evolveum.midpoint.repo.common.activity.run.ActivityRunInstantiationContext;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PropagationWorkDefinitionType;
Expand All @@ -35,21 +33,21 @@ public class PropagationActivityHandler implements ActivityHandler<PropagationWo
private static final String LEGACY_HANDLER_URI = SchemaConstants.NS_PROVISIONING_TASK + "/propagation/handler-3";
private static final String ARCHETYPE_OID = SystemObjectsType.ARCHETYPE_SYSTEM_TASK.value();

@Autowired WorkDefinitionFactory workDefinitionFactory;
@Autowired ActivityHandlerRegistry handlerRegistry;
@Autowired ProvisioningService provisioningService;
@Autowired ShadowsFacade shadowsFacade;

@PostConstruct
public void register() {
handlerRegistry.register(PropagationWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
handlerRegistry.register(
PropagationWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
PropagationWorkDefinition.class, PropagationWorkDefinition::new, this);
}

@PreDestroy
public void unregister() {
handlerRegistry.unregister(PropagationWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI,
PropagationWorkDefinition.class);
handlerRegistry.unregister(
PropagationWorkDefinitionType.COMPLEX_TYPE, LEGACY_HANDLER_URI, PropagationWorkDefinition.class);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public final class PropagationActivityRun

@Override
public void beforeRun(OperationResult result) throws CommonException {
ensureNoPreviewNorDryRun();
String resourceOid = MiscUtil.requireNonNull(
getWorkDefinition().getResourceOid(),
() -> "No resource specified");
Expand Down

0 comments on commit 9b0dce8

Please sign in to comment.