From b8742125f5534b4be0b07af0e3f1254e502c1ad6 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Tue, 4 Feb 2025 16:34:50 +0100 Subject: [PATCH] [main] [UA] Preserve hidden status of original index during reindexing (#209512) (#209540) Close https://github.com/elastic/kibana/issues/209471 # Backport This will backport the following commits from `8.18` to `main`: - [[UA] Preserve hidden status of original index during reindexing (#209512)](https://github.com/elastic/kibana/pull/209512) ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) --- .../lib/reindexing/reindex_service.test.ts | 35 +++++++++++++++++-- .../server/lib/reindexing/reindex_service.ts | 10 +++++- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts index 5fdd333347f57..7726dceffb7d5 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts @@ -799,18 +799,42 @@ describe('reindexService', () => { expect(updatedOp.attributes.lastCompletedStep).toEqual(ReindexStep.aliasCreated); expect(clusterClient.asCurrentUser.indices.updateAliases).toHaveBeenCalledWith({ actions: [ - { add: { index: 'myIndex-reindex-0', alias: 'myIndex' } }, + { add: { index: 'myIndex-reindex-0', alias: 'myIndex', is_hidden: false } }, { remove_index: { index: 'myIndex' } }, ], }); }); + it.each([true, 'true'])( + 'switches aliases, passing on hidden status of index to alias if defined (hidden value: %p)', + async (hidden) => { + clusterClient.asCurrentUser.indices.getAlias.mockResponseOnce({ + myIndex: { aliases: {} }, + }); + clusterClient.asCurrentUser.indices.getSettings.mockResponseOnce({ + myIndex: { settings: { index: { hidden } } }, + }); + clusterClient.asCurrentUser.indices.updateAliases.mockResponseOnce({ + acknowledged: true, + }); + const updatedOp = await service.processNextStep(reindexOp); + expect(updatedOp.attributes.lastCompletedStep).toEqual(ReindexStep.aliasCreated); + expect(clusterClient.asCurrentUser.indices.updateAliases).toHaveBeenCalledWith({ + actions: [ + { add: { index: 'myIndex-reindex-0', alias: 'myIndex', is_hidden: true } }, + { remove_index: { index: 'myIndex' } }, + ], + }); + } + ); + it('moves existing aliases over to new index', async () => { clusterClient.asCurrentUser.indices.getAlias.mockResponseOnce({ myIndex: { aliases: { myAlias: {}, myFilteredAlias: { filter: { term: { https: true } } }, + myHiddenAlias: { is_hidden: true }, }, }, }); @@ -821,7 +845,7 @@ describe('reindexService', () => { expect(updatedOp.attributes.lastCompletedStep).toEqual(ReindexStep.aliasCreated); expect(clusterClient.asCurrentUser.indices.updateAliases).toHaveBeenCalledWith({ actions: [ - { add: { index: 'myIndex-reindex-0', alias: 'myIndex' } }, + { add: { index: 'myIndex-reindex-0', alias: 'myIndex', is_hidden: false } }, { remove_index: { index: 'myIndex' } }, { add: { index: 'myIndex-reindex-0', alias: 'myAlias' } }, { @@ -831,6 +855,13 @@ describe('reindexService', () => { filter: { term: { https: true } }, }, }, + { + add: { + index: 'myIndex-reindex-0', + alias: 'myHiddenAlias', + is_hidden: true, + }, + }, ], }); }); diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/lib/reindexing/reindex_service.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/lib/reindexing/reindex_service.ts index a17dbdadf0214..31bfe99f34c75 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/lib/reindexing/reindex_service.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/lib/reindexing/reindex_service.ts @@ -349,6 +349,12 @@ export const reindexServiceFactory = ( return response[indexName]?.aliases ?? {}; }; + const isIndexHidden = async (indexName: string) => { + const response = await esClient.indices.getSettings({ index: indexName }); + const isHidden = response[indexName]?.settings?.index?.hidden; + return isHidden === true || isHidden === 'true'; + }; + /** * Restores the original index settings in the new index that had other defaults for reindexing performance reasons * @param reindexOp @@ -391,9 +397,11 @@ export const reindexServiceFactory = ( add: { index: newIndexName, alias: aliasName, ...existingAliases[aliasName] }, })); + const isHidden = await isIndexHidden(indexName); + const aliasResponse = await esClient.indices.updateAliases({ actions: [ - { add: { index: newIndexName, alias: indexName } }, + { add: { index: newIndexName, alias: indexName, is_hidden: isHidden } }, { remove_index: { index: indexName } }, ...extraAliases, ],