forked from MirrorHub/synapse
Explode on duplicate delta file names. (#6565)
This commit is contained in:
parent
3d46124ad0
commit
0b5dbadd96
2 changed files with 19 additions and 0 deletions
1
changelog.d/6565.misc
Normal file
1
changelog.d/6565.misc
Normal file
|
@ -0,0 +1 @@
|
|||
Add assertion that schema delta file names are unique.
|
|
@ -18,6 +18,7 @@ import imp
|
|||
import logging
|
||||
import os
|
||||
import re
|
||||
from collections import Counter
|
||||
|
||||
import attr
|
||||
|
||||
|
@ -315,6 +316,9 @@ def _upgrade_existing_database(
|
|||
)
|
||||
)
|
||||
|
||||
# Used to check if we have any duplicate file names
|
||||
file_name_counter = Counter()
|
||||
|
||||
# Now find which directories have anything of interest.
|
||||
directory_entries = []
|
||||
for directory in directories:
|
||||
|
@ -325,6 +329,9 @@ def _upgrade_existing_database(
|
|||
_DirectoryListing(file_name, os.path.join(directory, file_name))
|
||||
for file_name in file_names
|
||||
)
|
||||
|
||||
for file_name in file_names:
|
||||
file_name_counter[file_name] += 1
|
||||
except FileNotFoundError:
|
||||
# Data stores can have empty entries for a given version delta.
|
||||
pass
|
||||
|
@ -333,6 +340,17 @@ def _upgrade_existing_database(
|
|||
"Could not open delta dir for version %d: %s" % (v, directory)
|
||||
)
|
||||
|
||||
duplicates = set(
|
||||
file_name for file_name, count in file_name_counter.items() if count > 1
|
||||
)
|
||||
if duplicates:
|
||||
# We don't support using the same file name in the same delta version.
|
||||
raise PrepareDatabaseException(
|
||||
"Found multiple delta files with the same name in v%d: %s",
|
||||
v,
|
||||
duplicates,
|
||||
)
|
||||
|
||||
# We sort to ensure that we apply the delta files in a consistent
|
||||
# order (to avoid bugs caused by inconsistent directory listing order)
|
||||
directory_entries.sort()
|
||||
|
|
Loading…
Reference in a new issue