Prevent opened board re-migrating and reloading every 5 seconds.

Thanks to xet7 !
This commit is contained in:
Lauri Ojansivu 2025-10-21 14:12:12 +03:00
parent ef7771febb
commit 4987a95d8e
3 changed files with 59 additions and 3 deletions

View file

@ -646,6 +646,23 @@ class MigrationManager {
} }
} }
/**
* Fix boards that are stuck in migration loop
*/
fixStuckBoards() {
try {
Meteor.call('boardMigration.fixStuckBoards', (error, result) => {
if (error) {
console.error('Failed to fix stuck boards:', error);
} else {
console.log('Fix stuck boards result:', result);
}
});
} catch (error) {
console.error('Error fixing stuck boards:', error);
}
}
/** /**
* Start migration process using cron system * Start migration process using cron system
*/ */

View file

@ -314,10 +314,11 @@ class BoardMigrationDetector {
*/ */
markBoardAsMigrated(boardId, migrationType) { markBoardAsMigrated(boardId, migrationType) {
try { try {
// Update migration markers // Update migration markers and version
const updateQuery = {}; const updateQuery = {};
updateQuery[`migrationMarkers.${migrationType}Migrated`] = true; updateQuery[`migrationMarkers.${migrationType}Migrated`] = true;
updateQuery['migrationMarkers.lastMigration'] = new Date(); updateQuery['migrationMarkers.lastMigration'] = new Date();
updateQuery['migrationVersion'] = 1; // Set migration version to prevent re-migration
Boards.update(boardId, { $set: updateQuery }); Boards.update(boardId, { $set: updateQuery });
@ -392,5 +393,42 @@ Meteor.methods({
} }
return boardMigrationDetector.startBoardMigration(boardId); return boardMigrationDetector.startBoardMigration(boardId);
},
'boardMigration.fixStuckBoards'() {
if (!this.userId) {
throw new Meteor.Error('not-authorized');
}
// Find boards that have migration markers but no migrationVersion
const stuckBoards = Boards.find({
'migrationMarkers.fullMigrationCompleted': true,
$or: [
{ migrationVersion: { $exists: false } },
{ migrationVersion: { $lt: 1 } }
]
}).fetch();
let fixedCount = 0;
stuckBoards.forEach(board => {
try {
Boards.update(board._id, {
$set: {
migrationVersion: 1,
'migrationMarkers.lastMigration': new Date()
}
});
fixedCount++;
console.log(`Fixed stuck board: ${board._id} (${board.title})`);
} catch (error) {
console.error(`Error fixing board ${board._id}:`, error);
}
});
return {
message: `Fixed ${fixedCount} stuck boards`,
fixedCount,
totalStuck: stuckBoards.length
};
} }
}); });

View file

@ -607,11 +607,12 @@ class CronMigrationManager {
*/ */
markBoardAsMigrated(boardId, migrationType) { markBoardAsMigrated(boardId, migrationType) {
try { try {
// Update board with migration markers // Update board with migration markers and version
const updateQuery = { const updateQuery = {
'migrationMarkers.fullMigrationCompleted': true, 'migrationMarkers.fullMigrationCompleted': true,
'migrationMarkers.lastMigration': new Date(), 'migrationMarkers.lastMigration': new Date(),
'migrationMarkers.migrationType': migrationType 'migrationMarkers.migrationType': migrationType,
'migrationVersion': 1 // Set migration version to prevent re-migration
}; };
// Update the board document // Update the board document