libfuse / pyfuse3

Python 3 bindings for libfuse 3 with asynchronous API (Trio compatible)
https://pyfuse3.readthedocs.io/
Other
166 stars 48 forks source link

Handler exceptions silently vanish in asyncio #93

Open renyuneyun opened 11 months ago

renyuneyun commented 11 months ago

I'm new to pyfuse3, and am learning it. When using trio, if a handler function (e.g. readdir()) throws an exception, the exception is raised globally, and the app crashes. To me, this is an expected behaviour. However, when using asyncio, the exception vanishes -- nothing is printed in the terminal. This is unexpected.

Is there an argument / option that controls this behaviour? How can I make the exception visible to me during development at least?

I saw #82, but am not sure if that is talking about the same topic. In particular, I would agree that an exception should not crash the app (configurable through argument), but should be visible. Silently snoozing it is not a good idea.

ThomasWaldmann commented 11 months ago

86 is what we ended up with, based on a branch created by @Nikratio .

renyuneyun commented 11 months ago

Thanks for the response @ThomasWaldmann . However, as I'm not familiar with Cython, I'm not sure what that change implies? In particular, is it the reason for different behaviours when using asyncio and trio?

ThomasWaldmann commented 11 months ago

No idea about the different behaviour.

Nikratio commented 11 months ago

The changes above should not affect trio vs asyncio.

I believe the reason for the different behavior is the implementation of _Nursery.__aexit__ in pyfuse3_asyncio.py. Patches welcome :-).

Nikratio commented 11 months ago

..but I am not an asyncio user, so it's also possible that the reason lies within asyncio itself.