feat(migrate): reset federation sync checkpoint for legacy DM replication
Adds migrateResetFederationSyncForLegacyDms which resets last_synced_at=0 on all active federation peers so the S2S sync worker re-pulls all mutation log entries (including newly-backfilled legacy DMs) on next server startup. A legacy_dm_sync_done flag on instance_settings ensures this runs exactly once.
This commit is contained in:
@@ -610,6 +610,8 @@ export function runMigrations(db: Database.Database): void {
|
||||
console.error('Federation mutation log backfill failed (non-fatal):', err);
|
||||
}
|
||||
|
||||
migrateResetFederationSyncForLegacyDms(db);
|
||||
|
||||
console.log('Migrations complete.');
|
||||
}
|
||||
|
||||
@@ -1592,3 +1594,31 @@ function migrateFixOneOnOneOwnerIds(db: Database.Database): void {
|
||||
console.error('migrateFixOneOnOneOwnerIds failed (non-fatal):', err);
|
||||
}
|
||||
}
|
||||
|
||||
/** Reset federation sync checkpoint so legacy DMs get replicated via S2S */
|
||||
function migrateResetFederationSyncForLegacyDms(db: Database.Database): void {
|
||||
try {
|
||||
const peersTable = db.prepare(`PRAGMA table_info(federation_peers)`).all() as Array<{ name: string }>;
|
||||
if (peersTable.length === 0) return; // No federation tables yet
|
||||
|
||||
const hasSyncFlag = (db.pragma('table_info(instance_settings)') as Array<{ name: string }>)
|
||||
.some(c => c.name === 'legacy_dm_sync_done');
|
||||
|
||||
if (!hasSyncFlag) {
|
||||
db.exec(`ALTER TABLE instance_settings ADD COLUMN legacy_dm_sync_done INTEGER DEFAULT 0`);
|
||||
}
|
||||
|
||||
const settings = db.prepare('SELECT legacy_dm_sync_done FROM instance_settings WHERE id = 1').get() as { legacy_dm_sync_done: number } | undefined;
|
||||
if (settings?.legacy_dm_sync_done) return; // Already ran
|
||||
|
||||
const result = db.prepare(`UPDATE federation_peers SET last_synced_at = 0 WHERE status = 'active'`).run();
|
||||
|
||||
if (result.changes > 0) {
|
||||
console.log(`[migrate] Reset sync checkpoint on ${result.changes} federation peer(s) for legacy DM replication`);
|
||||
}
|
||||
|
||||
db.prepare('UPDATE instance_settings SET legacy_dm_sync_done = 1 WHERE id = 1').run();
|
||||
} catch (err) {
|
||||
console.error('migrateResetFederationSyncForLegacyDms failed (non-fatal):', err);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user