Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
# Conflicts:
#	repo/repo-common/src/main/java/com/evolveum/midpoint/repo/common/task/IterativeActivityExecution.java
  • Loading branch information
mederly committed Aug 23, 2021
2 parents 7f04fd4 + 6b666f2 commit 210c3da
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,16 @@

package com.evolveum.midpoint.repo.common.task;

import static com.evolveum.midpoint.schema.result.OperationResultStatus.*;
import static com.evolveum.midpoint.schema.result.OperationResultStatus.FATAL_ERROR;
import static com.evolveum.midpoint.schema.result.OperationResultStatus.PARTIAL_ERROR;
import static com.evolveum.midpoint.task.api.TaskRunResult.TaskRunResultStatus.PERMANENT_ERROR;

import com.evolveum.midpoint.repo.common.activity.state.ActivityBucketManagementStatistics;
import com.evolveum.midpoint.repo.common.task.work.GetBucketOperationOptions;
import com.evolveum.midpoint.repo.common.task.work.GetBucketOperationOptions.GetBucketOperationOptionsBuilder;
import com.evolveum.midpoint.schema.util.task.BucketingUtil;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.xml.ns._public.common.common_3.WorkBucketType;
import java.util.Objects;

import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import com.evolveum.midpoint.repo.common.activity.ActivityExecutionException;
import com.evolveum.midpoint.repo.common.activity.definition.ActivityDefinition;
Expand All @@ -28,25 +25,27 @@
import com.evolveum.midpoint.repo.common.activity.execution.ExecutionInstantiationContext;
import com.evolveum.midpoint.repo.common.activity.execution.LocalActivityExecution;
import com.evolveum.midpoint.repo.common.activity.handlers.ActivityHandler;
import com.evolveum.midpoint.repo.common.activity.state.ActivityBucketManagementStatistics;
import com.evolveum.midpoint.repo.common.activity.state.ActivityItemProcessingStatistics;
import com.evolveum.midpoint.repo.common.activity.state.ActivityState;
import com.evolveum.midpoint.repo.common.task.work.GetBucketOperationOptions;
import com.evolveum.midpoint.repo.common.task.work.GetBucketOperationOptions.GetBucketOperationOptionsBuilder;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import com.evolveum.midpoint.schema.util.task.BucketingUtil;
import com.evolveum.midpoint.task.api.ExecutionSupport;
import com.evolveum.midpoint.task.api.RunningTask;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.CommonException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractActivityWorkStateType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ExecutionModeType;

import org.jetbrains.annotations.Nullable;

import java.util.Objects;
import com.evolveum.midpoint.xml.ns._public.common.common_3.WorkBucketType;

/**
* Represents an execution of an iterative activity: either plain iterative one or search-based one.
Expand Down Expand Up @@ -330,12 +329,19 @@ private ActivityExecutionResult createExecutionResult() {
}
}

private void setExpectedTotal(OperationResult result) throws CommonException {
Long expectedTotal = determineExpectedTotal(result);
getRunningTask().setExpectedTotal(expectedTotal);
getRunningTask().flushPendingModifications(result);
}

/**
* Computes expected total and sets the value in the task. E.g. for search-iterative tasks we count the objects here.
* Determines "expected total" for the activity.
* E.g. for search-iterative tasks we count the objects here. (Except for bucketed executions.)
*
* TODO reconsider
* @return null if no value could be determined or is not applicable
*/
protected abstract void setExpectedTotal(OperationResult result) throws CommonException;
protected abstract @Nullable Long determineExpectedTotal(OperationResult opResult) throws CommonException;

/**
* Starts the item source (e.g. `searchObjectsIterative` call or `synchronize` call) and begins processing items
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import com.evolveum.midpoint.util.exception.CommonException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractActivityWorkStateType;

import org.jetbrains.annotations.Nullable;

/**
* Execution of a plain iterative activity.
*
Expand Down Expand Up @@ -54,9 +56,8 @@ protected void prepareItemSource(OperationResult result) throws ActivityExecutio
}

@Override
protected void setExpectedTotal(OperationResult result) throws CommonException {
// Current iterative activities do not know expected total.
// After the situation changes (e.g. when ConnId SyncOp is extended) we can add the support here.
protected @Nullable Long determineExpectedTotal(OperationResult opResult) throws CommonException {
return executionSpecifics.determineExpectedTotal(opResult);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.exception.CommonException;

import org.jetbrains.annotations.Nullable;

/**
* Provides execution logic and/or execution state related to a plain iterative activity execution.
*
Expand Down Expand Up @@ -41,6 +43,18 @@ public interface PlainIterativeActivityExecutionSpecifics<I>
*/
void iterateOverItemsInBucket(@NotNull WorkBucketType bucket, OperationResult opResult) throws CommonException;

/**
* Determines "expected total" value for the current execution.
*
* Majority of current iterative activities do not know the expected total: for example, ConnId SyncOp does not
* provide information about how many changes are on the resource. But there might be some activities that do.
*
* (Also note that in case of bucketed executions this method should run null - at least for now.)
*/
default @Nullable Long determineExpectedTotal(OperationResult result) throws CommonException {
return null;
}

/**
* @return Default error action if no policy is specified or if no policy entry matches.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,18 +334,8 @@ protected ObjectQuery evaluateQueryExpressions(ObjectQuery query, OperationResul
protected void applyDefinitionsToQuery(OperationResult opResult) throws CommonException {
}

/**
* TODO reconsider
*/
@Override
protected void setExpectedTotal(OperationResult result) throws CommonException {
Long expectedTotal = computeExpectedTotal(result);
getRunningTask().setExpectedTotal(expectedTotal);
getRunningTask().flushPendingModifications(result);
}

@Nullable
private Long computeExpectedTotal(OperationResult opResult) throws SchemaException, ObjectNotFoundException,
protected @Nullable Long determineExpectedTotal(OperationResult opResult) throws SchemaException, ObjectNotFoundException,
CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException {
if (!getReportingOptions().isDetermineExpectedTotal()) {
return null;
Expand Down

0 comments on commit 210c3da

Please sign in to comment.