-
Notifications
You must be signed in to change notification settings - Fork 177
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
Threads hang on put in closed/closing/opening #638
Comments
Unfortunately, truncating the table deletes and recreates the table, which would explain the NOT_FOUND behavior. We don't currently have a safe way to clean a table. |
The "java.lang.IllegalStateException: Channel is closed" indicates that you likely called connection.close() somewhere and then did further operations. We don't support that. |
You're right about the fact that we shouldn't be hanging in this situation. Is there any way you can provide a test case to reproduce this? It would help a lot to have that so we can make sure we can fix this case. |
The algorithm is simple: put into non-existing table |
Hm. We should just throw an illegal state exception. I'll add that. I'll also add a test. |
If a connection is closed, async executor will throw an exception, but only after it registered in the HeapSizeManager; the operation doesn't unregister in that case. That leads to the client hanging forever. Returning a future that immediately fails solves this problem. The failure informs the FutureCallable from the HeapSizeManager that an error occured and that the operation can be marked as complete. This fixes a problem a user found in googleapis#638.
If a connection is closed, async executor will throw an exception, but only after it registered in the HeapSizeManager; the operation doesn't unregister in that case. That leads to the client hanging forever. Returning a future that immediately fails solves this problem. The failure informs the FutureCallable from the HeapSizeManager that an error occured and that the operation can be marked as complete. This fixes a problem a user found in googleapis#638.
If a connection is closed, async executor will throw an exception, but only after it registered in the HeapSizeManager; the operation doesn't unregister in that case. That leads to the client hanging forever. Returning a future that immediately fails solves this problem. The failure informs the FutureCallable from the HeapSizeManager that an error occured and that the operation can be marked as complete. This fixes a problem a user found in googleapis#638.
If a connection is closed, async executor will throw an exception, but only after it registered in the HeapSizeManager; the operation doesn't unregister in that case. That leads to the client hanging forever. Returning a future that immediately fails solves this problem. The failure informs the FutureCallable from the HeapSizeManager that an error occured and that the operation can be marked as complete. This fixes a problem a user found in googleapis#638.
If a connection is closed, async executor will throw an exception, but only after it registered in the HeapSizeManager; the operation doesn't unregister in that case. That leads to the client hanging forever. Returning a future that immediately fails solves this problem. The failure informs the FutureCallable from the HeapSizeManager that an error occured and that the operation can be marked as complete. This fixes a problem a user found in googleapis#638.
If a connection is closed, async executor will throw an exception, but only after it registered in the HeapSizeManager; the operation doesn't unregister in that case. That leads to the client hanging forever. Returning a future that immediately fails solves this problem. The failure informs the FutureCallable from the HeapSizeManager that an error occured and that the operation can be marked as complete. This fixes a problem a user found in googleapis#638.
I merged the last week. I'll close this issue. If this is still a problem, please let me know. |
I have 3 threads stuck with the same stack trace.
Version is 0.2.2
I launched process inserting data into 1 table over 1 connection with 6 threads.
Right after that I truncated table with hbase shell.
I saw in log complains that table is not found.
After one thread got RetriesExhaustedWithDetailsException it reopened the connection.
Rest threads access to closed/closing/opening connection. Maybe this was not good idea to do so,
but I think that threads shouldn't hang forever.
Stacktrace of hanging threads:
The text was updated successfully, but these errors were encountered: