def test_prune_lookup_shard2(self): '''Verify that after the prune the lookup of any pruned value in the shard results in looking up the same shard. ''' status = self.proxy.sharding.prune_shard("db2.t2") self.check_xmlrpc_command_result(status) rows = self.__server_2.exec_stmt("SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_1 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_1.shard_id, 1 ) rows = self.__server_3.exec_stmt( "SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_2 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_2.shard_id, 2 ) rows = self.__server_4.exec_stmt( "SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_3 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_3.shard_id, 3 ) rows = self.__server_5.exec_stmt( "SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_4 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_4.shard_id, 4 ) rows = self.__server_6.exec_stmt( "SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_5 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_5.shard_id, 5 )
def test_prune_lookup_shard2(self): '''Verify that after the prune the lookup of any pruned value in the shard results in looking up the same shard. ''' self.proxy.sharding.prune_shard("db2.t2") rows = self.__server_2.exec_stmt("SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_1 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_1.shard_id, 1 ) rows = self.__server_3.exec_stmt( "SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_2 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_2.shard_id, 2 ) rows = self.__server_4.exec_stmt( "SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_3 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_3.shard_id, 3 ) rows = self.__server_5.exec_stmt( "SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_4 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_4.shard_id, 4 ) rows = self.__server_6.exec_stmt( "SELECT userID2 FROM db2.t2", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_5 = HashShardingSpecification.lookup(val, 1, "HASH") self.assertEqual( hash_sharding_spec_5.shard_id, 5 )
def test_hash_remove(self): """Test the removal of hash shards. """ hash_sharding_specification_1 = HashShardingSpecification.fetch(1) hash_sharding_specification_2 = HashShardingSpecification.fetch(2) hash_sharding_specification_3 = HashShardingSpecification.fetch(3) hash_sharding_specification_4 = HashShardingSpecification.fetch(4) hash_sharding_specification_5 = HashShardingSpecification.fetch(5) hash_sharding_specification_1.remove() hash_sharding_specification_2.remove() hash_sharding_specification_3.remove() hash_sharding_specification_4.remove() hash_sharding_specification_5.remove() self.__shard_1.remove() self.__shard_2.remove() self.__shard_3.remove() self.__shard_4.remove() self.__shard_5.remove() for i in range(0, 10): hash_sharding_spec = HashShardingSpecification.lookup( i, self.__shard_mapping_id_1, "HASH" ) self.assertEqual(hash_sharding_spec, None)
def test_hash_lookup(self): """Test the hash sharding lookup. """ shard_1_cnt = 0 shard_2_cnt = 0 shard_3_cnt = 0 shard_4_cnt = 0 shard_5_cnt = 0 #Lookup a range of keys to ensure that all the shards are #utilized. for i in range(0, 1000): hash_sharding_spec_1 = HashShardingSpecification.lookup( i, self.__shard_mapping_id_1, "HASH" ) if self.__shard_1.shard_id == hash_sharding_spec_1.shard_id: shard_1_cnt = shard_1_cnt + 1 elif self.__shard_2.shard_id == hash_sharding_spec_1.shard_id: shard_2_cnt = shard_2_cnt + 1 elif self.__shard_3.shard_id == hash_sharding_spec_1.shard_id: shard_3_cnt = shard_3_cnt + 1 elif self.__shard_4.shard_id == hash_sharding_spec_1.shard_id: shard_4_cnt = shard_4_cnt + 1 elif self.__shard_5.shard_id == hash_sharding_spec_1.shard_id: shard_5_cnt = shard_5_cnt + 1 #The following will ensure that both the hash shards are utilized #to store the keys and the values are not skewed in one shard. self.assertTrue(shard_1_cnt > 0) self.assertTrue(shard_2_cnt > 0) self.assertTrue(shard_3_cnt > 0) self.assertTrue(shard_4_cnt > 0) self.assertTrue(shard_5_cnt > 0)
def test_hash_lookup(self): """Test the hash sharding lookup. """ shard_1_cnt = 0 shard_2_cnt = 0 shard_3_cnt = 0 shard_4_cnt = 0 shard_5_cnt = 0 #Lookup a range of keys to ensure that all the shards are #utilized. for i in range(0, 1000): hash_sharding_spec_1 = HashShardingSpecification.lookup( i, self.__shard_mapping_id_1, "HASH") if self.__shard_1.shard_id == hash_sharding_spec_1.shard_id: shard_1_cnt = shard_1_cnt + 1 elif self.__shard_2.shard_id == hash_sharding_spec_1.shard_id: shard_2_cnt = shard_2_cnt + 1 elif self.__shard_3.shard_id == hash_sharding_spec_1.shard_id: shard_3_cnt = shard_3_cnt + 1 elif self.__shard_4.shard_id == hash_sharding_spec_1.shard_id: shard_4_cnt = shard_4_cnt + 1 elif self.__shard_5.shard_id == hash_sharding_spec_1.shard_id: shard_5_cnt = shard_5_cnt + 1 #The following will ensure that both the hash shards are utilized #to store the keys and the values are not skewed in one shard. self.assertTrue(shard_1_cnt > 0) self.assertTrue(shard_2_cnt > 0) self.assertTrue(shard_3_cnt > 0) self.assertTrue(shard_4_cnt > 0) self.assertTrue(shard_5_cnt > 0)
def test_prune_lookup(self): self.proxy.sharding.prune_shard("db1.t1") rows = self.__server_2.exec_stmt("SELECT userID FROM db1.t1", {"fetch": True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_1 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH") self.assertEqual(hash_sharding_spec_1.shard_id, 1) rows = self.__server_3.exec_stmt("SELECT userID FROM db1.t1", {"fetch": True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_2 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH") self.assertEqual(hash_sharding_spec_2.shard_id, 2) rows = self.__server_4.exec_stmt("SELECT userID FROM db1.t1", {"fetch": True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_3 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH") self.assertEqual(hash_sharding_spec_3.shard_id, 3) rows = self.__server_5.exec_stmt("SELECT userID FROM db1.t1", {"fetch": True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_4 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH") self.assertEqual(hash_sharding_spec_4.shard_id, 4) rows = self.__server_6.exec_stmt("SELECT userID FROM db1.t1", {"fetch": True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_5 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH") self.assertEqual(hash_sharding_spec_5.shard_id, 5)
def test_hash_remove(self): """Test the removal of hash shards. """ hash_sharding_specification_1 = HashShardingSpecification.fetch(1) hash_sharding_specification_2 = HashShardingSpecification.fetch(2) hash_sharding_specification_3 = HashShardingSpecification.fetch(3) hash_sharding_specification_4 = HashShardingSpecification.fetch(4) hash_sharding_specification_5 = HashShardingSpecification.fetch(5) hash_sharding_specification_1.remove() hash_sharding_specification_2.remove() hash_sharding_specification_3.remove() hash_sharding_specification_4.remove() hash_sharding_specification_5.remove() self.__shard_1.remove() self.__shard_2.remove() self.__shard_3.remove() self.__shard_4.remove() self.__shard_5.remove() for i in range(0, 10): hash_sharding_spec = HashShardingSpecification.lookup( i, self.__shard_mapping_id_1, "HASH") self.assertEqual(hash_sharding_spec, None)
def test_prune_lookup(self): self.proxy.sharding.prune_shard("db1.t1") rows = self.__server_2.exec_stmt( "SELECT userID FROM db1.t1", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_1 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH" ) self.assertEqual( hash_sharding_spec_1.shard_id, 1 ) rows = self.__server_3.exec_stmt( "SELECT userID FROM db1.t1", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_2 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH" ) self.assertEqual( hash_sharding_spec_2.shard_id, 2 ) rows = self.__server_4.exec_stmt( "SELECT userID FROM db1.t1", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_3 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH" ) self.assertEqual( hash_sharding_spec_3.shard_id, 3 ) rows = self.__server_5.exec_stmt( "SELECT userID FROM db1.t1", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_4 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH" ) self.assertEqual( hash_sharding_spec_4.shard_id, 4 ) rows = self.__server_6.exec_stmt( "SELECT userID FROM db1.t1", {"fetch" : True}) for val in rows[0:len(rows)][0]: hash_sharding_spec_5 = HashShardingSpecification.lookup( val, self.__shard_mapping_id_1, "HASH" ) self.assertEqual( hash_sharding_spec_5.shard_id, 5 )