示例#1
0
def get_cluster_initialized_without_leader(leader=False,
                                           failover=None,
                                           sync=None):
    m1 = Member(
        0, 'leader', 28, {
            'conn_url':
            'postgres://*****:*****@127.0.0.1:5435/postgres',
            'api_url': 'http://127.0.0.1:8008/patroni',
            'xlog_location': 4
        })
    leader = Leader(0, 0, m1) if leader else None
    m2 = Member(
        0, 'other', 28, {
            'conn_url':
            'postgres://*****:*****@127.0.0.1:5436/postgres',
            'api_url': 'http://127.0.0.1:8011/patroni',
            'state': 'running',
            'tags': {
                'clonefrom': True
            },
            'scheduled_restart': {
                'schedule': "2100-01-01 10:53:07.560445+00:00",
                'postgres_version': '99.0.0'
            }
        })
    syncstate = SyncState(0 if sync else None, sync and sync[0], sync
                          and sync[1])
    return get_cluster(True, leader, [m1, m2], failover, syncstate)
示例#2
0
    def test_pick_sync_standby(self):
        cluster = Cluster(True, None, self.leader, 0, [self.me, self.other, self.leadermem], None,
                          SyncState(0, self.me.name, self.leadermem.name))

        with patch.object(Postgresql, "query", return_value=[
                    (self.leadermem.name, 'streaming', 'sync'),
                    (self.me.name, 'streaming', 'async'),
                    (self.other.name, 'streaming', 'async'),
                ]):
            self.assertEquals(self.p.pick_synchronous_standby(cluster), (self.leadermem.name, True))

        with patch.object(Postgresql, "query", return_value=[
                    (self.me.name, 'streaming', 'async'),
                    (self.leadermem.name, 'streaming', 'potential'),
                    (self.other.name, 'streaming', 'async'),
                ]):
            self.assertEquals(self.p.pick_synchronous_standby(cluster), (self.leadermem.name, False))

        with patch.object(Postgresql, "query", return_value=[
                    (self.me.name, 'streaming', 'async'),
                    (self.other.name, 'streaming', 'async'),
                ]):
            self.assertEquals(self.p.pick_synchronous_standby(cluster), (self.me.name, False))

        with patch.object(Postgresql, "query", return_value=[
                    ('missing', 'streaming', 'sync'),
                    (self.me.name, 'streaming', 'async'),
                    (self.other.name, 'streaming', 'async'),
                ]):
            self.assertEquals(self.p.pick_synchronous_standby(cluster), (self.me.name, False))

        with patch.object(Postgresql, "query", return_value=[]):
            self.assertEquals(self.p.pick_synchronous_standby(cluster), (None, False))
示例#3
0
    def test_pick_sync_standby(self):
        cluster = Cluster(True, None, self.leader, 0,
                          [self.me, self.other, self.leadermem], None,
                          SyncState(0, self.me.name,
                                    self.leadermem.name), None)
        mock_cursor = Mock()
        mock_cursor.fetchone.return_value = ('remote_apply', )

        with patch.object(Postgresql,
                          "query",
                          side_effect=[
                              mock_cursor,
                              [(self.leadermem.name, 'sync', 1),
                               (self.me.name, 'async', 2),
                               (self.other.name, 'async', 2)]
                          ]):
            self.assertEqual(self.p.pick_synchronous_standby(cluster),
                             ([self.leadermem.name], [self.leadermem.name]))

        with patch.object(Postgresql,
                          "query",
                          side_effect=[
                              mock_cursor,
                              [(self.leadermem.name, 'potential', 1),
                               (self.me.name, 'async', 2),
                               (self.other.name, 'async', 2)]
                          ]):
            self.assertEqual(self.p.pick_synchronous_standby(cluster),
                             ([self.leadermem.name], []))

        with patch.object(Postgresql,
                          "query",
                          side_effect=[
                              mock_cursor,
                              [(self.me.name, 'async', 1),
                               (self.other.name, 'async', 2)]
                          ]):
            self.assertEqual(self.p.pick_synchronous_standby(cluster),
                             ([self.me.name], []))

        with patch.object(Postgresql,
                          "query",
                          side_effect=[
                              mock_cursor,
                              [('missing', 'sync', 1),
                               (self.me.name, 'async', 2),
                               (self.other.name, 'async', 3)]
                          ]):
            self.assertEqual(self.p.pick_synchronous_standby(cluster),
                             ([self.me.name], []))

        with patch.object(Postgresql, "query", side_effect=[mock_cursor, []]):
            self.p._major_version = 90400
            self.assertEqual(self.p.pick_synchronous_standby(cluster),
                             ([], []))
示例#4
0
def get_cluster_not_initialized_without_leader():
    return get_cluster(None, None, [], None, SyncState(None, None, None))
示例#5
0
def get_cluster_not_initialized_without_leader(cluster_config=None):
    return get_cluster(None, None, [], None, SyncState(None, None, None), cluster_config)