def test_api(self): comm.start_cluster('127.0.0.1', 7100) comm.join_cluster('127.0.0.1', 7100, '127.0.0.1', 7101) comm.replicate('127.0.0.1', 7100, '127.0.0.1', 7102) time.sleep(1) rc = RedisCluster([{'host': '127.0.0.1', 'port': 7100}]) for i in xrange(20): rc.set('key_%s' % i, 'value_%s' % i) for i in xrange(20): self.assertEqual('value_%s' % i, rc.get('key_%s' % i)) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(3, len(nodes)) self.assertEqual(range(8192), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertEqual(range(8192, 16384), nodes[('127.0.0.1', 7100)].assigned_slots) comm.quit_cluster('127.0.0.1', 7101) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(range(16384), nodes[('127.0.0.1', 7100)].assigned_slots) for i in xrange(20): self.assertEqual('value_%s' % i, rc.get('key_%s' % i)) for i in xrange(20): rc.delete('key_%s' % i) comm.quit_cluster('127.0.0.1', 7102) comm.shutdown_cluster('127.0.0.1', 7100)
def test_quit_problems(self): comm.start_cluster('127.0.0.1', 7100) comm.join_cluster('127.0.0.1', 7100, '127.0.0.1', 7101) comm.replicate('127.0.0.1', 7100, '127.0.0.1', 7102) time.sleep(1) rc = RedisCluster([{'host': '127.0.0.1', 'port': 7100}]) for i in xrange(20): rc.set('key_%s' % i, 'value_%s' % i) for i in xrange(20): self.assertEqual('value_%s' % i, rc.get('key_%s' % i)) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(3, len(nodes)) self.assertEqual(range(8192), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertEqual(range(8192, 16384), nodes[('127.0.0.1', 7100)].assigned_slots) for i in xrange(20): rc.delete('key_%s' % i) self.assertRaisesRegexp(ValueError, '^The master still has slaves$', comm.quit_cluster, '127.0.0.1', 7100) comm.quit_cluster('127.0.0.1', 7102) comm.quit_cluster('127.0.0.1', 7101) self.assertRaisesRegexp(ValueError, '^This is the last node', comm.quit_cluster, '127.0.0.1', 7100) comm.shutdown_cluster('127.0.0.1', 7100)
def test_cluster(self): app = handlers.base.app with app.test_client() as client: comm.start_cluster('127.0.0.1', 7100) r = client.get('/cluster/autodiscover?host=127.0.0.1&port=7100') self.assertEqual(200, r.status_code) nodes = json.loads(r.data) self.assertEqual(1, len(nodes)) self.assertEqual({ 'host': '127.0.0.1', 'port': 7100, 'role': 'master', }, nodes[0]) r = client.post('nodes/add', data={ 'host': '127.0.0.1', 'port': '7100', 'mem': '1048576', }) self.assertEqual(200, r.status_code) r = client.post('/cluster/autojoin', data={ 'host': '127.0.0.1', 'port': '7100', }) self.assertEqual(200, r.status_code) cluster_id = r.data r = client.post('/cluster/set_info', data={ 'cluster_id': cluster_id, 'descr': '.', 'proxy_host': '127.0.0.1', 'proxy_port': '8889', }) self.assertEqual(200, r.status_code) r = list(db.session.query(Proxy).all()) self.assertEqual(1, len(r)) self.assertEqual('127.0.0.1', r[0].host) self.assertEqual(8889, r[0].port) self.assertEqual(1, r[0].suppress_alert) self.assertEqual(int(cluster_id), r[0].cluster_id) r = list(db.session.query(Cluster).all()) self.assertEqual(1, len(r)) self.assertEqual('.', r[0].description) r = client.post('/cluster/set_info', data={ 'cluster_id': cluster_id, 'descr': 'xyzw', }) self.assertEqual(200, r.status_code) r = list(db.session.query(Cluster).all()) self.assertEqual(1, len(r)) self.assertEqual('xyzw', r[0].description) comm.shutdown_cluster('127.0.0.1', 7100)
def test_fix(self): def migrate_one_slot(nodes, _): if nodes[0].port == 7100: source, target = nodes else: target, source = nodes return [(source, target, 1)] comm.start_cluster('127.0.0.1', 7100) rc = RedisCluster([{'host': '127.0.0.1', 'port': 7100}]) comm.join_cluster('127.0.0.1', 7100, '127.0.0.1', 7101, balance_plan=migrate_one_slot) rc.set('h-893', 'I am in slot 0') comm.fix_migrating('127.0.0.1', 7100) self.assertEqual('I am in slot 0', rc.get('h-893')) t7100 = Talker('127.0.0.1', 7100) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) n7100 = nodes[('127.0.0.1', 7100)] n7101 = nodes[('127.0.0.1', 7101)] t7100.talk('cluster', 'setslot', 0, 'importing', n7101.node_id) comm.fix_migrating('127.0.0.1', 7100) self.assertEqual('I am in slot 0', rc.get('h-893')) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) n7100 = nodes[('127.0.0.1', 7100)] n7101 = nodes[('127.0.0.1', 7101)] self.assertEqual(16384, len(n7100.assigned_slots)) self.assertEqual(0, len(n7101.assigned_slots)) t7101 = Talker('127.0.0.1', 7101) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) n7100 = nodes[('127.0.0.1', 7100)] n7101 = nodes[('127.0.0.1', 7101)] self.assertEqual(16384, len(n7100.assigned_slots)) self.assertEqual(0, len(n7101.assigned_slots)) t7100.talk('cluster', 'setslot', 0, 'migrating', n7101.node_id) comm.fix_migrating('127.0.0.1', 7100) self.assertEqual('I am in slot 0', rc.get('h-893')) comm.quit_cluster('127.0.0.1', 7101) rc.delete('h-893') comm.shutdown_cluster('127.0.0.1', 7100) t7100.close() t7101.close()
def test_join_no_load(self): comm.start_cluster('127.0.0.1', 7100) rc = RedisCluster([{'host': '127.0.0.1', 'port': 7100}]) rc.set('x-{h-893}', 'y') rc.set('y-{h-893}', 'zzZ') rc.set('z-{h-893}', 'w') rc.incr('h-893') comm.join_no_load('127.0.0.1', 7100, '127.0.0.1', 7101) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) n7100 = nodes[('127.0.0.1', 7100)] n7101 = nodes[('127.0.0.1', 7101)] self.assertEqual(16384, len(n7100.assigned_slots)) self.assertEqual(0, len(n7101.assigned_slots)) comm.join_no_load('127.0.0.1', 7100, '127.0.0.1', 7102) comm.migrate_slots('127.0.0.1', 7100, '127.0.0.1', 7101, [0]) nodes = base.list_nodes('127.0.0.1', 7102) self.assertEqual(3, len(nodes)) n7100 = nodes[('127.0.0.1', 7100)] n7101 = nodes[('127.0.0.1', 7101)] n7102 = nodes[('127.0.0.1', 7102)] self.assertEqual(16383, len(n7100.assigned_slots)) self.assertEqual(1, len(n7101.assigned_slots)) self.assertEqual(0, len(n7102.assigned_slots)) try: t = n7101.talker() m = t.talk('get', 'h-893') self.assertEqual('1', m) m = t.talk('get', 'y-{h-893}') self.assertEqual('zzZ', m) comm.quit_cluster('127.0.0.1', 7102) comm.quit_cluster('127.0.0.1', 7101) t = n7100.talker() rc.delete('x-{h-893}') rc.delete('y-{h-893}') rc.delete('z-{h-893}') rc.delete('h-893') comm.shutdown_cluster('127.0.0.1', 7100) finally: n7100.close() n7101.close()
def test_cluster(self): app = handlers.base.app with app.test_client() as client: comm.start_cluster('127.0.0.1', 7100) r = client.get('/cluster/autodiscover?host=127.0.0.1&port=7100') self.assertEqual(200, r.status_code) nodes = json.loads(r.data) self.assertEqual(1, len(nodes)) self.assertEqual( { 'host': '127.0.0.1', 'port': 7100, 'role': 'master', }, nodes[0]) r = client.post('nodes/add', data={ 'host': '127.0.0.1', 'port': '7100', 'mem': '1048576', }) self.assertEqual(200, r.status_code) r = client.post('/cluster/autojoin', data={ 'host': '127.0.0.1', 'port': '7100', }) self.assertEqual(200, r.status_code) cluster_id = r.data r = client.post('/cluster/set_info', data={ 'cluster_id': cluster_id, 'descr': '.', 'proxy_host': '127.0.0.1', 'proxy_port': '8889', }) self.assertEqual(200, r.status_code) r = list(db.session.query(Proxy).all()) self.assertEqual(1, len(r)) self.assertEqual('127.0.0.1', r[0].host) self.assertEqual(8889, r[0].port) self.assertEqual(int(cluster_id), r[0].cluster_id) comm.shutdown_cluster('127.0.0.1', 7100)
def test_start_with_max_slots_set(self): comm.start_cluster('127.0.0.1', 7100, max_slots=7000) rc = RedisCluster([{'host': '127.0.0.1', 'port': 7100}]) rc.set('key', 'value') self.assertEqual('value', rc.get('key')) rc.delete('key') comm.shutdown_cluster('127.0.0.1', 7100) comm.start_cluster_on_multi([('127.0.0.1', 7100), ('127.0.0.1', 7101)], max_slots=7000) rc = RedisCluster([{'host': '127.0.0.1', 'port': 7100}]) rc.set('key', 'value') self.assertEqual('value', rc.get('key')) rc.delete('key') comm.quit_cluster('127.0.0.1', 7101) comm.shutdown_cluster('127.0.0.1', 7100)
def test_api(self): comm.start_cluster('127.0.0.1', 7100) rc = RedisCluster([{'host': '127.0.0.1', 'port': 7100}]) rc.set('key', 'value') self.assertEqual('value', rc.get('key')) comm.join_cluster('127.0.0.1', 7100, '127.0.0.1', 7101) for i in xrange(20): rc.set('key_%s' % i, 'value_%s' % i) for i in xrange(20): self.assertEqual('value_%s' % i, rc.get('key_%s' % i)) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) self.assertEqual(range(8192), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertEqual(range(8192, 16384), nodes[('127.0.0.1', 7100)].assigned_slots) comm.migrate_slots('127.0.0.1', 7100, '127.0.0.1', 7101, [8192]) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) self.assertEqual(range(8193), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertEqual(range(8193, 16384), nodes[('127.0.0.1', 7100)].assigned_slots) comm.migrate_slots('127.0.0.1', 7100, '127.0.0.1', 7101, [8193, 8194, 8195]) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) self.assertEqual(range(8196), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertEqual(range(8196, 16384), nodes[('127.0.0.1', 7100)].assigned_slots) self.assertRaisesRegexp(ValueError, 'Not all slot held by', comm.migrate_slots, '127.0.0.1', 7100, '127.0.0.1', 7101, [8192]) self.assertRaisesRegexp(ValueError, 'Not all slot held by', comm.migrate_slots, '127.0.0.1', 7100, '127.0.0.1', 7101, [8195, 8196]) self.assertRaisesRegexp(ValueError, 'Two nodes are not in the same cluster', comm.migrate_slots, '127.0.0.1', 7100, '127.0.0.1', 7102, [8196]) comm.quit_cluster('127.0.0.1', 7100) for i in xrange(20): self.assertEqual('value_%s' % i, rc.get('key_%s' % i)) self.assertEqual('value', rc.get('key')) nodes = base.list_nodes('127.0.0.1', 7101) self.assertEqual(1, len(nodes)) self.assertEqual(range(16384), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertRaisesRegexp(RedisStatusError, 'Cluster containing keys', comm.shutdown_cluster, '127.0.0.1', 7101) rc.delete('key', *['key_%s' % i for i in xrange(20)]) comm.shutdown_cluster('127.0.0.1', 7101) self.assertRaisesRegexp(ResponseError, 'CLUSTERDOWN .*', rc.get, 'key')
def test_api(self): comm.start_cluster('127.0.0.1', 7100) rc = RedisCluster([{'host': '127.0.0.1', 'port': 7100}]) rc.set('key', 'value') self.assertEqual('value', rc.get('key')) comm.join_cluster('127.0.0.1', 7100, '127.0.0.1', 7101) for i in xrange(20): rc.set('key_%s' % i, 'value_%s' % i) for i in xrange(20): self.assertEqual('value_%s' % i, rc.get('key_%s' % i)) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) self.assertEqual(range(8192), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertEqual(range(8192, 16384), nodes[('127.0.0.1', 7100)].assigned_slots) comm.migrate_slots('127.0.0.1', 7100, '127.0.0.1', 7101, [8192]) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) self.assertEqual(range(8193), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertEqual(range(8193, 16384), nodes[('127.0.0.1', 7100)].assigned_slots) comm.migrate_slots('127.0.0.1', 7100, '127.0.0.1', 7101, [8193, 8194, 8195]) nodes = base.list_nodes('127.0.0.1', 7100) self.assertEqual(2, len(nodes)) self.assertEqual(range(8196), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertEqual(range(8196, 16384), nodes[('127.0.0.1', 7100)].assigned_slots) self.assertRaisesRegexp( ValueError, 'Not all slot held by', comm.migrate_slots, '127.0.0.1', 7100, '127.0.0.1', 7101, [8192]) self.assertRaisesRegexp( ValueError, 'Not all slot held by', comm.migrate_slots, '127.0.0.1', 7100, '127.0.0.1', 7101, [8195, 8196]) self.assertRaisesRegexp( ValueError, 'Two nodes are not in the same cluster', comm.migrate_slots, '127.0.0.1', 7100, '127.0.0.1', 7102, [8196]) comm.quit_cluster('127.0.0.1', 7100) for i in xrange(20): self.assertEqual('value_%s' % i, rc.get('key_%s' % i)) self.assertEqual('value', rc.get('key')) nodes = base.list_nodes('127.0.0.1', 7101) self.assertEqual(1, len(nodes)) self.assertEqual(range(16384), nodes[('127.0.0.1', 7101)].assigned_slots) self.assertRaisesRegexp( RedisStatusError, 'Cluster containing keys', comm.shutdown_cluster, '127.0.0.1', 7101) rc.delete('key', *['key_%s' % i for i in xrange(20)]) comm.shutdown_cluster('127.0.0.1', 7101) self.assertRaisesRegexp(ResponseError, 'CLUSTERDOWN .*', rc.get, 'key')
def test_cluster(self): with self.app.test_client() as client: comm.start_cluster('127.0.0.1', 7100) r = client.get('/cluster/autodiscover?host=127.0.0.1&port=7100') self.assertReqStatus(200, r) result = json.loads(r.data) self.assertTrue(result['cluster_discovered']) nodes = result['nodes'] self.assertEqual(1, len(nodes)) self.assertEqual({ 'host': '127.0.0.1', 'port': 7100, 'role': 'master', 'known': False, }, nodes[0]) r = client.post('nodes/add', data={ 'host': '127.0.0.1', 'port': '7100', 'mem': '1048576', }) self.assertReqStatus(200, r) r = client.post('/cluster/autojoin', data={ 'host': '127.0.0.1', 'port': '7100', }) self.assertReqStatus(200, r) cluster_id = r.data r = client.post('/cluster/set_info', data={ 'cluster_id': cluster_id, 'descr': '.', }) self.assertReqStatus(200, r) r = client.post('/cluster/register_proxy', data={ 'cluster_id': cluster_id, 'host': '127.0.0.1', 'port': '8889', }) self.assertReqStatus(200, r) r = list(db.session.query(Proxy).all()) self.assertEqual(1, len(r)) self.assertEqual('127.0.0.1', r[0].host) self.assertEqual(8889, r[0].port) self.assertEqual(1, r[0].suppress_alert) self.assertEqual(int(cluster_id), r[0].cluster_id) r = list(db.session.query(Cluster).all()) self.assertEqual(1, len(r)) self.assertEqual('.', r[0].description) r = client.post('/cluster/set_info', data={ 'cluster_id': cluster_id, 'descr': 'xyzw', }) self.assertReqStatus(200, r) r = list(db.session.query(Cluster).all()) self.assertEqual(1, len(r)) self.assertEqual('xyzw', r[0].description) comm.shutdown_cluster('127.0.0.1', 7100)