From a853d254eef8a98811fbf4ad075c7f04b9c52c6d Mon Sep 17 00:00:00 2001 From: Pedro Ferreira Date: Mon, 22 Aug 2016 16:28:12 +0200 Subject: [PATCH] Livesync: cascade deletes, using fast DB queries --- livesync/indico_livesync/simplify.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/livesync/indico_livesync/simplify.py b/livesync/indico_livesync/simplify.py index bab97a6..e04834a 100644 --- a/livesync/indico_livesync/simplify.py +++ b/livesync/indico_livesync/simplify.py @@ -44,7 +44,8 @@ def process_records(records): :return: a dict mapping object references to `SimpleChange` bitsets """ changes = defaultdict(int) - cascaded_records = set() + cascaded_update_records = set() + cascaded_delete_records = set() for record in records: if record.change != ChangeType.deleted and record.object is None: @@ -57,15 +58,19 @@ def process_records(records): elif record.change == ChangeType.deleted: assert record.type != EntryType.category changes[record.object] |= SimpleChange.deleted + cascaded_delete_records.add(record) elif record.change in {ChangeType.moved, ChangeType.protection_changed}: - cascaded_records.add(record) + cascaded_update_records.add(record) elif record.change == ChangeType.data_changed: assert record.type != EntryType.category changes[record.object] |= SimpleChange.updated - for obj in _process_cascaded(cascaded_records): + for obj in _process_cascaded(cascaded_update_records): changes[obj] |= SimpleChange.updated + for obj in _process_cascaded(cascaded_delete_records): + changes[obj] |= SimpleChange.deleted + return changes