Exemple #1
0
 def test_str_with_changes(self):
     initial = 'dbname=foo host=bar'
     expected = 'dbname=foo user=baz host=blah'
     cs = ConnectionString(initial)
     cs.host = 'blah'
     cs.user = '******'
     self.assertEqual(expected, str(cs))
    def __init__(self, log, pgbouncer_conn_str, dbname, dbuser):
        self.log = log

        pgbouncer_conn_str = ConnectionString(pgbouncer_conn_str)
        if not pgbouncer_conn_str.dbname:
            pgbouncer_conn_str.dbname = 'pgbouncer'
        if pgbouncer_conn_str.dbname != 'pgbouncer':
            log.warn("pgbouncer administrative database not named 'pgbouncer'")
        self.pgbouncer_con = pg_connect(pgbouncer_conn_str)

        self.master_name = None
        self.master = None
        self.slaves = {}

        for db in self.pgbouncer_cmd('show databases', results=True):
            if db.database != dbname:
                continue

            conn_str = ConnectionString(
                'dbname=%s port=%s user=%s' % (dbname, db.port, dbuser))
            if db.host:
                conn_str.host = db.host
            con = pg_connect(conn_str)
            cur = con.cursor()
            cur.execute('select pg_is_in_recovery()')
            if cur.fetchone()[0] is True:
                self.slaves[db.name] = conn_str
            else:
                self.master_name = db.name
                self.master = conn_str

        if self.master_name is None:
            log.fatal('No master detected.')
            raise SystemExit(98)
    def __init__(self, log, pgbouncer_conn_str, dbname, dbuser):
        self.log = log

        pgbouncer_conn_str = ConnectionString(pgbouncer_conn_str)
        if not pgbouncer_conn_str.dbname:
            pgbouncer_conn_str.dbname = 'pgbouncer'
        if pgbouncer_conn_str.dbname != 'pgbouncer':
            log.warn("pgbouncer administrative database not named 'pgbouncer'")
        self.pgbouncer_con = pg_connect(pgbouncer_conn_str)

        self.master_name = None
        self.master = None
        self.slaves = {}

        for db in self.pgbouncer_cmd('show databases', results=True):
            if db.database != dbname:
                continue

            conn_str = ConnectionString(
                'dbname=%s port=%s user=%s' % (dbname, db.port, dbuser))
            if db.host:
                conn_str.host = db.host
            con = pg_connect(conn_str)
            cur = con.cursor()
            cur.execute('select pg_is_in_recovery()')
            if cur.fetchone()[0] is True:
                self.slaves[db.name] = conn_str
            else:
                self.master_name = db.name
                self.master = conn_str

        if self.master_name is None:
            log.fatal('No master detected.')
            raise SystemExit(98)