From 11bda596116de72f829ed61dd1261d475afead2a Mon Sep 17 00:00:00 2001 From: Neil Williams Date: Sun, 16 Dec 2012 18:24:38 -0800 Subject: [PATCH] Set PostgreSQL application_name metadata. This should allow us to collect more information on where lingering transactions come from. Note: this uses an undocumented feature of psycopg2 connection strings to get around a limitation in the version of psycopg2 we're on. This is resolved as of v2.4.3 of psycopg2. http://archives.postgresql.org/psycopg/2011-11/msg00020.php --- r2/r2/lib/manager/db_manager.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/r2/r2/lib/manager/db_manager.py b/r2/r2/lib/manager/db_manager.py index 937c0bb34..a1ca02ceb 100644 --- a/r2/r2/lib/manager/db_manager.py +++ b/r2/r2/lib/manager/db_manager.py @@ -21,7 +21,9 @@ ############################################################################### import logging +import os import random +import socket import sqlalchemy import time import traceback @@ -29,23 +31,27 @@ import traceback logger = logging.getLogger('dm_manager') logger.addHandler(logging.StreamHandler()) +APPLICATION_NAME = "reddit@%s:%d" % (socket.gethostname(), os.getpid()) def get_engine(name, db_host='', db_user='', db_pass='', db_port='5432', pool_size=5, max_overflow=5): db_port = int(db_port) - host = db_host or '' + arguments = { + "dbname": name, + "host": db_host, + "port": db_port, + "application_name": APPLICATION_NAME, + } if db_user: - if db_pass: - host = "%s:%s@%s:%s" % (db_user, db_pass, db_host, db_port) - else: - host = "%s@%s:%s" % (db_user, db_host, db_port) + arguments["user"] = db_user + if db_pass: + arguments["password"] = db_pass + dsn = "%20".join("%s=%s" % x for x in arguments.iteritems()) + return sqlalchemy.create_engine( - 'postgres://%s/%s' % ( - host, - name, - ), + 'postgres:///?dsn=' + dsn, strategy='threadlocal', pool_size=int(pool_size), max_overflow=int(max_overflow),