From bafd2cb44f8d5ad0c47315c0c4d9923000dfade1 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Tue, 16 Aug 2022 11:18:49 -0400 Subject: [PATCH] Only relay fills if dialog still alive --- piker/clearing/_ems.py | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/piker/clearing/_ems.py b/piker/clearing/_ems.py index 0d8693f9..542b7c4d 100644 --- a/piker/clearing/_ems.py +++ b/piker/clearing/_ems.py @@ -249,12 +249,6 @@ async def clear_dark_triggers( await brokerd_orders_stream.send(brokerd_msg) - # mark this entry as having sent an order - # request. the entry will be replaced once the - # target broker replies back with - # a ``BrokerdOrderAck`` msg including the - # allocated unique ``BrokerdOrderAck.reqid`` key - # generated by the broker's own systems. # book._ems_entries[oid] = live_req # book._msgflows[oid].maps.insert(0, live_req) @@ -279,6 +273,12 @@ async def clear_dark_triggers( ) # update actives + # mark this entry as having sent an order + # request. the entry will be replaced once the + # target broker replies back with + # a ``BrokerdOrderAck`` msg including the + # allocated unique ``BrokerdOrderAck.reqid`` key + # generated by the broker's own systems. if cmd.action == 'alert': # don't register the alert status (so it won't # be reloaded by clients) since it's now @@ -666,7 +666,6 @@ async def translate_and_relay_brokerd_events( # cancelled by the ems controlling client before we # received this ack, in which case we relay that cancel # signal **asap** to the backend broker - # status = book._active.get(oid) status_msg = book._active[oid] req = status_msg.req if req and req.action == 'cancel': @@ -747,14 +746,11 @@ async def translate_and_relay_brokerd_events( if status == 'closed': log.info(f'Execution for {oid} is complete!') - - # only if we already rxed a fill then probably - # this clear is fully complete? (frickin ib..) - if old_resp == 'fill': - status_msg = book._active.pop(oid) + status_msg = book._active.pop(oid) elif status == 'canceled': log.cancel(f'Cancellation for {oid} is complete!') + status_msg = book._active.pop(oid) else: # open # relayed from backend but probably not handled so @@ -775,18 +771,15 @@ async def translate_and_relay_brokerd_events( ems_client_order_stream = router.dialogues[oid] - # wtf a fill can come after 'closed' from ib? - status_msg = book._active[oid] - - # only if we already rxed a 'closed' - # this clear is fully complete? (frickin ib..) - # if status_msg.resp == 'closed': - # status_msg = book._active.pop(oid) - - status_msg.resp = 'fill' - status_msg.reqid = reqid - status_msg.brokerd_msg = msg - await ems_client_order_stream.send(status_msg) + # XXX: bleh, a fill can come after 'closed' from `ib`? + # only send a late fill event we haven't already closed + # out the dialog status locally. + status_msg = book._active.get(oid) + if status_msg: + status_msg.resp = 'fill' + status_msg.reqid = reqid + status_msg.brokerd_msg = msg + await ems_client_order_stream.send(status_msg) # ``Status`` containing an embedded order msg which # should be loaded as a "pre-existing open order" from the