-
Notifications
You must be signed in to change notification settings - Fork 274
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
callee session killed when caller session lost in flight #2103
Comments
From your description, I'm not sure what exactly is happening, I'm not even convinced the issue is in CB - it might very well be within ABJS, eg: CB correctly handling the messaging between Caller/Router/Callee in a situation when an in-flight invocation which is still in-progress Callee-side is signaled (correctly by CB) that the original Caller is now dead, and the (still in-progress) invocation is NOT needed anymore (by the router to forward to the now dead original caller). Well, and ABJS then not correctly dealing with the error returned from CB.
|
Rgd the CB side of things, what is also crucial for tracking down such situations: are you using a single CB node, or are you using Router-to-Router links and multiple CB nodes? Essentially, the complete WAMP clients (caller and callee) and WAMP routing (node or rlink with nodes) topology. The latter obviously makes things an order more complex on the WAMP routing side (assuming now that the problem is indeed CB, single or multi-node, and not WAMP client side in ABJS ...) |
Yes, could also be ABJS related. I'm using crossbar single node attached to a master node. No router-to-router links. I extracted some log messages from the node that I associate with the observation:
(probably not very helpful) will see if I can make a python example... |
thanks! but unfortunately, the logs do not reveal enough. what is happening immediately before this line? what messages are received/sent by CB on each of the 2 involved sessions, in particular on session you could bump up CB log level, you can bump it up to the point where it will log each and every single WAMP message. the trick is to reproduce the problem with minimal messages/sessions attached .. otherwise the log volume will pretty much swamp you and finding the needle in the haystack and only just "read" the messages and understand what's going on becomes a challenge;) |
That first line in the log really is the first line. i.e. any log output before is not related to this issue here, because I trigger the client A disconnect at that time. Properly Isolating the issue will take some time... |
yes, it is;) if you upload the logs somewhere for me to download, I can have a look. first thing to identify within the logs is the line CB logs when it recognizes the Caller session (the one named "A" in your example) is gone .. and then look subsequently for any hints it does recognize that there still was an ongoing Call ... which did not yet return from the Callee ... and then what happens at this point? further, what log lines can be observed once the Invocation finally comes back from the Callee, and CB recognizes that the session it wants to forward the result back is no longer there?
yeah, it can be tricky to figure out what exactly happens. it is an async distributed system with 3 participants. luckily, you don't have to deal with rlinks and router-to-router;) |
@markope in order to isolate the issue, can you try without proxies (single "type": "router" worker only, no "type": "proxy" workers). But I doubt it is the proxy. With JS clients it is usually easy to debug looking at the WS frames in browser's developer tools/network tab. It is peculiar that
|
I have a crossbar session from client A (browser) and a session from client B (server) both with autobahn-js.
client B has registered an async function
myfunc
which has about 1 sec runtime.I call
myfunc
on client B from client AI don't await the result in client A and immediately kill the session in client A (by navigating the browser window
location = 'https...'
)Then client B session is killed completely (reason: null) and an internal error is raised (
on_internal_error
)The destruction of the session is unexpected and unwanted because this affects all other clients as well that want to use registered functions of B.
Instead client B should throw an error which should be caught and handled in the
on_internal_error
function that is configured in the connection configuration.The text was updated successfully, but these errors were encountered: