1f5003bd32
* feat: basic structure * fix: detect regions out of sync * feat: added sync logic * fix: tests * feat: merge all strategy * fix: mr comments * fix: updatedAt in updates * feat: project updatedAt no longer is a hidden operation * feat: project region sync * feat: delete project on cross-region-move * removal: unnecesary permisions * fix: caching issue * fix: saved views on project cross region move
61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import { moduleLogger } from '@/observability/logging'
|
|
import {
|
|
getValidDefaultProjectRegionKey,
|
|
initializeRegisteredRegionClients as initDb
|
|
} from '@/modules/multiregion/utils/dbSelector'
|
|
import { isMultiRegionEnabled } from '@/modules/multiregion/helpers'
|
|
import type { SpeckleModule } from '@/modules/shared/helpers/typeHelper'
|
|
import {
|
|
initializeRegisteredRegionClients as initBlobs,
|
|
isMultiRegionBlobStorageEnabled
|
|
} from '@/modules/multiregion/utils/blobStorageSelector'
|
|
import {
|
|
initializeQueue,
|
|
shutdownQueue,
|
|
startQueue
|
|
} from '@/modules/multiregion/services/queue'
|
|
import { scheduleStalePreparedTransactionCleanup } from '@/modules/multiregion/tasks/pendingTransactions'
|
|
import type cron from 'node-cron'
|
|
import { scheduleAutoSyncRegions } from '@/modules/multiregion/tasks/regionSync'
|
|
|
|
let scheduledTasks: cron.ScheduledTask[] = []
|
|
|
|
const multiRegion: SpeckleModule = {
|
|
async init({ isInitial }) {
|
|
const isEnabled = isMultiRegionEnabled()
|
|
if (!isEnabled) {
|
|
return
|
|
}
|
|
|
|
moduleLogger.info('🌍 Init multiRegion module')
|
|
|
|
// Init registered region clients
|
|
await initDb()
|
|
// validate default project region key
|
|
await getValidDefaultProjectRegionKey()
|
|
|
|
const isBlobStorageEnabled = isMultiRegionBlobStorageEnabled()
|
|
if (isBlobStorageEnabled) {
|
|
moduleLogger.info('🌍 Init multiRegion blob storage')
|
|
await initBlobs()
|
|
}
|
|
|
|
if (isInitial) {
|
|
await initializeQueue()
|
|
await startQueue()
|
|
scheduledTasks = [
|
|
await scheduleStalePreparedTransactionCleanup(),
|
|
await scheduleAutoSyncRegions()
|
|
]
|
|
}
|
|
},
|
|
async shutdown() {
|
|
await shutdownQueue()
|
|
scheduledTasks.forEach((task) => {
|
|
task.stop()
|
|
})
|
|
}
|
|
}
|
|
|
|
export default multiRegion
|