refactor(core): Ungate workflow indexing (#30971)

This commit is contained in:
Iván Ovejero 2026-05-22 15:13:54 +02:00 committed by GitHub
parent b062c08471
commit 694a7a0614
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 6 additions and 68 deletions

View File

@ -19,10 +19,6 @@ export class WorkflowsConfig {
@Env('N8N_WORKFLOW_ACTIVATION_BATCH_SIZE')
activationBatchSize: number = 1;
/** Whether to build and maintain workflow dependency indexes (for example, for subworkflow callers). */
@Env('N8N_WORKFLOWS_INDEXING_ENABLED')
indexingEnabled: boolean = true;
/** Number of workflows to process per batch during dependency indexing on startup. Defaults to 10. */
@Env('N8N_WORKFLOW_INDEX_BATCH_SIZE')
indexingBatchSize: number = 10;

View File

@ -204,7 +204,6 @@ describe('GlobalConfig', () => {
defaultName: 'My workflow',
callerPolicyDefaultOption: 'workflowsFromSameOwner',
activationBatchSize: 1,
indexingEnabled: true,
indexingBatchSize: 10,
useWorkflowPublicationService: false,
autosaveDisabled: false,

View File

@ -1,18 +1,12 @@
import { GetResourceDependenciesDto, GetResourceDependencyCountsDto } from '@n8n/api-types';
import { WorkflowsConfig } from '@n8n/config';
import { AuthenticatedRequest } from '@n8n/db';
import { Body, Post, RestController } from '@n8n/decorators';
import { ServiceUnavailableError } from '@/errors/response-errors/service-unavailable.error';
import { WorkflowDependencyQueryService } from './workflow-dependency-query.service';
@RestController('/workflow-dependencies')
export class WorkflowDependencyController {
constructor(
private readonly workflowDependencyQueryService: WorkflowDependencyQueryService,
private readonly workflowsConfig: WorkflowsConfig,
) {}
constructor(private readonly workflowDependencyQueryService: WorkflowDependencyQueryService) {}
@Post('/counts')
async getResourceDependencyCounts(
@ -20,8 +14,6 @@ export class WorkflowDependencyController {
_res: unknown,
@Body body: GetResourceDependencyCountsDto,
) {
this.assertIndexingEnabled();
return await this.workflowDependencyQueryService.getDependencyCounts(
body.resourceIds,
body.resourceType,
@ -35,18 +27,10 @@ export class WorkflowDependencyController {
_res: unknown,
@Body body: GetResourceDependenciesDto,
) {
this.assertIndexingEnabled();
return await this.workflowDependencyQueryService.getResourceDependencies(
body.resourceIds,
body.resourceType,
req.user,
);
}
private assertIndexingEnabled() {
if (!this.workflowsConfig.indexingEnabled) {
throw new ServiceUnavailableError('Workflow dependency indexing is not enabled');
}
}
}

View File

@ -1,5 +1,5 @@
import { inDevelopment, inProduction } from '@n8n/backend-common';
import { SecurityConfig, WorkflowsConfig } from '@n8n/config';
import { SecurityConfig } from '@n8n/config';
import { Time } from '@n8n/constants';
import type { APIRequest, AuthenticatedRequest } from '@n8n/db';
import { Container, Service } from '@n8n/di';
@ -492,12 +492,10 @@ export class Server extends AbstractServer {
}
private async initializeWorkflowIndexing() {
if (Container.get(WorkflowsConfig).indexingEnabled) {
const { WorkflowIndexService } = await import(
'@/modules/workflow-index/workflow-index.service'
);
Container.get(WorkflowIndexService).init();
}
const { WorkflowIndexService } = await import(
'@/modules/workflow-index/workflow-index.service'
);
Container.get(WorkflowIndexService).init();
}
protected setupPushServer(): void {

View File

@ -3,7 +3,6 @@ import {
randomCredentialPayload,
shareWorkflowWithUsers,
} from '@n8n/backend-test-utils';
import { WorkflowsConfig } from '@n8n/config';
import { WorkflowDependencyRepository } from '@n8n/db';
import { Container } from '@n8n/di';
@ -13,7 +12,6 @@ import * as utils from '../shared/utils';
let testServer: ReturnType<typeof utils.setupTestServer>;
let depRepo: WorkflowDependencyRepository;
let workflowsConfig: WorkflowsConfig;
testServer = utils.setupTestServer({
endpointGroups: ['workflowDependencies'],
@ -22,11 +20,6 @@ testServer = utils.setupTestServer({
beforeAll(() => {
depRepo = Container.get(WorkflowDependencyRepository);
workflowsConfig = Container.get(WorkflowsConfig);
});
afterEach(() => {
workflowsConfig.indexingEnabled = true;
});
/** Seed a workflow_dependency row (draft). */
@ -408,35 +401,3 @@ describe('POST /workflow-dependencies/details', () => {
expect(resp.statusCode).toBe(400);
});
});
describe('indexing disabled', () => {
it('should return 503 for counts when indexing is disabled', async () => {
workflowsConfig.indexingEnabled = false;
const owner = await createOwner();
const resp = await testServer
.authAgentFor(owner)
.post('/workflow-dependencies/counts')
.send({
resourceIds: ['some-id'],
resourceType: 'workflow',
});
expect(resp.statusCode).toBe(503);
});
it('should return 503 for details when indexing is disabled', async () => {
workflowsConfig.indexingEnabled = false;
const owner = await createOwner();
const resp = await testServer
.authAgentFor(owner)
.post('/workflow-dependencies/details')
.send({
resourceIds: ['some-id'],
resourceType: 'workflow',
});
expect(resp.statusCode).toBe(503);
});
});