Преглед изворни кода

enable configuring parallelExecLimit from configManager

Futa Arai пре 1 година
родитељ
комит
950a4a5a94

+ 6 - 4
apps/app/src/features/page-bulk-export/server/service/page-bulk-export/page-bulk-export-job-manager.spec.ts

@@ -1,6 +1,8 @@
 import { Readable } from 'stream';
 import { finished } from 'stream/promises';
 
+import { configManager } from '~/server/service/config-manager';
+
 import { BulkExportJobExpiredError, BulkExportJobRestartedError } from './errors';
 import { PageBulkExportJobManager } from './page-bulk-export-job-manager';
 
@@ -8,6 +10,10 @@ describe('PageBulkExportJobManager', () => {
   let pageBulkExportServiceMock;
   let jobManager: PageBulkExportJobManager;
 
+  beforeAll(() => {
+    vi.spyOn(configManager, 'getConfig').mockReturnValue(3);
+  });
+
   beforeEach(() => {
     pageBulkExportServiceMock = {
       executePageBulkExportJob: vi.fn(),
@@ -25,8 +31,6 @@ describe('PageBulkExportJobManager', () => {
         job1: { stream: undefined },
         job2: { stream: undefined },
         job3: { stream: undefined },
-        job4: { stream: undefined },
-        job5: { stream: undefined },
       };
       expect(jobManager.canExecuteNextJob()).toBe(false);
     });
@@ -58,8 +62,6 @@ describe('PageBulkExportJobManager', () => {
         job1: { stream: undefined },
         job2: { stream: undefined },
         job3: { stream: undefined },
-        job4: { stream: undefined },
-        job5: { stream: undefined },
       };
       const job = { _id: 'job2' } as any;
       jobManager.addJob(job);

+ 3 - 1
apps/app/src/features/page-bulk-export/server/service/page-bulk-export/page-bulk-export-job-manager.ts

@@ -3,6 +3,7 @@ import type { Readable } from 'stream';
 import type { HydratedDocument } from 'mongoose';
 
 import type { ObjectIdLike } from '~/server/interfaces/mongoose-utils';
+import { configManager } from '~/server/service/config-manager';
 
 import type { PageBulkExportJobDocument } from '../../models/page-bulk-export-job';
 
@@ -20,7 +21,7 @@ export class PageBulkExportJobManager {
 
   pageBulkExportService: IPageBulkExportService;
 
-  private parallelExecLimit = 5;
+  private parallelExecLimit: number;
 
   // contains jobs being executed and it's information
   // the key is the _id of PageBulkExportJob and the value contains the stream of the job
@@ -33,6 +34,7 @@ export class PageBulkExportJobManager {
 
   constructor(pageBulkExportService: IPageBulkExportService) {
     this.pageBulkExportService = pageBulkExportService;
+    this.parallelExecLimit = configManager.getConfig('crowi', 'app:pageBulkExportParallelExecLimit');
   }
 
   canExecuteNextJob(): boolean {

+ 6 - 0
apps/app/src/server/service/config-loader.ts

@@ -754,6 +754,12 @@ const ENV_VAR_NAME_TO_CONFIG_INFO = {
     type: ValueType.STRING,
     default: '*/10 * * * *', // every 10 minutes
   },
+  BULK_EXPORT_PARALLEL_EXEC_LIMIT: {
+    ns: 'crowi',
+    key: 'app:pageBulkExportParallelExecLimit',
+    type: ValueType.NUMBER,
+    default: 5,
+  },
 };