Ejemplo n.º 1
0
    def __init__(self, options):
        # options is a relstorage.options.Options instance
        if options.replica_conf:
            self.replica_selector = ReplicaSelector(options.replica_conf,
                                                    options.replica_timeout)
        else:
            self.replica_selector = None

        if options.ro_replica_conf:
            self.ro_replica_selector = ReplicaSelector(options.ro_replica_conf,
                                                       options.replica_timeout)
        else:
            self.ro_replica_selector = self.replica_selector
Ejemplo n.º 2
0
 def test_next_only_one_server(self):
     from relstorage.adapters.replica import ReplicaSelector
     with open(self.fn, 'w') as f:
         f.write('localhost\n')
     rs = ReplicaSelector(self.fn, 600.0)
     self.assertEqual(rs.current(), 'localhost')
     self.assertEqual(rs.next(), None)
Ejemplo n.º 3
0
 def test_next_only_one_server(self):
     from relstorage.adapters.replica import ReplicaSelector
     f = open(self.fn, 'w')
     f.write('localhost\n')
     f.close()
     rs = ReplicaSelector(self.options)
     self.assertEqual(rs.current(), 'localhost')
     self.assertEqual(rs.next(), None)
Ejemplo n.º 4
0
 def test__select(self):
     from relstorage.adapters.replica import ReplicaSelector
     rs = ReplicaSelector(self.fn, 600.0)
     rs._select(0)
     self.assertEqual(rs._current_replica, 'example.com:1234')
     self.assertEqual(rs._current_index, 0)
     self.assertEqual(rs._expiration, None)
     rs._select(1)
     self.assertEqual(rs._current_replica, 'localhost:4321')
     self.assertEqual(rs._current_index, 1)
     self.assertNotEqual(rs._expiration, None)
Ejemplo n.º 5
0
 def test_next_with_new_conf(self):
     from relstorage.adapters.replica import ReplicaSelector
     rs = ReplicaSelector(self.fn, 600.0)
     self.assertEqual(rs.current(), 'example.com:1234')
     self.assertEqual(rs.next(), 'localhost:4321')
     # interrupt the iteration by changing the replica conf file
     with open(self.fn, 'w') as f:
         f.write('example.com:9999\n')
     rs._config_checked = 0
     rs._config_modified = 0
     self.assertEqual(rs.next(), 'example.com:9999')
     self.assertEqual(rs.next(), None)
Ejemplo n.º 6
0
 def test__is_config_modified(self):
     from relstorage.adapters.replica import ReplicaSelector
     import time
     rs = ReplicaSelector(self.fn, 600.0)
     self.assertEqual(rs._is_config_modified(), False)
     # change the file
     rs._config_modified = 0
     # don't check the file yet
     rs._config_checked = time.time() + 3600
     self.assertEqual(rs._is_config_modified(), False)
     # now check the file
     rs._config_checked = 0
     self.assertEqual(rs._is_config_modified(), True)
Ejemplo n.º 7
0
 def test_current(self):
     from relstorage.adapters.replica import ReplicaSelector
     rs = ReplicaSelector(self.fn, 600.0)
     self.assertEqual(rs.current(), 'example.com:1234')
     # change the file and get the new current replica
     with open(self.fn, 'w') as f:
         f.write('localhost\nalternate\n')
     rs._config_checked = 0
     rs._config_modified = 0
     self.assertEqual(rs.current(), 'localhost')
     # switch to the alternate
     rs._select(1)
     self.assertEqual(rs.current(), 'alternate')
     # expire the alternate
     rs._expiration = 0
     self.assertEqual(rs.current(), 'localhost')
Ejemplo n.º 8
0
    def test_next_iteration(self):
        from relstorage.adapters.replica import ReplicaSelector
        rs = ReplicaSelector(self.fn, 600.0)

        # test forward iteration
        self.assertEqual(rs.current(), 'example.com:1234')
        self.assertEqual(rs.next(), 'localhost:4321')
        self.assertEqual(rs.next(), 'localhost:9999')
        self.assertEqual(rs.next(), None)

        # test iteration that skips over the replica that failed
        self.assertEqual(rs.current(), 'example.com:1234')
        self.assertEqual(rs.next(), 'localhost:4321')
        self.assertEqual(rs.current(), 'localhost:4321')
        # next() after current() indicates the last replica failed
        self.assertEqual(rs.next(), 'example.com:1234')
        self.assertEqual(rs.next(), 'localhost:9999')
        self.assertEqual(rs.next(), None)
Ejemplo n.º 9
0
 def test__read_config_normal(self):
     from relstorage.adapters.replica import ReplicaSelector
     rs = ReplicaSelector(self.fn, 600.0)
     self.assertEqual(
         rs._replicas,
         ['example.com:1234', 'localhost:4321', 'localhost:9999'])