Closed
Description
I believe that ConnectionPool doesn't play nice with 1.0, and can yield broken connections even in the best case scenarios. Here's my reproducing code:
import happybase
from happybase.pool import ConnectionPool, TException, socket
import thriftpy
for mod in [happybase, thriftpy]:
print mod.__name__, mod.__version__
kwargs = load_connection_kwargs()
print kwargs
pool = ConnectionPool(1, **kwargs)
for i in range(10):
print 'Loop', i,
try:
with pool.connection() as conn:
print 'opened', # Ensure yield succeeds
conn.tables()
conn.close() # Or any random failure/timeout etc
except (TException, socket.error) as e:
print 'failed', e
else:
print 'succeeded'
Works for 0.9:
happybase 0.9
thriftpy 0.3.8
{u'host': 'XXXX', 'protocol': 'binary', 'transport': 'framed'}
Loop 0 opened succeeded
Loop 1 opened succeeded
Loop 2 opened succeeded
Loop 3 opened succeeded
Loop 4 opened succeeded
Loop 5 opened succeeded
Loop 6 opened succeeded
Loop 7 opened succeeded
Loop 8 opened succeeded
Loop 9 opened succeeded
But not 1.0.0:
happybase 1.0.0
thriftpy 0.3.8
{u'host': 'XXXX', 'protocol': 'binary', 'transport': 'framed'}
Loop 0 opened succeeded
Loop 1 opened failed [Errno 9] Bad file descriptor
Loop 2 opened succeeded
Loop 3 opened failed [Errno 9] Bad file descriptor
Loop 4 opened succeeded
Loop 5 opened failed [Errno 9] Bad file descriptor
Loop 6 opened succeeded
Loop 7 opened failed [Errno 9] Bad file descriptor
Loop 8 opened succeeded
Loop 9 opened failed [Errno 9] Bad file descriptor
Given that ConnectionPool.connection()
calls open()
before yielding in both versions, I can't immediately see what causes this. I am using CDH 5.7 w/ hbase 1.2.0-cdh5.7.1.
Metadata
Metadata
Assignees
Labels
No labels