aws / event-ruler

Event Ruler is a Java library that allows matching many thousands of Events per second to any number of expressive and sophisticated rules.
Apache License 2.0
556 stars 58 forks source link

Fixing bug where sub-rule would not be considered new if its keys and… #140

Closed jonessha closed 5 months ago

jonessha commented 6 months ago

… patterns were contained in its sibling sub-rules, even if no sibling contained all of the keys and patterns by itself.

Description of changes:

Fixing bug where sub-rule would not be considered new if its keys and patterns were contained in its sibling sub-rules, even if no sibling contained all of the keys and patterns by itself. This would result in that sub-rule not being matchable. To avoid adversely affecting performance, this required adding a mapping of sub-rule name to IDs in SubRuleContext.Generator. While doing this, I also moved the mapping of sub-rule ID to name out of NameState and into SubRuleContext.Generator. For most cases, this will be a net memory improvement (despite the additional mapping), as there is a single SubRuleContext.Generator at the Machine level, where as there are many NameStates at the Machine level, so the ID to name mapping would be stored redundantly many times.

Benchmark / Performance (for source code changes):

EXACT events/sec: 207871.2
WILDCARD events/sec: 153728.7
PREFIX events/sec: 204479.8
PREFIX_EQUALS_IGNORE_CASE_RULES events/sec: 205465.8
SUFFIX events/sec: 200818.1
SUFFIX_EQUALS_IGNORE_CASE_RULES events/sec: 203503.3
EQUALS_IGNORE_CASE events/sec: 179652.6
NUMERIC events/sec: 119768.4
ANYTHING-BUT events/sec: 126150.4
ANYTHING-BUT-IGNORE-CASE events/sec: 122102.0
ANYTHING-BUT-PREFIX events/sec: 133167.5
ANYTHING-BUT-SUFFIX events/sec: 131038.1
COMPLEX_ARRAYS events/sec: 26159.4
PARTIAL_COMBO events/sec: 49355.6
COMBO events/sec: 16895.4

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.