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