Revision 9e3a38bb snf-pithos-backend/pithos/backends/modular.py
b/snf-pithos-backend/pithos/backends/modular.py | ||
---|---|---|
37 | 37 |
import hashlib |
38 | 38 |
import binascii |
39 | 39 |
|
40 |
from functools import wraps |
|
40 |
from functools import wraps, partial
|
|
41 | 41 |
from traceback import format_exc |
42 | 42 |
|
43 | 43 |
try: |
... | ... | |
250 | 250 |
self.serials = [] |
251 | 251 |
self.messages = [] |
252 | 252 |
|
253 |
self._move_object = partial(self._copy_object, is_move=True) |
|
254 |
|
|
253 | 255 |
def pre_exec(self, lock_container_path=False): |
254 | 256 |
self.lock_container_path = lock_container_path |
255 | 257 |
self.wrapper.execute() |
... | ... | |
929 | 931 |
def _update_object_hash(self, user, account, container, name, size, type, |
930 | 932 |
hash, checksum, domain, meta, replace_meta, |
931 | 933 |
permissions, src_node=None, src_version_id=None, |
932 |
is_copy=False): |
|
934 |
is_copy=False, report_size_change=True):
|
|
933 | 935 |
if permissions is not None and user != account: |
934 | 936 |
raise NotAllowedError |
935 | 937 |
self._can_write(user, account, container, name) |
... | ... | |
982 | 984 |
) |
983 | 985 |
) |
984 | 986 |
|
985 |
self._report_size_change( |
|
986 |
user, account, size_delta, |
|
987 |
{'action': 'object update', 'path': path, |
|
988 |
'versions': ','.join([str(dest_version_id)])}) |
|
987 |
if report_size_change: |
|
988 |
self._report_size_change( |
|
989 |
user, account, size_delta, |
|
990 |
{'action': 'object update', 'path': path, |
|
991 |
'versions': ','.join([str(dest_version_id)])}) |
|
989 | 992 |
if permissions is not None: |
990 | 993 |
self.permissions.access_set(path, permissions) |
991 | 994 |
self._report_sharing_change( |
... | ... | |
1045 | 1048 |
dest_domain=None, dest_meta=None, replace_meta=False, |
1046 | 1049 |
permissions=None, src_version=None, is_move=False, |
1047 | 1050 |
delimiter=None): |
1051 |
|
|
1052 |
report_size_change = not is_move |
|
1048 | 1053 |
dest_meta = dest_meta or {} |
1049 | 1054 |
dest_version_ids = [] |
1050 | 1055 |
self._can_read(user, src_account, src_container, src_name) |
... | ... | |
1060 | 1065 |
dest_version_ids.append(self._update_object_hash( |
1061 | 1066 |
user, dest_account, dest_container, dest_name, size, type, hash, |
1062 | 1067 |
None, dest_domain, dest_meta, replace_meta, permissions, |
1063 |
src_node=node, src_version_id=src_version_id, is_copy=is_copy)) |
|
1068 |
src_node=node, src_version_id=src_version_id, is_copy=is_copy, |
|
1069 |
report_size_change=report_size_change)) |
|
1064 | 1070 |
if is_move and ((src_account, src_container, src_name) != |
1065 | 1071 |
(dest_account, dest_container, dest_name)): |
1066 |
self._delete_object(user, src_account, src_container, src_name) |
|
1072 |
self._delete_object(user, src_account, src_container, src_name, |
|
1073 |
report_size_change=report_size_change) |
|
1067 | 1074 |
|
1068 | 1075 |
if delimiter: |
1069 | 1076 |
prefix = (src_name + delimiter if not |
... | ... | |
1122 | 1129 |
meta = meta or {} |
1123 | 1130 |
if user != src_account: |
1124 | 1131 |
raise NotAllowedError |
1125 |
dest_version_id = self._copy_object(
|
|
1132 |
dest_version_id = self._move_object(
|
|
1126 | 1133 |
user, src_account, src_container, src_name, dest_account, |
1127 | 1134 |
dest_container, dest_name, type, domain, meta, replace_meta, |
1128 |
permissions, None, True, delimiter)
|
|
1135 |
permissions, None, delimiter=delimiter)
|
|
1129 | 1136 |
return dest_version_id |
1130 | 1137 |
|
1131 | 1138 |
def _delete_object(self, user, account, container, name, until=None, |
1132 |
delimiter=None): |
|
1139 |
delimiter=None, report_size_change=True):
|
|
1133 | 1140 |
if user != account: |
1134 | 1141 |
raise NotAllowedError |
1135 | 1142 |
|
... | ... | |
1175 | 1182 |
cluster=CLUSTER_DELETED, update_statistics_ancestors_depth=1) |
1176 | 1183 |
del_size = self._apply_versioning(account, container, src_version_id, |
1177 | 1184 |
update_statistics_ancestors_depth=1) |
1178 |
self._report_size_change( |
|
1179 |
user, account, -del_size, |
|
1180 |
{'action': 'object delete', |
|
1181 |
'path': path, |
|
1182 |
'versions': ','.join([str(dest_version_id)])}) |
|
1185 |
if report_size_change: |
|
1186 |
self._report_size_change( |
|
1187 |
user, account, -del_size, |
|
1188 |
{'action': 'object delete', |
|
1189 |
'path': path, |
|
1190 |
'versions': ','.join([str(dest_version_id)])}) |
|
1183 | 1191 |
self._report_object_change( |
1184 | 1192 |
user, account, path, details={'action': 'object delete'}) |
1185 | 1193 |
self.permissions.access_clear(path) |
... | ... | |
1201 | 1209 |
del_size = self._apply_versioning( |
1202 | 1210 |
account, container, src_version_id, |
1203 | 1211 |
update_statistics_ancestors_depth=1) |
1204 |
self._report_size_change( |
|
1205 |
user, account, -del_size, |
|
1206 |
{'action': 'object delete', |
|
1207 |
'path': path, |
|
1208 |
'versions': ','.join([str(dest_version_id)])}) |
|
1212 |
if report_size_change: |
|
1213 |
self._report_size_change( |
|
1214 |
user, account, -del_size, |
|
1215 |
{'action': 'object delete', |
|
1216 |
'path': path, |
|
1217 |
'versions': ','.join([str(dest_version_id)])}) |
|
1209 | 1218 |
self._report_object_change( |
1210 | 1219 |
user, account, path, details={'action': 'object delete'}) |
1211 | 1220 |
paths.append(path) |
Also available in: Unified diff