diff --git a/swh/storage/buffer.py b/swh/storage/buffer.py --- a/swh/storage/buffer.py +++ b/swh/storage/buffer.py @@ -134,13 +134,18 @@ self, object_types: Sequence[LObjectType] = OBJECT_TYPES ) -> Dict[str, int]: summary: Dict[str, int] = self.storage.flush(object_types) + + def update_summary(stats): + for k, v in stats.items(): + summary[k] = v + summary.get(k, 0) + for object_type in object_types: buffer_ = self._objects[object_type] batches = grouper(buffer_.values(), n=self._buffer_thresholds[object_type]) for batch in batches: add_fn = getattr(self.storage, "%s_add" % object_type) stats = add_fn(list(batch)) - summary = {k: v + summary.get(k, 0) for k, v in stats.items()} + update_summary(stats) self.clear_buffers(object_types) diff --git a/swh/storage/tests/test_buffer.py b/swh/storage/tests/test_buffer.py --- a/swh/storage/tests/test_buffer.py +++ b/swh/storage/tests/test_buffer.py @@ -481,3 +481,30 @@ storage = get_storage_with_buffer_config() assert storage is not None + + +def test_buffer_flush_stats(sample_data) -> None: + storage = get_storage_with_buffer_config() + + s = storage.content_add(sample_data.contents) + assert s == {} + s = storage.skipped_content_add(sample_data.skipped_contents) + assert s == {} + s = storage.directory_add(sample_data.directories) + assert s == {} + s = storage.revision_add(sample_data.revisions) + assert s == {} + s = storage.release_add(sample_data.releases) + assert s == {} + s = storage.snapshot_add(sample_data.snapshots) + assert s == {} + + # Flush all the things + s = storage.flush() + assert s["content:add"] > 0 + assert s["content:add:bytes"] > 0 + assert s["skipped_content:add"] > 0 + assert s["directory:add"] > 0 + assert s["revision:add"] > 0 + assert s["release:add"] > 0 + assert s["snapshot:add"] > 0