Skip to content

Commit

Permalink
[DROOLS-7571] SessionStats eventsMatched isn't correctly calculated i…
Browse files Browse the repository at this point in the history
…n case of match_multiple_rules
  • Loading branch information
tkobayas committed Oct 6, 2023
1 parent 13cbe8b commit cc20e19
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class RegisterOnlyAgendaFilter implements AgendaFilter {

private final Set<Match> matchedRules = new LinkedHashSet<>();

private final Set<FactHandle> eventsToBeDeleted = Collections.newSetFromMap(new IdentityHashMap<>());
private final Set<FactHandle> matchedEvents = Collections.newSetFromMap(new IdentityHashMap<>());

public RegisterOnlyAgendaFilter(RulesExecutorSession rulesExecutorSession) {
this.rulesExecutorSession = rulesExecutorSession;
Expand All @@ -55,23 +55,23 @@ public boolean accept(Match match) {
matchedRules.add( matchTransformers.getOrDefault(metadata.get(RULE_TYPE_TAG), Function.identity()).apply(match) );
}

if (!rulesExecutorSession.isMatchMultipleRules()) {
for (InternalFactHandle fh : fhs) {
if (fh.isEvent()) {
eventsToBeDeleted.add(fh);
}
for (InternalFactHandle fh : fhs) {
if (fh.isEvent()) {
matchedEvents.add(fh);
}
}

return validMatch;
}

public List<Match> finalizeAndGetResults(boolean event) {
rulesExecutorSession.registerMatchedEvents(eventsToBeDeleted);
for (FactHandle toBeDeleted : eventsToBeDeleted) {
rulesExecutorSession.delete(toBeDeleted);
rulesExecutorSession.registerMatchedEvents(matchedEvents);
if (!rulesExecutorSession.isMatchMultipleRules()) {
for (FactHandle toBeDeleted : matchedEvents) {
rulesExecutorSession.delete(toBeDeleted);
}
}
eventsToBeDeleted.clear();
matchedEvents.clear();

List<Match> matches = new ArrayList<>( matchedRules );
matchedRules.clear();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,14 @@

package org.drools.ansible.rulebook.integration.api;

import org.drools.ansible.rulebook.integration.api.rulesengine.SessionStats;
import org.junit.Test;
import org.kie.api.runtime.rule.Match;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;

public class MultipleRuleMatchTest {

Expand Down Expand Up @@ -126,6 +128,12 @@ public void processEventsWithMatchMultipleRules_shouldMatchMultipleRules() {
assertThat(matchedRules).hasSize(2);
assertThat(matchedRules.stream().map(m -> m.getRule().getName())).contains("R1", "R2");

SessionStats stats = rulesExecutor.getSessionStats();
assertEquals(2, stats.getRulesTriggered());
assertEquals(1, stats.getEventsProcessed());
assertEquals(1, stats.getEventsMatched());
assertEquals(0, stats.getEventsSuppressed());

rulesExecutor.dispose();
}

Expand Down

0 comments on commit cc20e19

Please sign in to comment.