diff --git a/jest.config.js b/jest.config.js index f805cf64..6887a5b2 100644 --- a/jest.config.js +++ b/jest.config.js @@ -28,4 +28,6 @@ module.exports = { setupFiles: [ './jest.setup.js' ], setupFilesAfterEnv: ['./jest.setup.redis-mock.js', './jest.setup.mongo-repl-set.js'], + + globalTeardown: './jest.global-teardown.js', }; diff --git a/jest.global-teardown.js b/jest.global-teardown.js new file mode 100644 index 00000000..4ee0b59a --- /dev/null +++ b/jest.global-teardown.js @@ -0,0 +1,9 @@ +const process = require('process'); + +module.exports = () => { + if (process.env.CI) { + setTimeout(() => { + process.exit(0); + }, 1000); + } +} \ No newline at end of file diff --git a/jest.setup.mongo-repl-set.js b/jest.setup.mongo-repl-set.js index 2cb302f8..14b15095 100644 --- a/jest.setup.mongo-repl-set.js +++ b/jest.setup.mongo-repl-set.js @@ -28,15 +28,15 @@ beforeAll(async () => { * Wait for the replica set to initialize all nodes */ do { - await new Promise(resolve => setTimeout(resolve, 1000)); status = await admin.command({ replSetGetStatus: 1 }); const primary = status.members.find(member => member.stateStr === 'PRIMARY'); - const secondary = status.members.find(member => member.stateStr === 'SECONDARY'); - if (primary && secondary) { + if (primary) { break; } + + await new Promise(resolve => setTimeout(resolve, 1000)); } while (Date.now() - startTime < timeout); console.log('✅ Replica set is stable'); diff --git a/workers/archiver/src/index.ts b/workers/archiver/src/index.ts index d45c863f..18d39de4 100644 --- a/workers/archiver/src/index.ts +++ b/workers/archiver/src/index.ts @@ -1,7 +1,6 @@ import { DatabaseController } from '../../../lib/db/controller'; import { Worker } from '../../../lib/worker'; import * as pkg from '../package.json'; -import asyncForEach from '../../../lib/utils/asyncForEach'; import { Collection, Db, GridFSBucket, ObjectId, ObjectID } from 'mongodb'; import axios from 'axios'; import { ReleaseFileData, ReleaseRecord, ReportData, ReportDataByProject } from './types'; @@ -85,10 +84,13 @@ export default class ArchiverWorker extends Worker { this.logger.info(`Start archiving at ${startDate}`); - const projects = await this.projectCollection.find({}).toArray(); + const projects = await this.projectCollection.find({}).project({ + _id: 1, + name: 1 + }); const projectsData: ReportDataByProject[] = []; - await asyncForEach(projects, async (project) => { + for await (const project of projects) { const archivedEventsCount = await this.archiveProjectEvents(project); const removedReleasesCount = await this.removeOldReleases(project); @@ -98,7 +100,7 @@ export default class ArchiverWorker extends Worker { archivedEventsCount, removedReleasesCount, }); - }); + } const finishDate = new Date(); const dbSizeOnFinish = (await this.eventsDbConnection.stats()).dataSize; @@ -347,9 +349,9 @@ export default class ArchiverWorker extends Worker { }); this.logger.info('Report notification response:', { - status: response.status, - statusText: response.statusText, - data: response.data + status: response?.status, + statusText: response?.statusText, + data: response?.data }); }