diff options
author | Erik Johnston <erik@matrix.org> | 2021-01-14 18:57:32 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-14 18:57:32 +0000 |
commit | 1a08e0cdab0b3475fd4189aa1e3b6f9aaa823ccf (patch) | |
tree | 8e0363d387ddf7ee01c92ee95cff12850fe6a588 | |
parent | Fix perf of get_cross_signing_keys (#9116) (diff) | |
download | synapse-1a08e0cdab0b3475fd4189aa1e3b6f9aaa823ccf.tar.xz |
Fix event chain bg update. (#9118)
We passed in a graph to `sorted_topologically` which didn't have an entry for each node (as we dropped nodes with no edges).
-rw-r--r-- | changelog.d/9118.misc | 1 | ||||
-rw-r--r-- | synapse/util/iterutils.py | 2 | ||||
-rw-r--r-- | tests/util/test_itertools.py | 8 |
3 files changed, 10 insertions, 1 deletions
diff --git a/changelog.d/9118.misc b/changelog.d/9118.misc new file mode 100644 index 0000000000..346741d982 --- /dev/null +++ b/changelog.d/9118.misc @@ -0,0 +1 @@ +Improve efficiency of large state resolutions. diff --git a/synapse/util/iterutils.py b/synapse/util/iterutils.py index f7b4857a84..6ef2b008a4 100644 --- a/synapse/util/iterutils.py +++ b/synapse/util/iterutils.py @@ -92,7 +92,7 @@ def sorted_topologically( node = heapq.heappop(zero_degree) yield node - for edge in reverse_graph[node]: + for edge in reverse_graph.get(node, []): if edge in degree_map: degree_map[edge] -= 1 if degree_map[edge] == 0: diff --git a/tests/util/test_itertools.py b/tests/util/test_itertools.py index 1184cea5a3..522c8061f9 100644 --- a/tests/util/test_itertools.py +++ b/tests/util/test_itertools.py @@ -56,6 +56,14 @@ class SortTopologically(TestCase): graph = {} # type: Dict[int, List[int]] self.assertEqual(list(sorted_topologically([], graph)), []) + def test_handle_empty_graph(self): + "Test that a graph where a node doesn't have an entry is treated as empty" + + graph = {} # type: Dict[int, List[int]] + + # For disconnected nodes the output is simply sorted. + self.assertEqual(list(sorted_topologically([1, 2], graph)), [1, 2]) + def test_disconnected(self): "Test that a graph with no edges work" |