def print_ranges(addresses, out_streem): client = FriClient() out_streem.write('\nRANGES SIZES:\n') ranges = {} for address in addresses: packet_obj = FabnetPacketRequest(method='NodeStatistic', sync=True) ret_packet = client.call_sync(address, packet_obj) if ret_packet.ret_code: raise Exception('NodeStatistic failed on %s: %s'%(address, ret_packet.ret_message)) start = ret_packet.ret_parameters['DHTInfo']['range_start'] end = ret_packet.ret_parameters['DHTInfo']['range_end'] range_size = ret_packet.ret_parameters['DHTInfo']['range_size'] replicas_size = ret_packet.ret_parameters['DHTInfo']['replicas_size'] ranges[address] = (start, end, range_size, replicas_size) h_ranges = HashRangesTable() for address, (start, end, _, _) in ranges.items(): h_ranges.append(long(start,16), long(end,16), address) for h_range in h_ranges.iter_table(): start = h_range.start end = h_range.end address = h_range.node_address len_r = end - start out_streem.write('On node %s: {%040x-%040x}[%040x] = %s KB (%s KB)\n'%(address, start, end, len_r,\ ranges[address][2]/1024, ranges[address][3]/1024)) out_streem.flush() end = -1 for h_range in h_ranges.iter_table(): if end+1 != h_range.start: raise Exception('Distributed range table is not full!') end = h_range.end return ranges