Revision 388ea25f snf-pithos-backend/pithos/backends/modular.py
b/snf-pithos-backend/pithos/backends/modular.py | ||
---|---|---|
483 | 483 |
path, node = self._lookup_container(account, container) |
484 | 484 |
|
485 | 485 |
if until is not None: |
486 |
hashes, size = self.node.node_purge_children( |
|
486 |
hashes, size, serials = self.node.node_purge_children(
|
|
487 | 487 |
node, until, CLUSTER_HISTORY) |
488 | 488 |
for h in hashes: |
489 | 489 |
self.store.map_delete(h) |
490 | 490 |
self.node.node_purge_children(node, until, CLUSTER_DELETED) |
491 |
self._report_size_change(user, account, -size, {'action': |
|
492 |
'container purge', 'path': path}) |
|
491 |
self._report_size_change(user, account, -size, |
|
492 |
{'action':'container purge', 'path': path, |
|
493 |
'versions': serials}) |
|
493 | 494 |
return |
494 | 495 |
|
495 | 496 |
if not delimiter: |
496 | 497 |
if self._get_statistics(node)[0] > 0: |
497 | 498 |
raise ContainerNotEmpty('Container is not empty') |
498 |
hashes, size = self.node.node_purge_children( |
|
499 |
hashes, size, serials = self.node.node_purge_children(
|
|
499 | 500 |
node, inf, CLUSTER_HISTORY) |
500 | 501 |
for h in hashes: |
501 | 502 |
self.store.map_delete(h) |
502 | 503 |
self.node.node_purge_children(node, inf, CLUSTER_DELETED) |
503 | 504 |
self.node.node_remove(node) |
504 |
self._report_size_change(user, account, -size, {'action': |
|
505 |
'container delete', 'path': path}) |
|
505 |
self._report_size_change(user, account, -size, |
|
506 |
{'action': 'container delete', |
|
507 |
'path': path, |
|
508 |
'versions': serials}) |
|
506 | 509 |
else: |
507 | 510 |
# remove only contents |
508 | 511 |
src_names = self._list_objects_no_limit(user, account, container, prefix='', delimiter=None, virtual=False, domain=None, keys=[], shared=False, until=None, size_range=None, all_props=True, public=False) |
... | ... | |
514 | 517 |
del_size = self._apply_versioning( |
515 | 518 |
account, container, src_version_id) |
516 | 519 |
if del_size: |
517 |
self._report_size_change(user, account, -del_size, {'action': 'object delete', 'path': path}) |
|
520 |
self._report_size_change(user, account, -del_size, |
|
521 |
{'action': 'object delete', |
|
522 |
'path': path, 'versions': [dest_version_id]}) |
|
518 | 523 |
self._report_object_change( |
519 | 524 |
user, account, path, details={'action': 'object delete'}) |
520 | 525 |
paths.append(path) |
... | ... | |
804 | 809 |
(container_quota > 0 and self._get_statistics(container_node)[1] + size_delta > container_quota): |
805 | 810 |
# This must be executed in a transaction, so the version is never created if it fails. |
806 | 811 |
raise QuotaError |
807 |
self._report_size_change(user, account, size_delta, { |
|
808 |
'action': 'object update', 'path': path}) |
|
812 |
self._report_size_change(user, account, size_delta, |
|
813 |
{'action': 'object update', 'path': path, |
|
814 |
'versions': [dest_version_id]}) |
|
809 | 815 |
|
810 | 816 |
if permissions is not None: |
811 | 817 |
self.permissions.access_set(path, permissions) |
... | ... | |
919 | 925 |
return |
920 | 926 |
hashes = [] |
921 | 927 |
size = 0 |
922 |
h, s = self.node.node_purge(node, until, CLUSTER_NORMAL) |
|
928 |
serials = [] |
|
929 |
h, s, v = self.node.node_purge(node, until, CLUSTER_NORMAL) |
|
923 | 930 |
hashes += h |
924 | 931 |
size += s |
925 |
h, s = self.node.node_purge(node, until, CLUSTER_HISTORY) |
|
932 |
serials += v |
|
933 |
h, s, v = self.node.node_purge(node, until, CLUSTER_HISTORY) |
|
926 | 934 |
hashes += h |
927 | 935 |
size += s |
936 |
serials += v |
|
928 | 937 |
for h in hashes: |
929 | 938 |
self.store.map_delete(h) |
930 | 939 |
self.node.node_purge(node, until, CLUSTER_DELETED) |
... | ... | |
932 | 941 |
props = self._get_version(node) |
933 | 942 |
except NameError: |
934 | 943 |
self.permissions.access_clear(path) |
935 |
self._report_size_change(user, account, -size, { |
|
936 |
'action': 'object purge', 'path': path}) |
|
944 |
self._report_size_change(user, account, -size, |
|
945 |
{'action': 'object purge', 'path': path, |
|
946 |
'versions': serials}) |
|
937 | 947 |
return |
938 | 948 |
|
939 | 949 |
path, node = self._lookup_object(account, container, name) |
940 | 950 |
src_version_id, dest_version_id = self._put_version_duplicate(user, node, size=0, type='', hash=None, checksum='', cluster=CLUSTER_DELETED) |
941 | 951 |
del_size = self._apply_versioning(account, container, src_version_id) |
942 | 952 |
if del_size: |
943 |
self._report_size_change(user, account, -del_size, { |
|
944 |
'action': 'object delete', 'path': path}) |
|
953 |
self._report_size_change(user, account, -del_size, |
|
954 |
{'action': 'object delete', 'path': path, |
|
955 |
'versions': [dest_version_id]}) |
|
945 | 956 |
self._report_object_change( |
946 | 957 |
user, account, path, details={'action': 'object delete'}) |
947 | 958 |
self.permissions.access_clear(path) |
... | ... | |
957 | 968 |
del_size = self._apply_versioning( |
958 | 969 |
account, container, src_version_id) |
959 | 970 |
if del_size: |
960 |
self._report_size_change(user, account, -del_size, {'action': 'object delete', 'path': path}) |
|
971 |
self._report_size_change(user, account, -del_size, |
|
972 |
{'action': 'object delete', |
|
973 |
'path': path, |
|
974 |
'versions': [dest_version_id]}) |
|
961 | 975 |
self._report_object_change( |
962 | 976 |
user, account, path, details={'action': 'object delete'}) |
963 | 977 |
paths.append(path) |
... | ... | |
1215 | 1229 |
logger.debug( |
1216 | 1230 |
"_report_size_change: %s %s %s %s", user, account, size, details) |
1217 | 1231 |
self.messages.append((QUEUE_MESSAGE_KEY_PREFIX % ('resource.diskspace',), |
1218 |
account, |
|
1219 |
QUEUE_INSTANCE_ID, |
|
1220 |
'diskspace', |
|
1221 |
float(size), |
|
1222 |
details)) |
|
1232 |
account, QUEUE_INSTANCE_ID, 'diskspace', |
|
1233 |
float(size), details)) |
|
1223 | 1234 |
|
1224 | 1235 |
def _report_object_change(self, user, account, path, details={}): |
1225 | 1236 |
details.update({'user': user}) |
Also available in: Unified diff