jruizgit / rules

Durable Rules Engine
MIT License
1.14k stars 209 forks source link

MessageObservedException appears while there aren't any duplicates #376

Open marax27 opened 3 years ago

marax27 commented 3 years ago

Hi. First of all: thanks for this library. I successfully implemented a couple small things. However, it seems that as the number of asserted facts increases, a MessageObservedException start showing up unexpectedly.

Minimal example:

from durable.lang import *

with ruleset('test'):
    @when_all(+m.integer)
    def handle_new_fact(c):
        pass

for n in range(100000):
    assert_fact('test', {'integer': n})

The error:

Traceback (most recent call last):
  File "run.py", line 12, in <module>
    assert_fact('test', f)
  File "C:\Users\kacper\.virtualenvs\fc-env-x_QF5ci4\lib\site-packages\durable\lang.py", line 676, in assert_fact       
    return get_host().assert_fact(ruleset_name, fact, complete)
  File "C:\Users\kacper\.virtualenvs\fc-env-x_QF5ci4\lib\site-packages\durable\engine.py", line 817, in assert_fact     
    return self._handle_function(rules, rules.assert_fact, fact, complete)
  File "C:\Users\kacper\.virtualenvs\fc-env-x_QF5ci4\lib\site-packages\durable\engine.py", line 790, in _handle_function
    rules.do_actions(func(args), callback)
  File "C:\Users\kacper\.virtualenvs\fc-env-x_QF5ci4\lib\site-packages\durable\engine.py", line 343, in assert_fact     
    return self._handle_result(durable_rules_engine.assert_fact(self._handle, json.dumps(fact, ensure_ascii=False)), fact)
  File "C:\Users\kacper\.virtualenvs\fc-env-x_QF5ci4\lib\site-packages\durable\engine.py", line 330, in _handle_result  
    raise MessageObservedException(message)
durable.engine.MessageObservedException: {'integer': 46010}

System information: