Skip to content

Commit

Permalink
Separate simulation and execution rule counters
Browse files Browse the repository at this point in the history
For composite activities with shared policy rule counters (like
reconciliation) we need to keep counters for simulation
and execution modes separate, to avoid their interference.
  • Loading branch information
mederly committed Aug 25, 2021
1 parent 0a89ab6 commit c853833
Show file tree
Hide file tree
Showing 8 changed files with 275 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7059,10 +7059,17 @@
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="policyRules" type="tns:ActivityCounterGroupType" minOccurs="0">
<xsd:element name="simulationModePolicyRules" type="tns:ActivityCounterGroupType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Counters for policy rules.
Counters for policy rules in simulation mode.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="executionModePolicyRules" type="tns:ActivityCounterGroupType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Counters for policy rules in execution mode.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,16 @@
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType;

import com.evolveum.midpoint.xml.ns._public.common.common_3.ExecutionModeType;

import org.springframework.stereotype.Component;

import javax.xml.datatype.XMLGregorianCalendar;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

import static com.evolveum.midpoint.task.api.ExecutionSupport.CountersGroup.POLICY_RULES;
import static com.evolveum.midpoint.task.api.ExecutionSupport.CountersGroup.*;

/**
* Updates counters for policy rules, with the goal of determining if rules' thresholds have been reached.
Expand Down Expand Up @@ -91,8 +93,12 @@ public <AH extends AssignmentHolderType> void updateCounters(LensContext<AH> con
Map<String, EvaluatedPolicyRule> rulesByIdentifier = rulesToIncrement.stream()
.collect(Collectors.toMap(EvaluatedPolicyRule::getPolicyRuleIdentifier, Function.identity()));

ExecutionSupport.CountersGroup group =
executionSupport.getExecutionMode() == ExecutionModeType.EXECUTE ?
EXECUTION_MODE_POLICY_RULES : SIMULATION_MODE_POLICY_RULES;

Map<String, Integer> currentValues =
executionSupport.incrementCounters(POLICY_RULES, rulesByIdentifier.keySet(), result);
executionSupport.incrementCounters(group, rulesByIdentifier.keySet(), result);

currentValues.forEach((id, value) -> {
rulesByIdentifier.get(id).setCount(value);
Expand Down

0 comments on commit c853833

Please sign in to comment.