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