From a4ca9dc3eaf688b930dbebac3bf76bbcf58772d2 Mon Sep 17 00:00:00 2001 From: pgayvallet Date: Tue, 6 Jul 2021 19:26:39 +0200 Subject: [PATCH 1/7] fix reindex race condition --- ...lk_overwrite_transformed_documents.test.ts | 182 ++++++++++++++++-- .../bulk_overwrite_transformed_documents.ts | 18 +- .../migrationsv2/actions/es_errors.test.ts | 56 ++++++ .../migrationsv2/actions/es_errors.ts | 23 +++ .../actions/wait_for_reindex_task.ts | 17 +- .../migrationsv2/model/model.test.ts | 11 +- .../saved_objects/migrationsv2/model/model.ts | 12 +- 7 files changed, 287 insertions(+), 32 deletions(-) create mode 100644 src/core/server/saved_objects/migrationsv2/actions/es_errors.test.ts create mode 100644 src/core/server/saved_objects/migrationsv2/actions/es_errors.ts diff --git a/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.test.ts b/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.test.ts index 8ff9591798fd4..57a1f54925d47 100644 --- a/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.test.ts +++ b/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.test.ts @@ -6,29 +6,96 @@ * Side Public License, v 1. */ -import { catchRetryableEsClientErrors } from './catch_retryable_es_client_errors'; +import * as Either from 'fp-ts/Either'; import { errors as EsErrors } from '@elastic/elasticsearch'; -jest.mock('./catch_retryable_es_client_errors'); import { elasticsearchClientMock } from '../../../elasticsearch/client/mocks'; +import { catchRetryableEsClientErrors } from './catch_retryable_es_client_errors'; import { bulkOverwriteTransformedDocuments } from './bulk_overwrite_transformed_documents'; +jest.mock('./catch_retryable_es_client_errors'); + describe('bulkOverwriteTransformedDocuments', () => { beforeEach(() => { jest.clearAllMocks(); }); - // Create a mock client that rejects all methods with a 503 status code - // response. - const retryableError = new EsErrors.ResponseError( - elasticsearchClientMock.createApiResponse({ - statusCode: 503, - body: { error: { type: 'es_type', reason: 'es_reason' } }, - }) - ); - const client = elasticsearchClientMock.createInternalClient( - elasticsearchClientMock.createErrorTransportRequestPromise(retryableError) - ); + it('resolves with `right:bulk_index_succeeded` if no error is encountered', async () => { + const client = elasticsearchClientMock.createInternalClient( + elasticsearchClientMock.createSuccessTransportRequestPromise({ + items: [ + { + index: { + _index: '.dolly', + }, + }, + { + index: { + _index: '.dolly', + }, + }, + ], + }) + ); + + const task = bulkOverwriteTransformedDocuments({ + client, + index: 'new_index', + transformedDocs: [], + refresh: 'wait_for', + }); + + const result = await task(); + + expect(Either.isRight(result)).toBe(true); + expect((result as Either.Right).right).toEqual('bulk_index_succeeded'); + }); + + it('resolves with `right:bulk_index_succeeded` if version conflict errors are encountered', async () => { + const client = elasticsearchClientMock.createInternalClient( + elasticsearchClientMock.createSuccessTransportRequestPromise({ + items: [ + { + index: { + _index: '.dolly', + }, + }, + { + index: { + error: { + type: 'version_conflict_engine_exception', + reason: 'reason', + }, + }, + }, + ], + }) + ); + + const task = bulkOverwriteTransformedDocuments({ + client, + index: 'new_index', + transformedDocs: [], + refresh: 'wait_for', + }); + + const result = await task(); + + expect(Either.isRight(result)).toBe(true); + expect((result as Either.Right).right).toEqual('bulk_index_succeeded'); + }); + it('calls catchRetryableEsClientErrors when the promise rejects', async () => { + // Create a mock client that rejects all methods with a 503 status code response. + const retryableError = new EsErrors.ResponseError( + elasticsearchClientMock.createApiResponse({ + statusCode: 503, + body: { error: { type: 'es_type', reason: 'es_reason' } }, + }) + ); + const client = elasticsearchClientMock.createInternalClient( + elasticsearchClientMock.createErrorTransportRequestPromise(retryableError) + ); + const task = bulkOverwriteTransformedDocuments({ client, index: 'new_index', @@ -43,4 +110,93 @@ describe('bulkOverwriteTransformedDocuments', () => { expect(catchRetryableEsClientErrors).toHaveBeenCalledWith(retryableError); }); + + it('resolves with `left:target_index_had_write_block` if all errors are write block exceptions', async () => { + const client = elasticsearchClientMock.createInternalClient( + elasticsearchClientMock.createSuccessTransportRequestPromise({ + items: [ + { + index: { + error: { + type: 'cluster_block_exception', + reason: + 'index [.kibana_9000] blocked by: [FORBIDDEN/8/moving to block index write (api)]', + }, + }, + }, + { + index: { + error: { + type: 'cluster_block_exception', + reason: + 'index [.kibana_9000] blocked by: [FORBIDDEN/8/moving to block index write (api)]', + }, + }, + }, + ], + }) + ); + + const task = bulkOverwriteTransformedDocuments({ + client, + index: 'new_index', + transformedDocs: [], + refresh: 'wait_for', + }); + + const result = await task(); + + expect(Either.isLeft(result)).toBe(true); + expect((result as Either.Left).left).toEqual({ + type: 'target_index_had_write_block', + }); + }); + + it('throws an error if any error is not a write block exceptions', async () => { + (catchRetryableEsClientErrors as jest.Mock).mockImplementation((e) => { + throw e; + }); + + const client = elasticsearchClientMock.createInternalClient( + elasticsearchClientMock.createSuccessTransportRequestPromise({ + items: [ + { + index: { + error: { + type: 'cluster_block_exception', + reason: + 'index [.kibana_9000] blocked by: [FORBIDDEN/8/moving to block index write (api)]', + }, + }, + }, + { + index: { + error: { + type: 'dolly_exception', + reason: 'because', + }, + }, + }, + { + index: { + error: { + type: 'cluster_block_exception', + reason: + 'index [.kibana_9000] blocked by: [FORBIDDEN/8/moving to block index write (api)]', + }, + }, + }, + ], + }) + ); + + const task = bulkOverwriteTransformedDocuments({ + client, + index: 'new_index', + transformedDocs: [], + refresh: 'wait_for', + }); + + await expect(task()).rejects.toThrow(); + }); }); diff --git a/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.ts b/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.ts index 830a8efccc7eb..4c0f8717576ac 100644 --- a/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.ts +++ b/src/core/server/saved_objects/migrationsv2/actions/bulk_overwrite_transformed_documents.ts @@ -15,7 +15,9 @@ import { catchRetryableEsClientErrors, RetryableEsClientError, } from './catch_retryable_es_client_errors'; +import { isWriteBlockException } from './es_errors'; import { WAIT_FOR_ALL_SHARDS_TO_BE_ACTIVE } from './constants'; +import type { TargetIndexHadWriteBlock } from './index'; /** @internal */ export interface BulkOverwriteTransformedDocumentsParams { @@ -24,6 +26,7 @@ export interface BulkOverwriteTransformedDocumentsParams { transformedDocs: SavedObjectsRawDoc[]; refresh?: estypes.Refresh; } + /** * Write the up-to-date transformed documents to the index, overwriting any * documents that are still on their outdated version. @@ -34,7 +37,7 @@ export const bulkOverwriteTransformedDocuments = ({ transformedDocs, refresh = false, }: BulkOverwriteTransformedDocumentsParams): TaskEither.TaskEither< - RetryableEsClientError, + RetryableEsClientError | TargetIndexHadWriteBlock, 'bulk_index_succeeded' > => () => { return client @@ -71,12 +74,19 @@ export const bulkOverwriteTransformedDocuments = ({ .then((res) => { // Filter out version_conflict_engine_exception since these just mean // that another instance already updated these documents - const errors = (res.body.items ?? []).filter( - (item) => item.index?.error?.type !== 'version_conflict_engine_exception' - ); + const errors = (res.body.items ?? []) + .filter((item) => item.index?.error) + .map((item) => item.index!.error!) + .filter(({ type }) => type !== 'version_conflict_engine_exception'); + if (errors.length === 0) { return Either.right('bulk_index_succeeded' as const); } else { + if (errors.every(isWriteBlockException)) { + return Either.left({ + type: 'target_index_had_write_block' as const, + }); + } throw new Error(JSON.stringify(errors)); } }) diff --git a/src/core/server/saved_objects/migrationsv2/actions/es_errors.test.ts b/src/core/server/saved_objects/migrationsv2/actions/es_errors.test.ts new file mode 100644 index 0000000000000..c3a8c7a036a44 --- /dev/null +++ b/src/core/server/saved_objects/migrationsv2/actions/es_errors.test.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { isIncompatibleMappingException, isWriteBlockException } from './es_errors'; + +describe('isWriteBlockError', () => { + it('returns true for a `index write` cluster_block_exception', () => { + expect( + isWriteBlockException({ + type: 'cluster_block_exception', + reason: `index [.kibana_dolly] blocked by: [FORBIDDEN/8/index write (api)]`, + }) + ).toEqual(true); + }); + it('returns true for a `moving to block index write` cluster_block_exception', () => { + expect( + isWriteBlockException({ + type: 'cluster_block_exception', + reason: `index [.kibana_dolly] blocked by: [FORBIDDEN/8/moving to block index write (api)]`, + }) + ).toEqual(true); + }); + it('returns false for incorrect type', () => { + expect( + isWriteBlockException({ + type: 'not_a_cluster_block_exception_at_all', + reason: `index [.kibana_dolly] blocked by: [FORBIDDEN/8/index write (api)]`, + }) + ).toEqual(false); + }); +}); + +describe('isIncompatibleMappingExceptionError', () => { + it('returns true for `strict_dynamic_mapping_exception` errors', () => { + expect( + isIncompatibleMappingException({ + type: 'strict_dynamic_mapping_exception', + reason: 'idk', + }) + ).toEqual(true); + }); + + it('returns true for `mapper_parsing_exception` errors', () => { + expect( + isIncompatibleMappingException({ + type: 'mapper_parsing_exception', + reason: 'idk', + }) + ).toEqual(true); + }); +}); diff --git a/src/core/server/saved_objects/migrationsv2/actions/es_errors.ts b/src/core/server/saved_objects/migrationsv2/actions/es_errors.ts new file mode 100644 index 0000000000000..0d3c9fe3741aa --- /dev/null +++ b/src/core/server/saved_objects/migrationsv2/actions/es_errors.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface EsErrorCause { + type: string; + reason: string; +} + +export const isWriteBlockException = ({ type, reason }: EsErrorCause): boolean => { + return ( + type === 'cluster_block_exception' && + reason.match(/index \[.+] blocked by: \[FORBIDDEN\/8\/.+ \(api\)\]/) !== null + ); +}; + +export const isIncompatibleMappingException = ({ type }: EsErrorCause): boolean => { + return type === 'strict_dynamic_mapping_exception' || type === 'mapper_parsing_exception'; +}; diff --git a/src/core/server/saved_objects/migrationsv2/actions/wait_for_reindex_task.ts b/src/core/server/saved_objects/migrationsv2/actions/wait_for_reindex_task.ts index 18cf3350292b5..2d20319bb4fcb 100644 --- a/src/core/server/saved_objects/migrationsv2/actions/wait_for_reindex_task.ts +++ b/src/core/server/saved_objects/migrationsv2/actions/wait_for_reindex_task.ts @@ -10,12 +10,14 @@ import * as TaskEither from 'fp-ts/lib/TaskEither'; import * as Option from 'fp-ts/lib/Option'; import { flow } from 'fp-ts/lib/function'; import { RetryableEsClientError } from './catch_retryable_es_client_errors'; -import type { IndexNotFound, WaitForReindexTaskFailure, TargetIndexHadWriteBlock } from './index'; +import type { IndexNotFound, TargetIndexHadWriteBlock } from './index'; import { waitForTask, WaitForTaskCompletionTimeout } from './wait_for_task'; +import { isWriteBlockException, isIncompatibleMappingException } from './es_errors'; export interface IncompatibleMappingException { type: 'incompatible_mapping_exception'; } + export const waitForReindexTask = flow( waitForTask, TaskEither.chain( @@ -29,15 +31,6 @@ export const waitForReindexTask = flow( | WaitForTaskCompletionTimeout, 'reindex_succeeded' > => { - const failureIsAWriteBlock = ({ cause: { type, reason } }: WaitForReindexTaskFailure) => - type === 'cluster_block_exception' && - reason.match(/index \[.+] blocked by: \[FORBIDDEN\/8\/index write \(api\)\]/); - - const failureIsIncompatibleMappingException = ({ - cause: { type, reason }, - }: WaitForReindexTaskFailure) => - type === 'strict_dynamic_mapping_exception' || type === 'mapper_parsing_exception'; - if (Option.isSome(res.error)) { if (res.error.value.type === 'index_not_found_exception') { return TaskEither.left({ @@ -48,9 +41,9 @@ export const waitForReindexTask = flow( throw new Error('Reindex failed with the following error:\n' + JSON.stringify(res.error)); } } else if (Option.isSome(res.failures)) { - if (res.failures.value.every(failureIsAWriteBlock)) { + if (res.failures.value.every(isWriteBlockException)) { return TaskEither.left({ type: 'target_index_had_write_block' as const }); - } else if (res.failures.value.every(failureIsIncompatibleMappingException)) { + } else if (res.failures.value.every(isIncompatibleMappingException)) { return TaskEither.left({ type: 'incompatible_mapping_exception' as const }); } else { throw new Error( diff --git a/src/core/server/saved_objects/migrationsv2/model/model.test.ts b/src/core/server/saved_objects/migrationsv2/model/model.test.ts index 174459d04d9ee..136709d1b874f 100644 --- a/src/core/server/saved_objects/migrationsv2/model/model.test.ts +++ b/src/core/server/saved_objects/migrationsv2/model/model.test.ts @@ -1054,6 +1054,15 @@ describe('migrations v2 model', () => { expect(newState.retryCount).toEqual(0); expect(newState.retryDelay).toEqual(0); }); + test('REINDEX_SOURCE_TO_TEMP_INDEX_BULK -> REINDEX_SOURCE_TO_TEMP_CLOSE_PIT if response is left target_index_had_write_block', () => { + const res: ResponseType<'REINDEX_SOURCE_TO_TEMP_INDEX_BULK'> = Either.left({ + type: 'target_index_had_write_block', + }); + const newState = model(reindexSourceToTempIndexBulkState, res); + expect(newState.controlState).toEqual('REINDEX_SOURCE_TO_TEMP_CLOSE_PIT'); + expect(newState.retryCount).toEqual(0); + expect(newState.retryDelay).toEqual(0); + }); test('REINDEX_SOURCE_TO_TEMP_INDEX_BULK should throw a throwBadResponse error if action failed', () => { const res: ResponseType<'REINDEX_SOURCE_TO_TEMP_INDEX_BULK'> = Either.left({ type: 'retryable_es_client_error', @@ -1101,7 +1110,7 @@ describe('migrations v2 model', () => { expect(newState.retryCount).toBe(0); expect(newState.retryDelay).toBe(0); }); - it('CLONE_TEMP_TO_TARGET -> REFRESH_TARGET if response is left index_not_fonud_exception', () => { + it('CLONE_TEMP_TO_TARGET -> REFRESH_TARGET if response is left index_not_found_exception', () => { const res: ResponseType<'CLONE_TEMP_TO_TARGET'> = Either.left({ type: 'index_not_found_exception', index: 'temp_index', diff --git a/src/core/server/saved_objects/migrationsv2/model/model.ts b/src/core/server/saved_objects/migrationsv2/model/model.ts index e7d6b8ed175e5..b28e4e3024380 100644 --- a/src/core/server/saved_objects/migrationsv2/model/model.ts +++ b/src/core/server/saved_objects/migrationsv2/model/model.ts @@ -499,7 +499,15 @@ export const model = (currentState: State, resW: ResponseType): transformErrors: [], }; } else { - throwBadResponse(stateP, res); + if (isLeftTypeof(res.left, 'target_index_had_write_block')) { + // the temp index has a write block, meaning that another instance already finished and moved forward. + // close the PIT search and carry on with the happy path. + return { + ...stateP, + controlState: 'REINDEX_SOURCE_TO_TEMP_CLOSE_PIT', + }; + } + throwBadResponse(stateP, res.left); } } else if (stateP.controlState === 'SET_TEMP_WRITE_BLOCK') { const res = resW as ExcludeRetryableEsError>; @@ -667,7 +675,7 @@ export const model = (currentState: State, resW: ResponseType): hasTransformedDocs: true, }; } else { - throwBadResponse(stateP, res); + throwBadResponse(stateP, res as never); } } else if (stateP.controlState === 'UPDATE_TARGET_MAPPINGS') { const res = resW as ExcludeRetryableEsError>; From 390adf8a438dd7f9e6c9f368e06e98d920386751 Mon Sep 17 00:00:00 2001 From: pgayvallet Date: Tue, 6 Jul 2021 20:33:02 +0200 Subject: [PATCH 2/7] fix some IT tests --- .../actions/integration_tests/actions.test.ts | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/core/server/saved_objects/migrationsv2/actions/integration_tests/actions.test.ts b/src/core/server/saved_objects/migrationsv2/actions/integration_tests/actions.test.ts index 3fa4d59e383bf..6ea5a80c3145f 100644 --- a/src/core/server/saved_objects/migrationsv2/actions/integration_tests/actions.test.ts +++ b/src/core/server/saved_objects/migrationsv2/actions/integration_tests/actions.test.ts @@ -188,7 +188,14 @@ describe('migration actions', () => { transformedDocs: sourceDocs, refresh: 'wait_for', })() - ).rejects.toMatchObject(expect.anything()); + ).resolves.toMatchInlineSnapshot(` + Object { + "_tag": "Left", + "left": Object { + "type": "target_index_had_write_block", + }, + } + `); }); it('resolves left index_not_found_exception when the index does not exist', async () => { expect.assertions(1); @@ -1496,7 +1503,7 @@ describe('migration actions', () => { } `); }); - it('rejects if there are errors', async () => { + it('resolves left if there are write_block errors', async () => { const newDocs = ([ { _source: { title: 'doc 5' } }, { _source: { title: 'doc 6' } }, @@ -1509,7 +1516,14 @@ describe('migration actions', () => { transformedDocs: newDocs, refresh: 'wait_for', })() - ).rejects.toMatchObject(expect.anything()); + ).resolves.toMatchInlineSnapshot(` + Object { + "_tag": "Left", + "left": Object { + "type": "target_index_had_write_block", + }, + } + `); }); }); }); From 1e26c569483b40cc07aebffa4d7524f9994ed0fb Mon Sep 17 00:00:00 2001 From: pgayvallet Date: Tue, 6 Jul 2021 20:59:48 +0200 Subject: [PATCH 3/7] fix reindex cause detection --- .../migrationsv2/actions/wait_for_reindex_task.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/server/saved_objects/migrationsv2/actions/wait_for_reindex_task.ts b/src/core/server/saved_objects/migrationsv2/actions/wait_for_reindex_task.ts index 2d20319bb4fcb..cafc8f15f0290 100644 --- a/src/core/server/saved_objects/migrationsv2/actions/wait_for_reindex_task.ts +++ b/src/core/server/saved_objects/migrationsv2/actions/wait_for_reindex_task.ts @@ -41,9 +41,10 @@ export const waitForReindexTask = flow( throw new Error('Reindex failed with the following error:\n' + JSON.stringify(res.error)); } } else if (Option.isSome(res.failures)) { - if (res.failures.value.every(isWriteBlockException)) { + const failureCauses = res.failures.value.map((failure) => failure.cause); + if (failureCauses.every(isWriteBlockException)) { return TaskEither.left({ type: 'target_index_had_write_block' as const }); - } else if (res.failures.value.every(isIncompatibleMappingException)) { + } else if (failureCauses.every(isIncompatibleMappingException)) { return TaskEither.left({ type: 'incompatible_mapping_exception' as const }); } else { throw new Error( From f9fa0fedd780687b0aec8d236c0b44390077d244 Mon Sep 17 00:00:00 2001 From: pgayvallet Date: Wed, 7 Jul 2021 11:23:32 +0200 Subject: [PATCH 4/7] add integration test --- .../archives/7.13.0_concurrent_5k_foo.zip | Bin 0 -> 147425 bytes .../multiple_kibana_nodes.test.ts | 259 ++++++++++++++++++ 2 files changed, 259 insertions(+) create mode 100644 src/core/server/saved_objects/migrationsv2/integration_tests/archives/7.13.0_concurrent_5k_foo.zip create mode 100644 src/core/server/saved_objects/migrationsv2/integration_tests/multiple_kibana_nodes.test.ts diff --git a/src/core/server/saved_objects/migrationsv2/integration_tests/archives/7.13.0_concurrent_5k_foo.zip b/src/core/server/saved_objects/migrationsv2/integration_tests/archives/7.13.0_concurrent_5k_foo.zip new file mode 100644 index 0000000000000000000000000000000000000000..46cc61cbe7b5f97b430d1061e3c0aaa77aba3dc2 GIT binary patch literal 147425 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%0A7mp?r?p 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 IT`+L}AHsVZL;wH) literal 0 HcmV?d00001 diff --git a/src/core/server/saved_objects/migrationsv2/integration_tests/multiple_kibana_nodes.test.ts b/src/core/server/saved_objects/migrationsv2/integration_tests/multiple_kibana_nodes.test.ts new file mode 100644 index 0000000000000..8879470dc880a --- /dev/null +++ b/src/core/server/saved_objects/migrationsv2/integration_tests/multiple_kibana_nodes.test.ts @@ -0,0 +1,259 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import Path from 'path'; +import Fs from 'fs'; +import Util from 'util'; +import glob from 'glob'; +import { esTestConfig, kibanaServerTestUser } from '@kbn/test'; +import { kibanaPackageJson as pkg } from '@kbn/utils'; +import * as kbnTestServer from '../../../../test_helpers/kbn_server'; +import type { ElasticsearchClient } from '../../../elasticsearch'; +import { SavedObjectsType } from '../../types'; +import type { Root } from '../../../root'; + +const LOG_FILE_PREFIX = 'migration_test_multiple_kibana_nodes'; + +const asyncUnlink = Util.promisify(Fs.unlink); + +async function removeLogFiles() { + glob(Path.join(__dirname, `${LOG_FILE_PREFIX}_*.log`), (err, files) => { + files.forEach(async (file) => { + // ignore errors if it doesn't exist + await asyncUnlink(file).catch(() => void 0); + }); + }); +} + +function extractSortNumberFromId(id: string): number { + const parsedId = parseInt(id.split(':')[1], 10); // "foo:123" -> 123 + if (isNaN(parsedId)) { + throw new Error(`Failed to parse Saved Object ID [${id}]. Result is NaN`); + } + return parsedId; +} + +async function fetchDocs(esClient: ElasticsearchClient, index: string) { + const { body } = await esClient.search({ + index, + size: 10000, + body: { + query: { + bool: { + should: [ + { + term: { type: 'foo' }, + }, + ], + }, + }, + }, + }); + + return body.hits.hits + .map((h) => ({ + ...h._source, + id: h._id, + })) + .sort((a, b) => extractSortNumberFromId(a.id) - extractSortNumberFromId(b.id)); +} + +interface CreateRootConfig { + logFileName: string; +} + +function createRoot({ logFileName }: CreateRootConfig) { + return kbnTestServer.createRoot({ + elasticsearch: { + hosts: [esTestConfig.getUrl()], + username: kibanaServerTestUser.username, + password: kibanaServerTestUser.password, + }, + migrations: { + skip: false, + enableV2: true, + batchSize: 100, // fixture contains 5000 docs + }, + logging: { + appenders: { + file: { + type: 'file', + fileName: logFileName, + layout: { + type: 'pattern', + }, + }, + }, + loggers: [ + { + name: 'root', + appenders: ['file'], + }, + { + name: 'savedobjects-service', + appenders: ['file'], + level: 'debug', + }, + ], + }, + }); +} + +describe('migration v2', () => { + let esServer: kbnTestServer.TestElasticsearchUtils; + let rootA: Root; + let rootB: Root; + let rootC: Root; + + const migratedIndex = `.kibana_${pkg.version}_001`; + const fooType: SavedObjectsType = { + name: 'foo', + hidden: false, + mappings: { properties: { status: { type: 'text' } } }, + namespaceType: 'agnostic', + migrations: { + '7.14.0': (doc) => { + if (doc.attributes?.status) { + doc.attributes.status = doc.attributes.status.replace('unmigrated', 'migrated'); + } + return doc; + }, + }, + }; + + afterAll(async () => { + await new Promise((resolve) => setTimeout(resolve, 10000)); + }); + + beforeEach(async () => { + await removeLogFiles(); + + rootA = createRoot({ + logFileName: Path.join(__dirname, `${LOG_FILE_PREFIX}_A.log`), + }); + rootB = createRoot({ + logFileName: Path.join(__dirname, `${LOG_FILE_PREFIX}_B.log`), + }); + rootC = createRoot({ + logFileName: Path.join(__dirname, `${LOG_FILE_PREFIX}_C.log`), + }); + + const { startES } = kbnTestServer.createTestServers({ + adjustTimeout: (t: number) => jest.setTimeout(t), + settings: { + es: { + license: 'basic', + // original SOs: 5k of `foo` docs with this structure: + // [ + // { id: 'foo:1', type: 'foo', foo: { status: 'unmigrated' }, migrationVersion: { foo: '7.13.0' } }, + // { id: 'foo:2', type: 'foo', foo: { status: 'unmigrated' }, migrationVersion: { foo: '7.13.0' } }, + // { id: 'foo:3', type: 'foo', foo: { status: 'unmigrated' }, migrationVersion: { foo: '7.13.0' } }, + // ]; + dataArchive: Path.join(__dirname, 'archives', '7.13.0_concurrent_5k_foo.zip'), + }, + }, + }); + esServer = await startES(); + }); + + afterEach(async () => { + await Promise.all([rootA.shutdown(), rootB.shutdown(), rootC.shutdown()]); + + if (esServer) { + await esServer.stop(); + } + }); + + const delay = (timeInMs: number) => new Promise((resolve) => setTimeout(resolve, timeInMs)); + const startWithDelay = async (instances: Root[], delayInSec: number) => { + const promises: Array> = []; + for (let i = 0; i < instances.length; i++) { + promises.push(instances[i].start()); + if (i < instances.length - 1) { + await delay(delayInSec * 1000); + } + } + return Promise.all(promises); + }; + + it('migrates saved objects normally when multiple Kibana instances are started at the same time', async () => { + const setupContracts = await Promise.all([rootA.setup(), rootB.setup(), rootC.setup()]); + + setupContracts.forEach((setup) => setup.savedObjects.registerType(fooType)); + + await startWithDelay([rootA, rootB, rootC], 0); + + const esClient = esServer.es.getClient(); + const migratedDocs = await fetchDocs(esClient, migratedIndex); + + expect(migratedDocs.length).toBe(5000); + + migratedDocs.forEach((doc, i) => { + expect(doc.id).toBe(`foo:${i}`); + expect(doc.foo.status).toBe(`migrated`); + expect(doc.migrationVersion.foo).toBe('7.14.0'); + }); + }); + + it('migrates saved objects normally when multiple Kibana instances are started with a small interval', async () => { + const setupContracts = await Promise.all([rootA.setup(), rootB.setup(), rootC.setup()]); + + setupContracts.forEach((setup) => setup.savedObjects.registerType(fooType)); + + await startWithDelay([rootA, rootB, rootC], 1); + + const esClient = esServer.es.getClient(); + const migratedDocs = await fetchDocs(esClient, migratedIndex); + + expect(migratedDocs.length).toBe(5000); + + migratedDocs.forEach((doc, i) => { + expect(doc.id).toBe(`foo:${i}`); + expect(doc.foo.status).toBe(`migrated`); + expect(doc.migrationVersion.foo).toBe('7.14.0'); + }); + }); + + it('migrates saved objects normally when multiple Kibana instances are started with an average interval', async () => { + const setupContracts = await Promise.all([rootA.setup(), rootB.setup(), rootC.setup()]); + + setupContracts.forEach((setup) => setup.savedObjects.registerType(fooType)); + + await startWithDelay([rootA, rootB, rootC], 5); + + const esClient = esServer.es.getClient(); + const migratedDocs = await fetchDocs(esClient, migratedIndex); + + expect(migratedDocs.length).toBe(5000); + + migratedDocs.forEach((doc, i) => { + expect(doc.id).toBe(`foo:${i}`); + expect(doc.foo.status).toBe(`migrated`); + expect(doc.migrationVersion.foo).toBe('7.14.0'); + }); + }); + + it('migrates saved objects normally when multiple Kibana instances are started with a bigger interval', async () => { + const setupContracts = await Promise.all([rootA.setup(), rootB.setup(), rootC.setup()]); + + setupContracts.forEach((setup) => setup.savedObjects.registerType(fooType)); + + await startWithDelay([rootA, rootB, rootC], 20); + + const esClient = esServer.es.getClient(); + const migratedDocs = await fetchDocs(esClient, migratedIndex); + + expect(migratedDocs.length).toBe(5000); + + migratedDocs.forEach((doc, i) => { + expect(doc.id).toBe(`foo:${i}`); + expect(doc.foo.status).toBe(`migrated`); + expect(doc.migrationVersion.foo).toBe('7.14.0'); + }); + }); +}); From 5cbb0752fb11798fc2f002243c9fef6ca715d9b4 Mon Sep 17 00:00:00 2001 From: pgayvallet Date: Wed, 7 Jul 2021 11:37:50 +0200 Subject: [PATCH 5/7] update RFC --- rfcs/text/0013_saved_object_migrations.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rfcs/text/0013_saved_object_migrations.md b/rfcs/text/0013_saved_object_migrations.md index e5ff7616ccf82..0ca183f1fee44 100644 --- a/rfcs/text/0013_saved_object_migrations.md +++ b/rfcs/text/0013_saved_object_migrations.md @@ -257,9 +257,11 @@ Note: 6. Set a write block on the source index. This prevents any further writes from outdated nodes. 7. Create a new temporary index `.kibana_7.10.0_reindex_temp` with `dynamic: false` on the top-level mappings so that any kind of document can be written to the index. This allows us to write untransformed documents to the index which might have fields which have been removed from the latest mappings defined by the plugin. Define minimal mappings for the `migrationVersion` and `type` fields so that we're still able to search for outdated documents that need to be transformed. 1. Ignore errors if the target index already exists. -8. Reindex the source index into the new temporary index. - 1. Use `op_type=create` `conflicts=proceed` and `wait_for_completion=false` so that multiple instances can perform the reindex in parallel but only one write per document will succeed. - 2. Wait for the reindex task to complete. If reindexing doesn’t complete within the 60s timeout, log a warning for visibility and poll again. +8. Reindex the source index into the new temporary index using a 'client-side' reindex, by reading batches of documents from the source, migrating them, and indexing them into the temp index. + 1. Use `op_type=index` so that multiple instances can perform the reindex in parallel (last node running will override the documents, with no effect as the input data is the same) + 2. Ignore `version_conflict_engine_exception` exceptions as they just mean that another node was indexing the same documents + 3. If a `target_index_had_write_block` exception is encountered for all document of a batch, assume that another node already completed the temporary index reindex, and jump to the next step + 4. If a document transform throws an exception, add the document to a failure list and continue trying to transform all other documents (without writing them to the temp index). If any failures occured, log the complete list of documents that failed to transform, then fail the migration. 9. Clone the temporary index into the target index `.kibana_7.10.0_001`. Since any further writes will only happen against the cloned target index this prevents a lost delete from occuring where one instance finishes the migration and deletes a document and another instance's reindex operation re-creates the deleted document. 1. Set a write block on the temporary index 2. Clone the temporary index into the target index while specifying that the target index should have writes enabled. From c1bc86909969e160f87f00082a698beebff51b83 Mon Sep 17 00:00:00 2001 From: pgayvallet Date: Wed, 7 Jul 2021 18:42:12 +0200 Subject: [PATCH 6/7] review comments --- .../actions/integration_tests/actions.test.ts | 27 +++++++++---------- .../multiple_kibana_nodes.test.ts | 2 +- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/core/server/saved_objects/migrationsv2/actions/integration_tests/actions.test.ts b/src/core/server/saved_objects/migrationsv2/actions/integration_tests/actions.test.ts index 6ea5a80c3145f..ecce5e9543457 100644 --- a/src/core/server/saved_objects/migrationsv2/actions/integration_tests/actions.test.ts +++ b/src/core/server/saved_objects/migrationsv2/actions/integration_tests/actions.test.ts @@ -181,21 +181,17 @@ describe('migration actions', () => { { _source: { title: 'doc 3' } }, { _source: { title: 'doc 4' } }, ] as unknown) as SavedObjectsRawDoc[]; - await expect( - bulkOverwriteTransformedDocuments({ - client, - index: 'new_index_without_write_block', - transformedDocs: sourceDocs, - refresh: 'wait_for', - })() - ).resolves.toMatchInlineSnapshot(` - Object { - "_tag": "Left", - "left": Object { - "type": "target_index_had_write_block", - }, - } - `); + + const res = (await bulkOverwriteTransformedDocuments({ + client, + index: 'new_index_without_write_block', + transformedDocs: sourceDocs, + refresh: 'wait_for', + })()) as Either.Left; + + expect(res.left).toEqual({ + type: 'target_index_had_write_block', + }); }); it('resolves left index_not_found_exception when the index does not exist', async () => { expect.assertions(1); @@ -1101,6 +1097,7 @@ describe('migration actions', () => { return Either.right({ processedDocs }); }; } + const transformTask = transformDocs({ transformRawDocs: innerTransformRawDocs, outdatedDocuments: originalDocs, diff --git a/src/core/server/saved_objects/migrationsv2/integration_tests/multiple_kibana_nodes.test.ts b/src/core/server/saved_objects/migrationsv2/integration_tests/multiple_kibana_nodes.test.ts index 8879470dc880a..6d98576581a25 100644 --- a/src/core/server/saved_objects/migrationsv2/integration_tests/multiple_kibana_nodes.test.ts +++ b/src/core/server/saved_objects/migrationsv2/integration_tests/multiple_kibana_nodes.test.ts @@ -171,7 +171,7 @@ describe('migration v2', () => { const delay = (timeInMs: number) => new Promise((resolve) => setTimeout(resolve, timeInMs)); const startWithDelay = async (instances: Root[], delayInSec: number) => { - const promises: Array> = []; + const promises: Array> = []; for (let i = 0; i < instances.length; i++) { promises.push(instances[i].start()); if (i < instances.length - 1) { From 7f3f35c8a8f2f8c6d25b522a90623a019c3ac7c8 Mon Sep 17 00:00:00 2001 From: pgayvallet Date: Wed, 7 Jul 2021 19:41:44 +0200 Subject: [PATCH 7/7] add integration test for isWriteBlockException --- .../integration_tests/es_errors.test.ts | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/core/server/saved_objects/migrationsv2/actions/integration_tests/es_errors.test.ts diff --git a/src/core/server/saved_objects/migrationsv2/actions/integration_tests/es_errors.test.ts b/src/core/server/saved_objects/migrationsv2/actions/integration_tests/es_errors.test.ts new file mode 100644 index 0000000000000..baeef6b9d9f56 --- /dev/null +++ b/src/core/server/saved_objects/migrationsv2/actions/integration_tests/es_errors.test.ts @@ -0,0 +1,127 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ElasticsearchClient } from '../../../../'; +import { InternalCoreStart } from '../../../../internal_types'; +import * as kbnTestServer from '../../../../../test_helpers/kbn_server'; +import { Root } from '../../../../root'; +import { isWriteBlockException } from '../es_errors'; +import { createIndex } from '../create_index'; +import { setWriteBlock } from '../set_write_block'; + +const { startES } = kbnTestServer.createTestServers({ + adjustTimeout: (t: number) => jest.setTimeout(t), +}); + +describe('Elasticsearch Errors', () => { + let root: Root; + let start: InternalCoreStart; + let client: ElasticsearchClient; + let esServer: kbnTestServer.TestElasticsearchUtils; + + beforeAll(async () => { + esServer = await startES(); + root = kbnTestServer.createRootWithCorePlugins({ + server: { + basePath: '/foo', + }, + }); + + await root.setup(); + start = await root.start(); + client = start.elasticsearch.client.asInternalUser; + + await createIndex({ + client, + indexName: 'existing_index_with_write_block', + mappings: { properties: {} }, + })(); + await setWriteBlock({ client, index: 'existing_index_with_write_block' })(); + }); + + afterAll(async () => { + await esServer.stop(); + await root.shutdown(); + }); + + describe('isWriteBlockException', () => { + it('correctly identify errors from index operations', async () => { + const res = await client.index( + { + index: 'existing_index_with_write_block', + id: 'some-id', + op_type: 'index', + body: { + hello: 'dolly', + }, + }, + { ignore: [403] } + ); + + expect(isWriteBlockException(res.body.error!)).toEqual(true); + }); + + it('correctly identify errors from create operations', async () => { + const res = await client.create( + { + index: 'existing_index_with_write_block', + id: 'some-id', + body: { + hello: 'dolly', + }, + }, + { ignore: [403] } + ); + + expect(isWriteBlockException(res.body.error!)).toEqual(true); + }); + + it('correctly identify errors from bulk index operations', async () => { + const res = await client.bulk({ + refresh: 'wait_for', + body: [ + { + index: { + _index: 'existing_index_with_write_block', + _id: 'some-id', + }, + }, + { + hello: 'dolly', + }, + ], + }); + + const cause = res.body.items[0].index!.error!; + + expect(isWriteBlockException(cause)).toEqual(true); + }); + + it('correctly identify errors from bulk create operations', async () => { + const res = await client.bulk({ + refresh: 'wait_for', + body: [ + { + create: { + _index: 'existing_index_with_write_block', + _id: 'some-id', + op_type: 'index', + }, + }, + { + hello: 'dolly', + }, + ], + }); + + const cause = res.body.items[0].create!.error!; + + expect(isWriteBlockException(cause)).toEqual(true); + }); + }); +});