Repository navigation
Conversation
|
I want to be sure that issue reason is identified correctly, thus questions:
What connection is broken - "user -> host1" or "host1 -> host2" ?
Where indefinite waits happens ? Call stack, please |
Host1 -> host2.
In the Call stack |
So, what connection was terminated ? You wrote:
but this is definitely not "host1 -> host2"
The line numbers in inet.cpp have nothing common with master branch. If connection on the host1 is terminating, there is no reason for it to not get answer from connection to the host2. All of this is very confusing... |
|
Connection user->host1 is killed, as a result |
Perhaps this is because |
|
This confirms that the patch is not enough to fix the actual reason of the issue. |
|
If the hang comes from |
Fix server hang on request over an already-broken external connection
Problem
Consider two hosts. Host 1 executes an external request to host 2, and while that request is in progress the connection to host 2 (from host 1) is terminated, e.g. via
DELETE FROM MON$ATTACHMENTS. If host 1 then tries to send any further packet to host 2 (for example, onCOMMITorROLLBACK), the DBMS hangs.Cause
By the time the packet is sent, the connection to host 2 has already been broken. The server still sends the request to the socket and then waits indefinitely for a response.
Reproduction
Run the following on host 1 (and, while it is running, delete the corresponding attachment via
MON$ATTACHMENTS):