Skip to content

Commit

Permalink
some thresholds improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Feb 28, 2019
1 parent 46fb5ba commit 5c41060
Show file tree
Hide file tree
Showing 100 changed files with 2,175 additions and 778 deletions.
Expand Up @@ -51,7 +51,7 @@ public class ResourceShadowDiscriminator implements Serializable, DebugDumpable,
private QName objectClass;
private boolean tombstone;
private int order = 0;

public ResourceShadowDiscriminator(String resourceOid, ShadowKindType kind, String intent, boolean tombstone) {
this.resourceOid = resourceOid;
this.tombstone = tombstone;
Expand Down Expand Up @@ -151,7 +151,6 @@ public boolean isWildcard() {
return kind == null && objectClass == null;
}


public ShadowDiscriminatorType toResourceShadowDiscriminatorType() {
ShadowDiscriminatorType rsdt = new ShadowDiscriminatorType();
rsdt.setIntent(intent);
Expand Down
129 changes: 78 additions & 51 deletions infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
Expand Up @@ -1209,6 +1209,7 @@
<!--</xsd:element>-->
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="TaskWorkManagementType">
<xsd:annotation>
<xsd:documentation>
Expand Down Expand Up @@ -2744,21 +2745,6 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="stage" type="tns:TaskStageType" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>
Stage of the task. Some task can have different processing stages. E.g. reconciliation
task can have:
- situation stage in which only the situation for shadows is computed
- simulation stage in which all changes are computed but nothing is executed
- execution state in which the full reconciliation is run
Supported stages are defined per task type.
</xsd:documentation>
<xsd:appinfo>
<a:since>4.0</a:since>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
Expand Down Expand Up @@ -3303,42 +3289,6 @@
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="TaskStageType">
<xsd:annotation>
<xsd:documentation>
Stage type of the task.
</xsd:documentation>
<xsd:appinfo>
<a:since>4.0</a:since>
<a:container/>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="stage" type="xsd:anyURI" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Name identifying task stage.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="errorCriticality" type="tns:ErrorSelectorType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Defines which errors are critical and should stop the task in the defined stage.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="processingOption" type="tns:PartialProcessingTypeType" minOccurs="0" default="automatic">
<xsd:annotation>
<xsd:documentation>
Define if the specified stage is executed.
</xsd:documentation>
</xsd:annotation>
</xsd:element>

</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="UriStack">
<xsd:annotation>
<xsd:documentation>
Expand Down Expand Up @@ -3649,8 +3599,85 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="stage" type="tns:ExecutionModeType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Name identifying task stage.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="errorCriticality" type="tns:ErrorSelectorType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Defines which errors are critical and should stop the task in the defined stage.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="processingOption" type="tns:PartialProcessingTypeType" minOccurs="0" default="automatic">
<xsd:annotation>
<xsd:documentation>
Define if the specified stage is executed.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>

<xsd:simpleType name="ExecutionModeType">
<xsd:annotation>
<xsd:documentation>
An enumeration that indicates the activation status of a particular entity.
The activation status determines whether the entity is active (enabled)
or inactive (disabled, archived, etc.). Please see documentation of individual
enumeration values for more details.
</xsd:documentation>
<xsd:appinfo>
<jaxb:typesafeEnumClass/>
</xsd:appinfo>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="dryRun">
<xsd:annotation>
<xsd:documentation>
<p>
Nothing is executed. Just metadata are handled. E.g. during reconciliation
only situations in shadows are set.
</p>
</xsd:documentation>
<xsd:appinfo>
<jaxb:typesafeEnumMember name="DRY_RUN"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="simulate">
<xsd:annotation>
<xsd:documentation>
<p>
Changes are computed, but nothing is executed. E.g. preview changes is run for
objects and the computed deltas are stored to be processed later. E.g. simulate
how many changes will be processed during the reconciliation. After reconciliation
finished, proper action is taked to show results during simulation.
</p>
</xsd:documentation>
<xsd:appinfo>
<jaxb:typesafeEnumMember name="SIMULATE"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="execute">
<xsd:annotation>
<xsd:documentation>
<p>
Full execution mode. Cahnges are computed and also executed.
</p>
</xsd:documentation>
<xsd:appinfo>
<jaxb:typesafeEnumMember name="EXECUTE"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="SchedulerInformationType">
<xsd:annotation>
Expand Down
Expand Up @@ -25,6 +25,8 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitionDefinitionType;

import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -61,7 +63,7 @@ public StatisticsCollectionStrategy getStatisticsCollectionStrategy() {
}

@Override
public TaskRunResult run(Task task) {
public TaskRunResult run(Task task, TaskPartitionDefinitionType partition) {
LOGGER.trace("Task run starting");

OperationResult opResult = new OperationResult(CLASS_DOT+"run");
Expand Down
Expand Up @@ -90,7 +90,7 @@ public StatisticsCollectionStrategy getStatisticsCollectionStrategy() {
}

@Override
public TaskRunResult run(Task task) {
public TaskRunResult run(Task task, TaskPartitionDefinitionType partition) {
LOGGER.info("Task run starting");

OperationResult opResult = new OperationResult(CLASS_DOT+"run");
Expand Down
Expand Up @@ -35,6 +35,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemObjectsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitionDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -83,7 +84,7 @@ public StatisticsCollectionStrategy getStatisticsCollectionStrategy() {
}

@Override
public TaskRunResult run(Task task) {
public TaskRunResult run(Task task, TaskPartitionDefinitionType partition) {
LOGGER.trace("Task run starting");

OperationResult opResult = new OperationResult(CLASS_DOT+"run");
Expand Down
Expand Up @@ -97,4 +97,7 @@ void addToEvaluatedPolicyRuleTypes(Collection<EvaluatedPolicyRuleType> rules, Po

// use only if you know what you're doing
void addTrigger(@NotNull EvaluatedPolicyRuleTrigger<?> trigger);

//experimental
String getPolicyRuleIdentifier();
}
Expand Up @@ -42,6 +42,7 @@
import com.evolveum.midpoint.provisioning.api.ChangeNotificationDispatcher;
import com.evolveum.midpoint.provisioning.api.GenericConnectorException;
import com.evolveum.midpoint.provisioning.api.ResourceEventDescription;
import com.evolveum.midpoint.repo.api.PreconditionViolationException;
import com.evolveum.midpoint.repo.api.RepositoryService;
import com.evolveum.midpoint.repo.cache.RepositoryCache;
import com.evolveum.midpoint.schema.DeltaConvertor;
Expand Down Expand Up @@ -121,7 +122,7 @@ public <T extends ObjectType> List<PrismObject<T>> searchObjects(Class<T> type,
return modelService.searchObjects(type, query, options, task, parentResult);
}

public void notifyChange(ResourceObjectShadowChangeDescriptionType changeDescription, OperationResult parentResult, Task task) throws SchemaException, CommunicationException, ConfigurationException, SecurityViolationException, ObjectNotFoundException, GenericConnectorException, ObjectAlreadyExistsException, ExpressionEvaluationException{
public void notifyChange(ResourceObjectShadowChangeDescriptionType changeDescription, OperationResult parentResult, Task task) throws SchemaException, CommunicationException, ConfigurationException, SecurityViolationException, ObjectNotFoundException, GenericConnectorException, ObjectAlreadyExistsException, ExpressionEvaluationException, PolicyViolationException, PreconditionViolationException{

String oldShadowOid = changeDescription.getOldShadowOid();
ResourceEventDescription eventDescription = new ResourceEventDescription();
Expand Down
Expand Up @@ -23,6 +23,7 @@
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.repo.api.PreconditionViolationException;
import com.evolveum.midpoint.schema.DeltaConvertor;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
Expand Down Expand Up @@ -426,7 +427,7 @@ public TaskType notifyChange(ResourceObjectShadowChangeDescriptionType changeDes

try {
model.notifyChange(changeDescription, parentResult, task);
} catch (ObjectNotFoundException | SchemaException | CommunicationException | ConfigurationException | SecurityViolationException | ObjectAlreadyExistsException | ExpressionEvaluationException | RuntimeException | Error ex) {
} catch (ObjectNotFoundException | SchemaException | CommunicationException | ConfigurationException | SecurityViolationException | ObjectAlreadyExistsException | ExpressionEvaluationException | RuntimeException | Error | PolicyViolationException | PreconditionViolationException ex) {
LoggingUtils.logException(LOGGER, "# MODEL notifyChange() failed", ex);
auditLogout(task);
throwFault(ex, parentResult);
Expand Down
Expand Up @@ -35,6 +35,8 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.CleanupPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemObjectsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitionDefinitionType;

import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -72,7 +74,7 @@ public StatisticsCollectionStrategy getStatisticsCollectionStrategy() {
}

@Override
public TaskRunResult run(Task task) {
public TaskRunResult run(Task task, TaskPartitionDefinitionType partition) {
LOGGER.trace("CleanUpTaskHandler.run starting");

OperationResult opResult = new OperationResult(OperationConstants.CLEANUP);
Expand Down
Expand Up @@ -36,6 +36,7 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitionDefinitionType;

/**
* Scanner that looks for pending operations in the shadows and updates the status.
Expand Down Expand Up @@ -95,7 +96,7 @@ protected void finish(AbstractScannerResultHandler<ShadowType> handler, TaskRunR
}

@Override
protected AbstractScannerResultHandler<ShadowType> createHandler(TaskRunResult runResult, final Task coordinatorTask,
protected AbstractScannerResultHandler<ShadowType> createHandler(TaskPartitionDefinitionType partition, TaskRunResult runResult, final Task coordinatorTask,
OperationResult opResult) {

AbstractScannerResultHandler<ShadowType> handler = new AbstractScannerResultHandler<ShadowType>(
Expand Down
Expand Up @@ -31,6 +31,7 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ModelExecuteOptionsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitionDefinitionType;
import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
Expand All @@ -57,7 +58,7 @@ public class ExecuteDeltasTaskHandler implements TaskHandler {
@Autowired private ModelService modelService;

@Override
public TaskRunResult run(Task task) {
public TaskRunResult run(Task task, TaskPartitionDefinitionType partition) {

OperationResult result = task.getResult().createSubresult(DOT_CLASS + "run");
TaskRunResult runResult = new TaskRunResult();
Expand Down
Expand Up @@ -35,6 +35,8 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LensContextType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitionDefinitionType;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -67,7 +69,7 @@ public class ModelOperationTaskHandler implements TaskHandler {
@Autowired private Clockwork clockwork;

@Override
public TaskRunResult run(Task task) {
public TaskRunResult run(Task task, TaskPartitionDefinitionType partition) {

OperationResult result = task.getResult().createSubresult(DOT_CLASS + "run");
TaskRunResult runResult = new TaskRunResult();
Expand Down
Expand Up @@ -64,6 +64,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.LayerType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskPartitionDefinitionType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

/**
Expand Down Expand Up @@ -174,19 +175,19 @@ public void launch(ResourceType resource, QName objectclass, Task task, Operatio
}

@Override
protected SynchronizeAccountResultHandler createHandler(TaskRunResult runResult, Task coordinatorTask,
protected SynchronizeAccountResultHandler createHandler(TaskPartitionDefinitionType partition, TaskRunResult runResult, Task coordinatorTask,
OperationResult opResult) {

ResourceType resource = resolveObjectRef(ResourceType.class, runResult, coordinatorTask, opResult);
if (resource == null) {
return null;
}

return createHandler(resource, null, runResult, coordinatorTask, opResult);
return createHandler(partition, resource, null, runResult, coordinatorTask, opResult);
}

// shadowToImport - it is used to derive objectClass/intent/kind when importing a single shadow
private SynchronizeAccountResultHandler createHandler(ResourceType resource, PrismObject<ShadowType> shadowToImport,
private SynchronizeAccountResultHandler createHandler(TaskPartitionDefinitionType partition, ResourceType resource, PrismObject<ShadowType> shadowToImport,
TaskRunResult runResult, Task coordinatorTask, OperationResult opResult) {

ObjectClassComplexTypeDefinition objectClass = determineObjectClassDefinition(resource, shadowToImport, runResult, coordinatorTask, opResult);
Expand All @@ -197,13 +198,13 @@ private SynchronizeAccountResultHandler createHandler(ResourceType resource, Pri
LOGGER.info("Start executing import from resource {}, importing object class {}", resource, objectClass.getTypeName());

SynchronizeAccountResultHandler handler = new SynchronizeAccountResultHandler(resource, objectClass, "import",
coordinatorTask, changeNotificationDispatcher, null, taskManager);
coordinatorTask, changeNotificationDispatcher, partition, taskManager);
handler.setSourceChannel(SchemaConstants.CHANGE_CHANNEL_IMPORT);
handler.setForceAdd(true);
handler.setStopOnError(false);
handler.setContextDesc("from "+resource);
handler.setLogObjectProgress(true);

return handler;
}

Expand Down Expand Up @@ -299,7 +300,7 @@ public boolean importSingleShadow(String shadowOid, Task task, OperationResult p

// Create a result handler just for one object. Invoke the handle() method manually.
TaskRunResult runResult = new TaskRunResult();
SynchronizeAccountResultHandler resultHandler = createHandler(resource.asObjectable(), shadow, runResult, task, parentResult);
SynchronizeAccountResultHandler resultHandler = createHandler(null, resource.asObjectable(), shadow, runResult, task, parentResult);
if (resultHandler == null) {
return false;
}
Expand Down

0 comments on commit 5c41060

Please sign in to comment.