def start_as_dht_member(self): if self.status == DS_DESTROYING: return self.status = DS_INITIALIZE dht_range = self.get_dht_range() curr_start = dht_range.get_start() curr_end = dht_range.get_end() last_range = dht_range.get_last_range() if last_range and not self.__split_requests_cache: new_range = self.__get_next_range_near(last_range[0], last_range[1]) elif dht_range.is_max_range() or self.__split_requests_cache: new_range = self.__get_next_max_range() else: new_range = self.__get_next_range_near(curr_start, curr_end) if new_range is None: #wait and try again if self.__start_dht_try_count == Config.DHT_CYCLE_TRY_COUNT: logger.error('Cant initialize node as a part of DHT') self.__start_dht_try_count = 0 return logger.info('No ready range for me on network... So, sleep and try again') self.__start_dht_try_count += 1 self.__split_requests_cache = [] time.sleep(Config.WAIT_RANGE_TIMEOUT) return self.start_as_dht_member() if (new_range.start == curr_start and new_range.end == curr_end): new_dht_range = dht_range else: new_dht_range = FSHashRanges(long(new_range.start), long(new_range.end), self.save_path) self.update_dht_range(new_dht_range) new_dht_range.restore_from_reservation() #try getting new range data from reservation if new_range.node_address == self.self_address: self._take_range(new_range) self.set_status_to_normalwork() return self.__split_requests_cache.append(new_range.node_address) logger.info('Call SplitRangeRequest [%040x-%040x] to %s'% \ (new_dht_range.get_start(), new_dht_range.get_end(), new_range.node_address,)) parameters = { 'start_key': new_dht_range.get_start(), 'end_key': new_dht_range.get_end() } req = FabnetPacketRequest(method='SplitRangeRequest', sender=self.self_address, parameters=parameters) self.call_node(new_range.node_address, req)