[8.6] [UA] skip system indices migration status check if featureSet.migrateSystemIndices is set to false (#150710) (#150736)

# Backport

This will backport the following commits from `main` to `8.6`:
- [[UA] skip system indices migration status check if
`featureSet.migrateSystemIndices` is set to `false`
(#150710)](https://github.com/elastic/kibana/pull/150710)

<!--- Backport version: 8.9.7 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Ahmad
Bamieh","email":"ahmad.bamyeh@elastic.co"},"sourceCommit":{"committedDate":"2023-02-09T16:09:39Z","message":"[UA]
skip system indices migration status check if
`featureSet.migrateSystemIndices` is set to `false`
(#150710)\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"d2f86398ecc76c0a8a9abdbadcb6d37a693886b9","branchLabelMapping":{"^v8.8.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["bug","release_note:skip","v8.6.2","v8.8.0"],"number":150710,"url":"https://github.com/elastic/kibana/pull/150710","mergeCommit":{"message":"[UA]
skip system indices migration status check if
`featureSet.migrateSystemIndices` is set to `false`
(#150710)\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"d2f86398ecc76c0a8a9abdbadcb6d37a693886b9"}},"sourceBranch":"main","suggestedTargetBranches":["8.6"],"targetPullRequestStates":[{"branch":"8.6","label":"v8.6.2","labelRegex":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v8.8.0","labelRegex":"^v8.8.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/150710","number":150710,"mergeCommit":{"message":"[UA]
skip system indices migration status check if
`featureSet.migrateSystemIndices` is set to `false`
(#150710)\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"d2f86398ecc76c0a8a9abdbadcb6d37a693886b9"}}]}]
BACKPORT-->

Co-authored-by: Ahmad Bamieh <ahmad.bamyeh@elastic.co>
This commit is contained in:
Kibana Machine 2023-02-09 12:18:02 -05:00 committed by GitHub
parent 6caf84dba0
commit ebd9b2a083
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 64 additions and 14 deletions

View file

@ -8,12 +8,13 @@
import { kibanaResponseFactory } from '@kbn/core/server';
import { handleEsError } from '../shared_imports';
import { createMockRouter, MockRouter, routeHandlerContextMock } from './__mocks__/routes.mock';
import { createMockRouter, routeHandlerContextMock } from './__mocks__/routes.mock';
import { createRequestMock } from './__mocks__/request.mock';
import { registerUpgradeStatusRoute } from './status';
import { getESUpgradeStatus } from '../lib/es_deprecations_status';
import { getKibanaUpgradeStatus } from '../lib/kibana_status';
import { getESSystemIndicesMigrationStatus } from '../lib/es_system_indices_migration';
import type { FeatureSet } from '../../common/types';
jest.mock('../lib/es_version_precheck', () => ({
versionCheckHandlerWrapper: (a: any) => a,
@ -86,31 +87,33 @@ const systemIndicesNoMigrationResponse = {
};
describe('Status API', () => {
let mockRouter: MockRouter;
let routeDependencies: any;
beforeEach(() => {
mockRouter = createMockRouter();
routeDependencies = {
const registerRoutes = (featureSetOverrides: Partial<FeatureSet> = {}) => {
const mockRouter = createMockRouter();
const routeDependencies: any = {
config: {
featureSet: {
mlSnapshots: true,
migrateSystemIndices: true,
reindexCorrectiveActions: true,
...featureSetOverrides,
},
},
router: mockRouter,
lib: { handleEsError },
};
registerUpgradeStatusRoute(routeDependencies);
});
afterEach(() => {
jest.resetAllMocks();
});
registerUpgradeStatusRoute(routeDependencies);
return { mockRouter, routeDependencies };
};
describe('GET /api/upgrade_assistant/status', () => {
afterEach(() => {
jest.resetAllMocks();
});
it('returns readyForUpgrade === false if Kibana or ES contain critical deprecations and no system indices need migration', async () => {
const { routeDependencies } = registerRoutes();
getESUpgradeStatusMock.mockResolvedValue(esDeprecationsResponse);
getKibanaUpgradeStatusMock.mockResolvedValue({
@ -124,6 +127,7 @@ describe('Status API', () => {
pathPattern: '/api/upgrade_assistant/status',
})(routeHandlerContextMock, createRequestMock(), kibanaResponseFactory);
expect(getESSystemIndicesMigrationStatusMock).toBeCalledTimes(1);
expect(resp.status).toEqual(200);
expect(resp.payload).toEqual({
readyForUpgrade: false,
@ -133,6 +137,7 @@ describe('Status API', () => {
});
it('returns readyForUpgrade === false if Kibana or ES contain critical deprecations and system indices need migration', async () => {
const { routeDependencies } = registerRoutes();
getESUpgradeStatusMock.mockResolvedValue(esDeprecationsResponse);
getKibanaUpgradeStatusMock.mockResolvedValue({
@ -146,6 +151,7 @@ describe('Status API', () => {
pathPattern: '/api/upgrade_assistant/status',
})(routeHandlerContextMock, createRequestMock(), kibanaResponseFactory);
expect(getESSystemIndicesMigrationStatusMock).toBeCalledTimes(1);
expect(resp.status).toEqual(200);
expect(resp.payload).toEqual({
readyForUpgrade: false,
@ -155,6 +161,7 @@ describe('Status API', () => {
});
it('returns readyForUpgrade === false if no critical Kibana or ES deprecations but system indices need migration', async () => {
const { routeDependencies } = registerRoutes();
getESUpgradeStatusMock.mockResolvedValue(esNoDeprecationsResponse);
getKibanaUpgradeStatusMock.mockResolvedValue({
@ -168,6 +175,7 @@ describe('Status API', () => {
pathPattern: '/api/upgrade_assistant/status',
})(routeHandlerContextMock, createRequestMock(), kibanaResponseFactory);
expect(getESSystemIndicesMigrationStatusMock).toBeCalledTimes(1);
expect(resp.status).toEqual(200);
expect(resp.payload).toEqual({
readyForUpgrade: false,
@ -177,6 +185,7 @@ describe('Status API', () => {
});
it('returns readyForUpgrade === true if there are no critical deprecations and no system indices need migration', async () => {
const { routeDependencies } = registerRoutes();
getESUpgradeStatusMock.mockResolvedValue(esNoDeprecationsResponse);
getKibanaUpgradeStatusMock.mockResolvedValue({
@ -197,7 +206,30 @@ describe('Status API', () => {
});
});
it('skips ES system indices migration check when featureSet.migrateSystemIndices is set to false', async () => {
const { routeDependencies } = registerRoutes({ migrateSystemIndices: false });
getESUpgradeStatusMock.mockResolvedValue(esNoDeprecationsResponse);
getKibanaUpgradeStatusMock.mockResolvedValue({
totalCriticalDeprecations: 0,
});
getESSystemIndicesMigrationStatusMock.mockResolvedValue(systemIndicesMigrationResponse);
const resp = await routeDependencies.router.getHandler({
method: 'get',
pathPattern: '/api/upgrade_assistant/status',
})(routeHandlerContextMock, createRequestMock(), kibanaResponseFactory);
expect(getESSystemIndicesMigrationStatusMock).toBeCalledTimes(0);
expect(resp.status).toEqual(200);
expect(resp.payload).toEqual({
readyForUpgrade: true,
details: 'All deprecation warnings have been resolved.',
});
});
it('returns an error if it throws', async () => {
const { routeDependencies } = registerRoutes();
getESUpgradeStatusMock.mockRejectedValue(new Error('test error'));
getKibanaUpgradeStatusMock.mockResolvedValue({

View file

@ -37,9 +37,27 @@ export function registerUpgradeStatusRoute({
esClient,
featureSet
);
// Fetch system indices migration status
const getSystemIndicesMigrationStatus = async () => {
/**
* Skip system indices migration status check if `featureSet.migrateSystemIndices`
* is set to `false`. This flag is enabled from configs for major version stack ugprades.
* returns `migration_status: 'NO_MIGRATION_NEEDED'` to indicate no migation needed.
*/
if (!featureSet.migrateSystemIndices) {
return {
migration_status: 'NO_MIGRATION_NEEDED',
features: [],
};
}
// Fetch system indices migration status from ES
return await getESSystemIndicesMigrationStatus(esClient.asCurrentUser);
};
const { migration_status: systemIndicesMigrationStatus, features } =
await getESSystemIndicesMigrationStatus(esClient.asCurrentUser);
await getSystemIndicesMigrationStatus();
const notMigratedSystemIndices = features.filter(
(feature) => feature.migration_status !== 'NO_MIGRATION_NEEDED'
).length;