Revision f9ea264b
b/snf-pithos-backend/pithos/backends/modular.py | ||
---|---|---|
381 | 381 |
if user != account: |
382 | 382 |
raise NotAllowedError |
383 | 383 |
path, node = self._lookup_container(account, container) |
384 |
self._put_metadata(user, node, domain, meta, replace) |
|
384 |
src_version_id, dest_version_id = self._put_metadata(user, node, domain, meta, replace) |
|
385 |
if src_version_id is not None: |
|
386 |
versioning = self._get_policy(node)['versioning'] |
|
387 |
if versioning != 'auto': |
|
388 |
self.node.version_remove(src_version_id) |
|
385 | 389 |
|
386 | 390 |
@backend_method |
387 | 391 |
def get_container_policy(self, user, account, container): |
... | ... | |
632 | 636 |
hashmap = self.store.map_get(binascii.unhexlify(props[self.HASH])) |
633 | 637 |
return props[self.SIZE], [binascii.hexlify(x) for x in hashmap] |
634 | 638 |
|
635 |
def _update_object_hash(self, user, account, container, name, size, type, hash, checksum, permissions, src_node=None, is_copy=False):
|
|
639 |
def _update_object_hash(self, user, account, container, name, size, type, hash, checksum, domain, meta, replace_meta, permissions, src_node=None, src_version_id=None, is_copy=False):
|
|
636 | 640 |
if permissions is not None and user != account: |
637 | 641 |
raise NotAllowedError |
638 | 642 |
self._can_write(user, account, container, name) |
... | ... | |
645 | 649 |
path, node = self._put_object_node(container_path, container_node, name) |
646 | 650 |
pre_version_id, dest_version_id = self._put_version_duplicate(user, node, src_node=src_node, size=size, type=type, hash=hash, checksum=checksum, is_copy=is_copy) |
647 | 651 |
|
652 |
# Handle meta. |
|
653 |
if src_version_id is None: |
|
654 |
src_version_id = pre_version_id |
|
655 |
self._put_metadata_duplicate(src_version_id, dest_version_id, domain, meta, replace_meta) |
|
656 |
|
|
648 | 657 |
# Check quota. |
649 | 658 |
del_size = self._apply_versioning(account, container, pre_version_id) |
650 | 659 |
size_delta = size - del_size |
... | ... | |
659 | 668 |
|
660 | 669 |
if permissions is not None: |
661 | 670 |
self.permissions.access_set(path, permissions) |
662 |
return pre_version_id, dest_version_id
|
|
671 |
return dest_version_id |
|
663 | 672 |
|
664 | 673 |
@backend_method |
665 | 674 |
def update_object_hashmap(self, user, account, container, name, size, type, hashmap, checksum, domain, meta={}, replace_meta=False, permissions=None): |
... | ... | |
677 | 686 |
raise ie |
678 | 687 |
|
679 | 688 |
hash = map.hash() |
680 |
pre_version_id, dest_version_id = self._update_object_hash(user, account, container, name, size, type, binascii.hexlify(hash), checksum, permissions) |
|
681 |
self._put_metadata_duplicate(pre_version_id, dest_version_id, domain, meta, replace_meta) |
|
689 |
dest_version_id = self._update_object_hash(user, account, container, name, size, type, binascii.hexlify(hash), checksum, domain, meta, replace_meta, permissions) |
|
682 | 690 |
self.store.map_put(hash, map) |
683 | 691 |
return dest_version_id |
684 | 692 |
|
... | ... | |
706 | 714 |
size = props[self.SIZE] |
707 | 715 |
|
708 | 716 |
is_copy = not is_move and (src_account, src_container, src_name) != (dest_account, dest_container, dest_name) # New uuid. |
709 |
pre_version_id, dest_version_id = self._update_object_hash(user, dest_account, dest_container, dest_name, size, type, hash, None, permissions, src_node=node, is_copy=is_copy) |
|
710 |
self._put_metadata_duplicate(src_version_id, dest_version_id, dest_domain, dest_meta, replace_meta) |
|
717 |
dest_version_id = self._update_object_hash(user, dest_account, dest_container, dest_name, size, type, hash, None, dest_domain, dest_meta, replace_meta, permissions, src_node=node, src_version_id=src_version_id, is_copy=is_copy) |
|
711 | 718 |
return dest_version_id |
712 | 719 |
|
713 | 720 |
@backend_method |
Also available in: Unified diff