libfuse / pyfuse3

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

Handler exceptions silently vanish in asyncio #93

Open renyuneyun opened 1 year ago

renyuneyun commented 1 year 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 1 year ago

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

renyuneyun commented 1 year 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 1 year ago

No idea about the different behaviour.

Nikratio commented 1 year 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 1 year ago

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