fix(registry): a write repairs a YAML that a failed migration left in format 1 (Issue #71)
The writer commits the migrated DB before it replaces the YAML. If that replacement failed, the DB said format 2 and the next run did nothing. When the DB is current the writer now also reads the YAML's format and rewrites a YAML that is older or missing. Refs #71 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
263a72483a
commit
015075077c
1 file changed
+11
@@ -124,6 +124,17 @@ def atomic_dump_yaml_main():
|
|||||||
if from_version < registry_format.CURRENT:
|
if from_version < registry_format.CURRENT:
|
||||||
d, migrated_rows = registry_format.migrate(d)
|
d, migrated_rows = registry_format.migrate(d)
|
||||||
force_yaml = True
|
force_yaml = True
|
||||||
|
elif row:
|
||||||
|
# The DB is current; its YAML copy may not be (a migration whose
|
||||||
|
# YAML rewrite failed after the DB commit). Then rewrite it.
|
||||||
|
y = None
|
||||||
|
if os.path.exists(yaml_path):
|
||||||
|
try:
|
||||||
|
with open(yaml_path) as f:
|
||||||
|
y = yaml.safe_load(f)
|
||||||
|
except Exception:
|
||||||
|
y = None
|
||||||
|
force_yaml = registry_format.stored_version(y) < registry_format.CURRENT
|
||||||
|
|
||||||
old_sessions = get_all_sessions_status(d)
|
old_sessions = get_all_sessions_status(d)
|
||||||
# a mutation that replaces a row the monitor registered for a pane it
|
# a mutation that replaces a row the monitor registered for a pane it
|
||||||
|
|||||||
Reference in new issue
Block a user