Revision c69d8202
b/snf-pithos-backend/pithos/backends/modular.py | ||
---|---|---|
1023 | 1023 |
dest_meta = dest_meta or {} |
1024 | 1024 |
dest_version_ids = [] |
1025 | 1025 |
self._can_read(user, src_account, src_container, src_name) |
1026 |
path, node = self._lookup_object(src_account, src_container, src_name, |
|
1027 |
lock_container=True) |
|
1026 |
|
|
1027 |
src_container_path = '/'.join((src_account, src_container)) |
|
1028 |
dest_container_path = '/'.join((src_account, src_container)) |
|
1029 |
# Lock container paths in alphabetical order |
|
1030 |
if src_container_path < dest_container_path: |
|
1031 |
path, node = self._lookup_object(src_account, src_container, |
|
1032 |
src_name, |
|
1033 |
lock_container=True) |
|
1034 |
self._lookup_container(dest_account, dest_container) |
|
1035 |
else: |
|
1036 |
self._lookup_container(dest_account, dest_container) |
|
1037 |
path, node = self._lookup_object(src_account, src_container, |
|
1038 |
src_name, |
|
1039 |
lock_container=True) |
|
1040 |
|
|
1028 | 1041 |
# TODO: Will do another fetch of the properties in duplicate version... |
1029 | 1042 |
props = self._get_version( |
1030 | 1043 |
node, src_version) # Check to see if source exists. |
... | ... | |
1033 | 1046 |
size = props[self.SIZE] |
1034 | 1047 |
is_copy = not is_move and (src_account, src_container, src_name) != ( |
1035 | 1048 |
dest_account, dest_container, dest_name) # New uuid. |
1036 |
# _update_object_hash() locks destination path |
|
1037 | 1049 |
dest_version_ids.append(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)) |
1038 | 1050 |
if is_move and (src_account, src_container, src_name) != (dest_account, dest_container, dest_name): |
1039 | 1051 |
self._delete_object(user, src_account, src_container, src_name) |
Also available in: Unified diff