def create_memory_overlay(raw_meta, raw_mem, modified_mem, out_delta, print_out=sys.stdout):
    # get memory delta
    # raw_meta: meta data path of raw memory, e.g. hash_list+header+footer
    # raw_mem: raw memory path
    # modified_mem: modified memory path
    # out_delta: output path of final delta

    # Create Base Memory from meta file
    base = Memory.import_from_metafile(raw_meta, raw_mem)

    # 1.get modified page
    print_out.write("[Debug] 1.get modified page list\n")
    header_delta, footer_delta, original_delta_list = base.get_modified(modified_mem)
    delta_list = []
    for item in original_delta_list:
        delta_item = DeltaItem(item.offset, item.offset_len,
                hash_value=item.hash_value,
                ref_id=item.ref_id,
                data_len=item.data_len,
                data=item.data)
        delta_list.append(delta_item)

    # 2.find shared with base memory 
    print_out.write("[Debug] 2.get delta from base Memory\n")
    base.get_delta(delta_list, ref_id=DeltaItem.REF_BASE_MEM)

    # 3.find shared within self
    print_out.write("[Debug] 3.get delta from itself\n")
    DeltaList.get_self_delta(delta_list)

    DeltaList.statistics(delta_list, print_out)
    DeltaList.tofile_with_footer(header_delta, footer_delta, delta_list, out_delta)
Ejemplo n.º 2
0
def create_memory_overlay(raw_meta,
                          raw_mem,
                          modified_mem,
                          out_delta,
                          print_out=sys.stdout):
    # get memory delta
    # raw_meta: meta data path of raw memory, e.g. hash_list+header+footer
    # raw_mem: raw memory path
    # modified_mem: modified memory path
    # out_delta: output path of final delta

    # Create Base Memory from meta file
    base = Memory.import_from_metafile(raw_meta, raw_mem)

    # 1.get modified page
    print_out.write("[Debug] 1.get modified page list\n")
    header_delta, footer_delta, original_delta_list = base.get_modified(
        modified_mem)
    delta_list = []
    for item in original_delta_list:
        delta_item = DeltaItem(item.offset,
                               item.offset_len,
                               hash_value=item.hash_value,
                               ref_id=item.ref_id,
                               data_len=item.data_len,
                               data=item.data)
        delta_list.append(delta_item)

    # 2.find shared with base memory
    print_out.write("[Debug] 2.get delta from base Memory\n")
    base.get_delta(delta_list, ref_id=DeltaItem.REF_BASE_MEM)

    # 3.find shared within self
    print_out.write("[Debug] 3.get delta from itself\n")
    DeltaList.get_self_delta(delta_list)

    DeltaList.statistics(delta_list, print_out)
    DeltaList.tofile_with_footer(header_delta, footer_delta, delta_list,
                                 out_delta)
Ejemplo n.º 3
0
        for item in original_delta_list:
            delta_item = DeltaItem(item.offset,
                                   item.offset_len,
                                   hash_value=item.hash_value,
                                   ref_id=item.ref_id,
                                   data_len=item.data_len,
                                   data=item.data)
            delta_list.append(delta_item)

        # 2.find shared with base memory
        print "[Debug] get delta from base Memory"
        base.get_delta(delta_list, ref_id=DeltaItem.REF_BASE_MEM)

        # 3.find shared within self
        print "[Debug] get delta from itself"
        DeltaList.get_self_delta(delta_list)

        DeltaList.statistics(delta_list)
        DeltaList.tofile_with_footer(header_delta, footer_delta, delta_list,
                                     out_path)

    elif command == "recover":
        if (not settings.base_file) or (not settings.delta_file):
            sys.stderr.write("Error, Cannot find base/delta file. See help\n")
            sys.exit(1)
        base_path = settings.base_file
        delta_path = settings.delta_file
        raw_path = settings.base_file + EXT_RAW
        meta_path = settings.base_file + EXT_META

        # Create Base Memory from meta file
        delta_list = []
        for item in original_delta_list:
            delta_item = DeltaItem(item.offset, item.offset_len,
                    hash_value=item.hash_value,
                    ref_id=item.ref_id,
                    data_len=item.data_len,
                    data=item.data)
            delta_list.append(delta_item)

        # 2.find shared with base memory 
        print "[Debug] get delta from base Memory"
        base.get_delta(delta_list, ref_id=DeltaItem.REF_BASE_MEM)

        # 3.find shared within self
        print "[Debug] get delta from itself"
        DeltaList.get_self_delta(delta_list)

        DeltaList.statistics(delta_list)
        DeltaList.tofile_with_footer(header_delta, footer_delta, delta_list, out_path)

    elif command == "recover":
        if (not settings.base_file) or (not settings.delta_file):
            sys.stderr.write("Error, Cannot find base/delta file. See help\n")
            sys.exit(1)
        base_path = settings.base_file
        delta_path = settings.delta_file
        raw_path = settings.base_file + EXT_RAW
        meta_path = settings.base_file + EXT_META

        # Create Base Memory from meta file
        base = Memory.import_from_metafile(meta_path, raw_path)