示例#1
0
    def __get_child_id(self, dir_id, item_name):
        ikey = Key(Key.KT_ADDR, dir_id, self.__hash(item_name))
        i_ids = []
        ret_id = None
        i_addr_list_raw = self.__get_raw_value(ikey)
        if not i_addr_list_raw:
            raise PathException('key %s does not found' % ikey)

        for i_id in AddressItems.iter_item_ids(i_addr_list_raw):
            i_ids.append(i_id)

        if len(i_ids) == 0:
            raise PathException('No childlen found for key %s' % ikey)

        if len(i_ids) > 1:
            for i_id in i_ids:
                item_md = self.__get_item_md(i_id)
                if to_str(item_md.name) == to_str(item_name):
                    ret_id = i_id
                    break
        else:
            ret_id = i_ids[0]

        if ret_id is None:
            raise PathException('No child "%s" found in dir with id %s' %
                                (item_name, dir_id))

        return ret_id
示例#2
0
    def __get_child_id(self, dir_id, item_name):
        ikey = Key(Key.KT_ADDR, dir_id, self.__hash(item_name))
        i_ids = []
        ret_id = None
        i_addr_list_raw = self.__get_raw_value(ikey)
        if not i_addr_list_raw:
            raise PathException('key %s does not found'%ikey)

        for i_id in AddressItems.iter_item_ids(i_addr_list_raw):
            i_ids.append(i_id)

        if len(i_ids) == 0:
            raise PathException('No childlen found for key %s'%ikey)

        if len(i_ids) > 1:
            for i_id in i_ids:
                item_md = self.__get_item_md(i_id)
                if to_str(item_md.name) == to_str(item_name):
                    ret_id = i_id
                    break
        else:
            ret_id = i_ids[0]

        if ret_id is None:
            raise PathException('No child "%s" found in dir with id %s'%(item_name, dir_id))

        return ret_id
示例#3
0
    def __exists(self, item_md):
        a_key = Key(Key.KT_ADDR, item_md.parent_dir_id, self.__hash(item_md.name))
        addr_st_raw = self.__get_raw_value(a_key)
        if not addr_st_raw:
            return False

        for i_id in AddressItems.iter_item_ids(addr_st_raw):
            i_md = self.__get_item_md(i_id)
            if to_str(i_md.name) == to_str(item_md.name):
                return True

        return False
示例#4
0
    def __update_addr_item(self, old_item_md, new_item_md):
        if to_str(old_item_md.name) != to_str(new_item_md.name):
            new_key = Key(Key.KT_ADDR, new_item_md.parent_dir_id, self.__hash(new_item_md.name))
            old_key = Key(Key.KT_ADDR, old_item_md.parent_dir_id, self.__hash(old_item_md.name))
            self.__update_addr(old_key, old_item_md.item_id, new_key)

        if old_item_md.parent_dir_id != new_item_md.parent_dir_id:
            old_dir_md = self.__get_item_md(old_item_md.parent_dir_id)
            self.__remove_addr_child(old_dir_md, old_item_md.item_id)

            new_dir_md = self.__get_item_md(new_item_md.parent_dir_id)
            self.__append_addr_child(new_dir_md, old_item_md.item_id)
示例#5
0
    def __exists(self, item_md):
        a_key = Key(Key.KT_ADDR, item_md.parent_dir_id,
                    self.__hash(item_md.name))
        addr_st_raw = self.__get_raw_value(a_key)
        if not addr_st_raw:
            return False

        for i_id in AddressItems.iter_item_ids(addr_st_raw):
            i_md = self.__get_item_md(i_id)
            if to_str(i_md.name) == to_str(item_md.name):
                return True

        return False
示例#6
0
    def __update_addr_item(self, old_item_md, new_item_md):
        if to_str(old_item_md.name) != to_str(new_item_md.name):
            new_key = Key(Key.KT_ADDR, new_item_md.parent_dir_id,
                          self.__hash(new_item_md.name))
            old_key = Key(Key.KT_ADDR, old_item_md.parent_dir_id,
                          self.__hash(old_item_md.name))
            self.__update_addr(old_key, old_item_md.item_id, new_key)

        if old_item_md.parent_dir_id != new_item_md.parent_dir_id:
            old_dir_md = self.__get_item_md(old_item_md.parent_dir_id)
            self.__remove_addr_child(old_dir_md, old_item_md.item_id)

            new_dir_md = self.__get_item_md(new_item_md.parent_dir_id)
            self.__append_addr_child(new_dir_md, old_item_md.item_id)
示例#7
0
    def dump(self, recursive=False):
        self.validate()
        fname = to_str(self.name)
        fname_len = len(fname)
        if fname_len < 1 or fname_len > MAX_B:
            raise MDValidationError('File name length should be in range [1..%s], but "%s" occured'%(MAX_B, fname))

        dump = struct.pack(self.HDR_STRUCT, AbstractMetadataObject.MOL_FILE, fname_len, self.item_id, \
                self.size, self.replica_count, self.parent_dir_id, self.create_date, int(self.is_local))
        dump += fname
        for chunk in self.chunks:
            ch_dump = chunk.dump()
            dump += '%s%s'%(chr(len(ch_dump)), ch_dump)
        return dump
示例#8
0
    def dump(self, recursive=False):
        self.validate()
        fname = to_str(self.name)
        fname_len = len(fname)
        if fname_len < 1 or fname_len > MAX_B:
            raise MDValidationError(
                'File name length should be in range [1..%s], but "%s" occured'
                % (MAX_B, fname))

        dump = struct.pack(self.HDR_STRUCT, AbstractMetadataObject.MOL_FILE, fname_len, self.item_id, \
                self.size, self.replica_count, self.parent_dir_id, self.create_date, int(self.is_local))
        dump += fname
        for chunk in self.chunks:
            ch_dump = chunk.dump()
            dump += '%s%s' % (chr(len(ch_dump)), ch_dump)
        return dump
示例#9
0
    def dump(self, recursive=False):
        self.validate()
        dname = to_str(self.name)
        dname_len = len(dname)
        if dname_len < 1 or dname_len > MAX_B:
            raise MDValidationError('Directory name length should be in range [1..%s], but "%s" occured'%(MAX_B, dname))
        dump = struct.pack(self.HDR_STRUCT, AbstractMetadataObject.MOL_DIR, dname_len, self.item_id, \
                self.parent_dir_id, self.create_date, self.last_modify_date)
        dump += dname

        if recursive:
            for dir_item in self.content.values():
                for item in dir_item:
                    im_dump = item.dump(recursive)
                    dump += '%s%s'%(struct.pack(self.ITEM_HDR_STRUCT, len(im_dump), int(item.is_file())), im_dump)

        return dump
示例#10
0
    def dump(self, recursive=False):
        self.validate()
        dname = to_str(self.name)
        dname_len = len(dname)
        if dname_len < 1 or dname_len > MAX_B:
            raise MDValidationError(
                'Directory name length should be in range [1..%s], but "%s" occured'
                % (MAX_B, dname))
        dump = struct.pack(self.HDR_STRUCT, AbstractMetadataObject.MOL_DIR, dname_len, self.item_id, \
                self.parent_dir_id, self.create_date, self.last_modify_date)
        dump += dname

        if recursive:
            for dir_item in self.content.values():
                for item in dir_item:
                    im_dump = item.dump(recursive)
                    dump += '%s%s' % (struct.pack(
                        self.ITEM_HDR_STRUCT, len(im_dump), int(
                            item.is_file())), im_dump)

        return dump