Skip to content
This repository was archived by the owner on Dec 8, 2023. It is now read-only.
This repository was archived by the owner on Dec 8, 2023. It is now read-only.

Instrumentor breaks psycopg2 #33

@vslavik

Description

@vslavik

Using Python 3.4 and psycopg2 2.6.1, my application is getting exceptions pretty clearly related to proxy types used by the instrumentor:

TypeError: argument 2 must be a connection, cursor or None
  File "celery/app/trace.py", line 240, in trace_task
    R = retval = fun(*args, **kwargs)
  File "CENSORED/__init__.py", line 77, in __call__
    return TaskBase.__call__(self, *args, **kwargs)
  File "celery/app/trace.py", line 438, in __protected_call__
    return self.run(*args, **kwargs)
  File "CENSORED/foo.py", line 238, in a_celery_task_function
    db.session.commit()
  File "sqlalchemy/orm/scoping.py", line 150, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "sqlalchemy/orm/session.py", line 790, in commit
    self.transaction.commit()
  File "sqlalchemy/orm/session.py", line 392, in commit
    self._prepare_impl()
  File "sqlalchemy/orm/session.py", line 372, in _prepare_impl
    self.session.flush()
  File "sqlalchemy/orm/session.py", line 2004, in flush
    self._flush(objects)
  File "sqlalchemy/orm/session.py", line 2122, in _flush
    transaction.rollback(_capture_exception=True)
  File "sqlalchemy/util/langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "sqlalchemy/util/compat.py", line 182, in reraise
    raise value
  File "sqlalchemy/orm/session.py", line 2086, in _flush
    flush_context.execute()
  File "sqlalchemy/orm/unitofwork.py", line 373, in execute
    rec.execute(self)
  File "sqlalchemy/orm/unitofwork.py", line 532, in execute
    uow
  File "sqlalchemy/orm/persistence.py", line 149, in save_obj
    base_mapper, states, uowtransaction
  File "sqlalchemy/orm/persistence.py", line 270, in _organize_states_for_save
    states):
  File "sqlalchemy/orm/persistence.py", line 1032, in _connections_for_states
    connection = uowtransaction.transaction.connection(base_mapper)
  File "sqlalchemy/orm/session.py", line 232, in connection
    return self._connection_for_bind(bind, execution_options)
  File "sqlalchemy/orm/session.py", line 323, in _connection_for_bind
    conn = self._parent._connection_for_bind(bind, execution_options)
  File "sqlalchemy/orm/session.py", line 334, in _connection_for_bind
    conn = bind.contextual_connect()
  File "sqlalchemy/engine/base.py", line 2039, in contextual_connect
    self._wrap_pool_connect(self.pool.connect, None),
  File "sqlalchemy/engine/base.py", line 2074, in _wrap_pool_connect
    return fn()
  File "sqlalchemy/pool.py", line 376, in connect
    return _ConnectionFairy._checkout(self)
  File "sqlalchemy/pool.py", line 713, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "sqlalchemy/pool.py", line 480, in checkout
    rec = pool._do_get()
  File "sqlalchemy/pool.py", line 1060, in _do_get
    self._dec_overflow()
  File "sqlalchemy/util/langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "sqlalchemy/util/compat.py", line 182, in reraise
    raise value
  File "sqlalchemy/pool.py", line 1057, in _do_get
    return self._create_connection()
  File "sqlalchemy/pool.py", line 323, in _create_connection
    return _ConnectionRecord(self)
  File "sqlalchemy/pool.py", line 455, in __init__
    pool.dispatch.connect(self.connection, self)
  File "sqlalchemy/event/attr.py", line 256, in __call__
    fn(*args, **kw)
  File "sqlalchemy/engine/strategies.py", line 156, in on_connect
    do_on_connect(conn)
  File "sqlalchemy/dialects/postgresql/psycopg2.py", line 668, in on_connect
    fn(conn)
  File "sqlalchemy/dialects/postgresql/psycopg2.py", line 632, in on_connect
    extras.register_uuid(None, conn)
  File "psycopg2/extras.py", line 487, in register_uuid
    _ext.register_type(_ext.UUID, conn_or_curs)

They don't happen w/o Librato instrumentor enabled.

Details of relevant packages used:

amqp==1.4.6
anyjson==0.3.3
billiard==3.3.0.20
blinker==1.4
celery==3.1.18
Flask==0.10.1
Flask-SQLAlchemy==2.0
gevent==1.1b3
greenlet==0.4.9
itsdangerous==0.24
Jinja2==2.8
kombu==3.0.26
librato-metrics==0.8.6
MarkupSafe==0.23
psycopg2==2.6.1
pytz==2015.4
raven==5.7.2
redis==2.10.3
requests==2.7.0
six==1.10.0
SQLAlchemy==1.0.8
statsd==3.2.1
Werkzeug==0.10.4
-e git+git://github.com/librato/librato-python-web.git@6a2f927c39e5eb30e3a2a0d45670adfa4aa8fa44#egg=librato-python-web

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