From e50ba3e8a6e844081f719343d24f03a9724aaae9 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Sun, 10 Aug 2025 14:56:09 -0400 Subject: [PATCH] Toss in some breakpointed collapsers to catch eg Such that when that strange (now marked xfail) case from 6348c83 shows we can attempt to REPL it. Thus far this has led to zero insight as to why the fail-after is not raising a `TooSlowError` and instead the eg with embedded assert-error, but likely mucking with the `trio.NurseryManager.__aexit__()` (prolly by overriding it unfortunately..) will get us somewhere?? --- tractor/_supervise.py | 48 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/tractor/_supervise.py b/tractor/_supervise.py index c0b3d543..3983d32e 100644 --- a/tractor/_supervise.py +++ b/tractor/_supervise.py @@ -468,7 +468,11 @@ async def _open_and_supervise_one_cancels_all_nursery( # errors from this daemon actor nursery bubble up to caller async with ( - collapse_eg(), + # collapse_eg(), + collapse_eg( + bp=True, + hide_tb=False, + ), trio.open_nursery() as da_nursery, ): try: @@ -481,7 +485,11 @@ async def _open_and_supervise_one_cancels_all_nursery( # As such if the strategy propagates any error(s) upwards # the above "daemon actor" nursery will be notified. async with ( - collapse_eg(), + # collapse_eg(), + collapse_eg( + bp=True, + hide_tb=False, + ), trio.open_nursery() as ria_nursery, ): an = ActorNursery( @@ -621,11 +629,17 @@ async def _open_and_supervise_one_cancels_all_nursery( # use `BaseExceptionGroup` as needed if len(errors) > 1: - raise BaseExceptionGroup( + beg = BaseExceptionGroup( 'tractor.ActorNursery errored with', tuple(errors.values()), ) + beg.add_note( + 'This beg was created from an actor-nursery!\n' + ) + await debug.pause(shield=True) + raise beg else: + # await debug.pause(shield=True) raise list(errors.values())[0] # show frame on any (likely) internal error @@ -683,16 +697,30 @@ async def open_nursery( # mark us for teardown on exit implicit_runtime: bool = True - async with open_root_actor( - hide_tb=hide_tb, - **kwargs, - ) as actor: + async with ( + # collapse_eg(), + collapse_eg( + bp=True, + hide_tb=False, + ), + open_root_actor( + hide_tb=hide_tb, + **kwargs, + ) as actor + ): assert actor is current_actor() try: - async with _open_and_supervise_one_cancels_all_nursery( - actor - ) as an: + async with ( + # collapse_eg(), + collapse_eg( + bp=True, + hide_tb=False, + ), + _open_and_supervise_one_cancels_all_nursery( + actor + ) as an, + ): # NOTE: mark this nursery as having # implicitly started the root actor so