Subject exception canceling events
Author Hamish Moffatt
Hi,

I'm trying to run a continuous loop waiting for events to be emitted
from Firebird and acting on them.

However I'm occasionally getting an exception:

Traceback (most recent call last):
  File "/srv/blah/report_results.py", line 81, in <module>
    loop_on_events(('result_changed',), handler)
  File "/srv/blah/servicesapi/sessiondb.py", line 27, in loop_on_events
    handler()
  File "/srv/blah/venv/lib/python2.7/site-packages/fdb/fbcore.py", line
2031, in __exit__
    self.close()
  File "/srv/blah/venv/lib/python2.7/site-packages/fdb/fbcore.py", line
2109, in close
    block.close()
  File "/srv/blah/venv/lib/python2.7/site-packages/fdb/fbcore.py", line
1975, in close
    "Error while canceling events:")
fdb.fbcore.DatabaseError: ('Error while canceling events:\n- SQLCODE:
-901\n- invalid events id (handle)', -901, 335545021)


My code is simply:

def loop_on_events(events, handler):
    conn = session_db.engine.connect() # using SQLAlchemy,
conn.connection is the raw fdb handle

    while True:
        with conn.connection.event_conduit(events) as conduit:
            actual = conduit.wait(timeout=1)
            for e in events:
                if actual.get(e, 0) > 0:
                    current_app.logger.debug('Got event')
                    handler()


loop_on_events(('result_changed',), handler)


This should just run the handler() (which does other DB operations)
every time the event is triggered.

Is this structure wrong?



thanks

Hamish