From 0ba44d7bb7e4d9c71aae178b5dff4615afdacb81 Mon Sep 17 00:00:00 2001 From: Jared Ondricek Date: Tue, 23 Jun 2026 13:37:13 -0500 Subject: [PATCH] feat: update search index backup logic to wait for indexing completion and increment schema version --- attack-search/__tests__/search-service.test.js | 18 ++++++++++++++++++ attack-search/src/search-service.js | 2 +- attack-search/src/settings.js | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/attack-search/__tests__/search-service.test.js b/attack-search/__tests__/search-service.test.js index a6ade5fff0a..87beddcec06 100644 --- a/attack-search/__tests__/search-service.test.js +++ b/attack-search/__tests__/search-service.test.js @@ -52,6 +52,24 @@ describe('SearchService', () => { expect(tableResults).toEqual(data); }); + test('Waits for FlexSearch indexing before backing up the search index', async () => { + let resolveAddBulk; + searchService.attackIndex.addBulk = jest.fn(() => new Promise((resolve) => { + resolveAddBulk = resolve; + })); + searchService.backupSearchIndex = jest.fn(() => Promise.resolve()); + + const initialization = searchService.initializeAsync(data); + await Promise.resolve(); + + expect(searchService.backupSearchIndex).not.toHaveBeenCalled(); + + resolveAddBulk(); + await initialization; + + expect(searchService.backupSearchIndex).toHaveBeenCalled(); + }); + test('Backup search index completes when FlexSearch exports fewer than nine persisted chunks', async () => { const exportedChunks = [ ['title.1.map', 'title map data'], diff --git a/attack-search/src/search-service.js b/attack-search/src/search-service.js index 627ea58ff8a..5a38f6ecfe5 100644 --- a/attack-search/src/search-service.js +++ b/attack-search/src/search-service.js @@ -166,7 +166,7 @@ module.exports = class SearchService { this.maxSearchResults = searchableDocuments.length; // Add the data to the in-memory FlexSearch instance - this.attackIndex.addBulk(searchableDocuments); + await this.attackIndex.addBulk(searchableDocuments); console.debug('Backing up search index...'); diff --git a/attack-search/src/settings.js b/attack-search/src/settings.js index 0fa7fbaf21f..14451cd250b 100644 --- a/attack-search/src/settings.js +++ b/attack-search/src/settings.js @@ -1,7 +1,7 @@ const baseURL = ''; // TODO migrate from base_url (generated via Pelican) const packageJson = require('../package.json'); -const searchCacheSchemaVersion = 2; +const searchCacheSchemaVersion = 3; const flexSearchVersion = packageJson.dependencies.flexsearch.replace(/^[^\d]*/, ''); const searchCacheCompatibilityVersion = `flexsearch-${flexSearchVersion}`;