Report any external-rent-task-canceller during msg-drain
As in whenever `Context.cancel()` is not (runtime internally) called (i.e. `._cancel_called` is not set), we can attempt to detect the parent `trio` nursery/cancel-scope that is the source. Emit the report with a `.cancel()` level and attempt to repr in "sclang" form as well as unhide the stack frame for debug/traceback-in.aio_abandons
parent
59f4024242
commit
5c2e972315
|
@ -590,15 +590,36 @@ async def drain_to_final_msg(
|
||||||
# SHOULD NOT raise that far end error,
|
# SHOULD NOT raise that far end error,
|
||||||
# 2. WE DID NOT REQUEST that cancel and thus
|
# 2. WE DID NOT REQUEST that cancel and thus
|
||||||
# SHOULD RAISE HERE!
|
# SHOULD RAISE HERE!
|
||||||
except trio.Cancelled as taskc:
|
except trio.Cancelled as _taskc:
|
||||||
|
taskc: trio.Cancelled = _taskc
|
||||||
|
|
||||||
|
# report when the cancellation wasn't (ostensibly) due to
|
||||||
|
# RPC operation, some surrounding parent cancel-scope.
|
||||||
|
if not ctx._scope.cancel_called:
|
||||||
|
task: trio.lowlevel.Task = trio.lowlevel.current_task()
|
||||||
|
rent_n: trio.Nursery = task.parent_nursery
|
||||||
|
if (
|
||||||
|
(local_cs := rent_n.cancel_scope).cancel_called
|
||||||
|
):
|
||||||
|
log.cancel(
|
||||||
|
'RPC-ctx cancelled by local-parent scope during drain!\n\n'
|
||||||
|
f'c}}>\n'
|
||||||
|
f' |_{rent_n}\n'
|
||||||
|
f' |_.cancel_scope = {local_cs}\n'
|
||||||
|
f' |_>c}}\n'
|
||||||
|
f' |_{ctx.pformat(indent=" "*9)}'
|
||||||
|
# ^TODO, some (other) simpler repr here?
|
||||||
|
)
|
||||||
|
__tracebackhide__: bool = False
|
||||||
|
|
||||||
# CASE 2: mask the local cancelled-error(s)
|
# CASE 2: mask the local cancelled-error(s)
|
||||||
# only when we are sure the remote error is
|
# only when we are sure the remote error is
|
||||||
# the source cause of this local task's
|
# the source cause of this local task's
|
||||||
# cancellation.
|
# cancellation.
|
||||||
ctx.maybe_raise(
|
ctx.maybe_raise(
|
||||||
hide_tb=hide_tb,
|
hide_tb=hide_tb,
|
||||||
# TODO: when use this?
|
from_src_exc=taskc,
|
||||||
# from_src_exc=taskc,
|
# ?TODO? when *should* we use this?
|
||||||
)
|
)
|
||||||
|
|
||||||
# CASE 1: we DID request the cancel we simply
|
# CASE 1: we DID request the cancel we simply
|
||||||
|
|
Loading…
Reference in New Issue