Example #1
0
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