def calculate_xor_distances_for_masternodes(pastelids): """ `pastelids` - list of pastelids of masternodes. PastelID is a string. """ mns_db = Masternode.get_active_nodes().where( Masternode.pastel_id.in_(pastelids)) for mn in mns_db: for chunk in Chunk.select(): # we store chunk.chunk_id as CharField, but essentially it's very long integer (more then 8 bytes, # doesn't fit in database INT type) xor_distance = calculate_xor_distance(mn.pastel_id, int(chunk.chunk_id)) ChunkMnDistance.create(chunk=chunk, masternode=mn, distance=str(xor_distance))
def test_refresh_masternode_list(self, bc_obj, get_blockchain_connection): bc_obj.return_value.masternode_list.return_value = mn_list get_blockchain_connection.return_value.masternode_list.return_value = mn_list self.assertEqual(Masternode.get_active_nodes().count(), 0) refresh_masternode_list() self.assertEqual(Masternode.get_active_nodes().count(), 3) self.assertEqual(ChunkMnDistance.select().count(), 0)
def calculate_xor_distances_for_chunks(chunk_ids): """ `chunk_ids` - list of chunks ids. Chunk ID is a very long integer. """ chunk_storage_logger.info( 'Calculating XOR distance for {} chunks...'.format(len(chunk_ids))) chunk_ids_str = [str(x) for x in chunk_ids] chunks_db = Chunk.select().where(Chunk.chunk_id.in_(chunk_ids_str)) counter = 0 for chunk in chunks_db: for mn in Masternode.get_active_nodes(): # we store chunk.chunk_id as CharField, but essentially it's very long integer (more then 8 bytes, # doesn't fit in database INT type) xor_distance = calculate_xor_distance(mn.pastel_id, int(chunk.chunk_id)) ChunkMnDistance.create(chunk=chunk, masternode=mn, distance=str(xor_distance)) counter += 1 chunk_storage_logger.info('..Caculated {} distances'.format(counter))
def test_calculate_xor_distances_for_masternodes( self, bc_obj, get_blockchain_connection): bc_obj.return_value.masternode_list.return_value = mn_list get_blockchain_connection.return_value.masternode_list.return_value = mn_list for i in range(3): Chunk.create( chunk_id= '1231231231231231232323934384834890089238429382938429384934{}'. format(i), image_hash=b'asdasdasd') refresh_masternode_list() self.assertEqual(Masternode.get_active_nodes().count(), 3) self.assertEqual(ChunkMnDistance.select().count(), 9)
def test_xor_distance_task_with_2_chunks(self): Chunk.create( chunk_id= '4529959709239007853998547086821683042815765622154307906125136018' '25293195444578222995977844421809007120124095843869086665678514889' '572116942841928123088049', image_hash=b'123123123') Chunk.create( chunk_id= '4529959709239007853998547086821683042815765622154307906125136018' '25293195444578222995977844421809007120124095843869086665678514889' '572116942841928123088041', image_hash=b'123123123') self.assertEqual(Chunk.select()[0].indexed, False) index_new_chunks() self.assertEqual(len(ChunkMnDistance.select()), 4) self.assertEqual(Chunk.select()[0].indexed, True) self.assertEqual(Chunk.select()[1].indexed, True)
def test_xor_distance_task_without_chunks_without_masternodes(self): Masternode.delete() self.assertEqual(len(Chunk.select()), 0) index_new_chunks() self.assertEqual(len(ChunkMnDistance.select()), 0)
def test_xor_distance_task_without_chunks(self): self.assertEqual(len(Chunk.select()), 0) index_new_chunks() self.assertEqual(len(ChunkMnDistance.select()), 0)