Github user cherrot commented on the pull request:
https://github.com/apache/thrift/pull/945#issuecomment-198018473
> happybase does not seem to bother with transport state at all; by isOpen
it only avoids "already opened" exceptions.
As what I described in [happybase
issue#112](https://github.com/wbolster/happybase/issues/112), happybase use
`isOpen` (after all there is not other method to do so) to check if it need to
reopen the connection in its connection pool implementation. (See
[pool.py](https://github.com/wbolster/happybase/blob/9cbd718c10a3089f234f1eac1236b631e1f8e7cd/happybase/pool.py#L135-L138)
and
[connection.py](https://github.com/wbolster/happybase/blob/9cbd718c10a3089f234f1eac1236b631e1f8e7cd/happybase/connection.py#L164-L170)).
However in this use case, `isOpen` always returns True.
Consider the following case: suppose Thrift server would drop a connection
which was idle for 2min, and the client side communicates with Thrift server
every 1 to 5min. With the current implementation the client side would
encounter extremely frequent network failures.
> Note that almighty "this connection is fine" guarantee is very costly:
even the current patch does not cover cases like invalidated file descriptor
(i.e. closed socket) and half closed non-writable sockets.
Compared with the former case, this patch is quite efficient (no underlying
network communication, no blocking).
And I don't think it breaks the KISS rule. At least you don't need to put
your failover code everywhere.
Of course we cannot cover all the circumstances of a connection's possible
state, but we can try our best to give a probably healthy connection for the
moment. For other circumstances, it depends on the user's decision (to let it
die or have a retry logic).
After all, what this patch do is providing a convenient way to test the
connection. It never forces developers to use this in their application or libs.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---