Skip to content

Regression: Connection fails re-opening connections in 1.0.0? #133

Closed
@gorlins

Description

@gorlins

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions