Skip to content

Commit e14cffb

Browse files
Merge branch 'master' into add-e2e-tests
2 parents 6d1d71f + be41a9f commit e14cffb

302 files changed

Lines changed: 7264 additions & 4281 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/developer/plugin-list.asciidoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ and actions.
370370
|The features plugin enhance Kibana with a per-feature privilege system.
371371
372372
373+
|{kib-repo}blob/{branch}/x-pack/plugins/file_upload[fileUpload]
374+
|WARNING: Missing README.
375+
376+
373377
|{kib-repo}blob/{branch}/x-pack/plugins/fleet/README.md[fleet]
374378
|Fleet needs to have Elasticsearch API keys enabled, and also to have TLS enabled on kibana, (if you want to run Kibana without TLS you can provide the following config flag --xpack.fleet.agents.tlsCheckDisabled=false)
375379

docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchsource.getfields.md

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -9,45 +9,16 @@ returns all search source fields
99
<b>Signature:</b>
1010

1111
```typescript
12-
getFields(): {
13-
type?: string | undefined;
14-
query?: import("../..").Query | undefined;
15-
filter?: Filter | Filter[] | (() => Filter | Filter[] | undefined) | undefined;
16-
sort?: Record<string, import("./types").SortDirectionNumeric | import("./types").SortDirection> | Record<string, import("./types").SortDirectionNumeric | import("./types").SortDirection>[] | undefined;
17-
highlight?: any;
18-
highlightAll?: boolean | undefined;
19-
aggs?: any;
20-
from?: number | undefined;
21-
size?: number | undefined;
22-
source?: string | boolean | string[] | undefined;
23-
version?: boolean | undefined;
24-
fields?: SearchFieldValue[] | undefined;
25-
fieldsFromSource?: string | boolean | string[] | undefined;
26-
index?: import("../..").IndexPattern | undefined;
27-
searchAfter?: import("./types").EsQuerySearchAfter | undefined;
28-
timeout?: string | undefined;
29-
terminate_after?: number | undefined;
30-
};
12+
getFields(recurse?: boolean): SearchSourceFields;
3113
```
14+
15+
## Parameters
16+
17+
| Parameter | Type | Description |
18+
| --- | --- | --- |
19+
| recurse | <code>boolean</code> | |
20+
3221
<b>Returns:</b>
3322

34-
`{
35-
type?: string | undefined;
36-
query?: import("../..").Query | undefined;
37-
filter?: Filter | Filter[] | (() => Filter | Filter[] | undefined) | undefined;
38-
sort?: Record<string, import("./types").SortDirectionNumeric | import("./types").SortDirection> | Record<string, import("./types").SortDirectionNumeric | import("./types").SortDirection>[] | undefined;
39-
highlight?: any;
40-
highlightAll?: boolean | undefined;
41-
aggs?: any;
42-
from?: number | undefined;
43-
size?: number | undefined;
44-
source?: string | boolean | string[] | undefined;
45-
version?: boolean | undefined;
46-
fields?: SearchFieldValue[] | undefined;
47-
fieldsFromSource?: string | boolean | string[] | undefined;
48-
index?: import("../..").IndexPattern | undefined;
49-
searchAfter?: import("./types").EsQuerySearchAfter | undefined;
50-
timeout?: string | undefined;
51-
terminate_after?: number | undefined;
52-
}`
23+
`SearchSourceFields`
5324

docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchsource.getserializedfields.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,15 @@ serializes search source fields (which can later be passed to [ISearchStartSearc
99
<b>Signature:</b>
1010

1111
```typescript
12-
getSerializedFields(): SearchSourceFields;
12+
getSerializedFields(recurse?: boolean): SearchSourceFields;
1313
```
14+
15+
## Parameters
16+
17+
| Parameter | Type | Description |
18+
| --- | --- | --- |
19+
| recurse | <code>boolean</code> | |
20+
1421
<b>Returns:</b>
1522

1623
`SearchSourceFields`

docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchsource.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ export declare class SearchSource
3535
| [fetch(options)](./kibana-plugin-plugins-data-public.searchsource.fetch.md) | | Fetch this source and reject the returned Promise on error |
3636
| [fetch$(options)](./kibana-plugin-plugins-data-public.searchsource.fetch_.md) | | Fetch this source from Elasticsearch, returning an observable over the response(s) |
3737
| [getField(field, recurse)](./kibana-plugin-plugins-data-public.searchsource.getfield.md) | | Gets a single field from the fields |
38-
| [getFields()](./kibana-plugin-plugins-data-public.searchsource.getfields.md) | | returns all search source fields |
38+
| [getFields(recurse)](./kibana-plugin-plugins-data-public.searchsource.getfields.md) | | returns all search source fields |
3939
| [getId()](./kibana-plugin-plugins-data-public.searchsource.getid.md) | | returns search source id |
4040
| [getOwnField(field)](./kibana-plugin-plugins-data-public.searchsource.getownfield.md) | | Get the field from our own fields, don't traverse up the chain |
4141
| [getParent()](./kibana-plugin-plugins-data-public.searchsource.getparent.md) | | Get the parent of this SearchSource {<!-- -->undefined\|searchSource<!-- -->} |
4242
| [getSearchRequestBody()](./kibana-plugin-plugins-data-public.searchsource.getsearchrequestbody.md) | | Returns body contents of the search request, often referred as query DSL. |
43-
| [getSerializedFields()](./kibana-plugin-plugins-data-public.searchsource.getserializedfields.md) | | serializes search source fields (which can later be passed to [ISearchStartSearchSource](./kibana-plugin-plugins-data-public.isearchstartsearchsource.md)<!-- -->) |
43+
| [getSerializedFields(recurse)](./kibana-plugin-plugins-data-public.searchsource.getserializedfields.md) | | serializes search source fields (which can later be passed to [ISearchStartSearchSource](./kibana-plugin-plugins-data-public.isearchstartsearchsource.md)<!-- -->) |
4444
| [onRequestStart(handler)](./kibana-plugin-plugins-data-public.searchsource.onrequeststart.md) | | Add a handler that will be notified whenever requests start |
4545
| [removeField(field)](./kibana-plugin-plugins-data-public.searchsource.removefield.md) | | remove field |
4646
| [serialize()](./kibana-plugin-plugins-data-public.searchsource.serialize.md) | | Serializes the instance to a JSON string and a set of referenced objects. Use this method to get a representation of the search source which can be stored in a saved object.<!-- -->The references returned by this function can be mixed with other references in the same object, however make sure there are no name-collisions. The references will be named <code>kibanaSavedObjectMeta.searchSourceJSON.index</code> and <code>kibanaSavedObjectMeta.searchSourceJSON.filter[&lt;number&gt;].meta.index</code>.<!-- -->Using <code>createSearchSource</code>, the instance can be re-created. |

packages/kbn-optimizer/limits.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ pageLoadAssetSize:
7878
tileMap: 65337
7979
timelion: 29920
8080
transform: 41007
81-
triggersActionsUi: 170001
81+
triggersActionsUi: 186732
8282
uiActions: 97717
8383
uiActionsEnhanced: 313011
8484
upgradeAssistant: 81241

packages/kbn-pm/dist/index.js

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47961,11 +47961,13 @@ __webpack_require__.r(__webpack_exports__);
4796147961
"use strict";
4796247962
__webpack_require__.r(__webpack_exports__);
4796347963
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "installBazelTools", function() { return installBazelTools; });
47964-
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
47965-
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__);
47966-
/* harmony import */ var _child_process__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319);
47967-
/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(131);
47968-
/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(246);
47964+
/* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
47965+
/* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dedent__WEBPACK_IMPORTED_MODULE_0__);
47966+
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);
47967+
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);
47968+
/* harmony import */ var _child_process__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(319);
47969+
/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(131);
47970+
/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(246);
4796947971
/*
4797047972
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
4797147973
* or more contributor license agreements. Licensed under the Elastic License
@@ -47978,8 +47980,9 @@ __webpack_require__.r(__webpack_exports__);
4797847980

4797947981

4798047982

47983+
4798147984
async function readBazelToolsVersionFile(repoRootPath, versionFilename) {
47982-
const version = (await Object(_fs__WEBPACK_IMPORTED_MODULE_2__["readFile"])(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(repoRootPath, versionFilename))).toString().split('\n')[0];
47985+
const version = (await Object(_fs__WEBPACK_IMPORTED_MODULE_3__["readFile"])(Object(path__WEBPACK_IMPORTED_MODULE_1__["resolve"])(repoRootPath, versionFilename))).toString().split('\n')[0];
4798347986

4798447987
if (!version) {
4798547988
throw new Error(`[bazel_tools] Failed on reading bazel tools versions\n ${versionFilename} file do not contain any version set`);
@@ -47988,30 +47991,49 @@ async function readBazelToolsVersionFile(repoRootPath, versionFilename) {
4798847991
return version;
4798947992
}
4799047993

47994+
async function isBazelBinAvailable() {
47995+
try {
47996+
await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('bazel', ['--version'], {
47997+
stdio: 'pipe'
47998+
});
47999+
return true;
48000+
} catch {
48001+
return false;
48002+
}
48003+
}
48004+
4799148005
async function installBazelTools(repoRootPath) {
47992-
_log__WEBPACK_IMPORTED_MODULE_3__["log"].debug(`[bazel_tools] reading bazel tools versions from version files`);
48006+
_log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] reading bazel tools versions from version files`);
4799348007
const bazeliskVersion = await readBazelToolsVersionFile(repoRootPath, '.bazeliskversion');
4799448008
const bazelVersion = await readBazelToolsVersionFile(repoRootPath, '.bazelversion'); // Check what globals are installed
4799548009

47996-
_log__WEBPACK_IMPORTED_MODULE_3__["log"].debug(`[bazel_tools] verify if bazelisk is installed`);
48010+
_log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] verify if bazelisk is installed`);
4799748011
const {
47998-
stdout
47999-
} = await Object(_child_process__WEBPACK_IMPORTED_MODULE_1__["spawn"])('yarn', ['global', 'list'], {
48012+
stdout: bazeliskPkgInstallStdout
48013+
} = await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('yarn', ['global', 'list'], {
4800048014
stdio: 'pipe'
48001-
}); // Install bazelisk if not installed
48015+
});
48016+
const isBazelBinAlreadyAvailable = await isBazelBinAvailable(); // Install bazelisk if not installed
4800248017

48003-
if (!stdout.includes(`@bazel/bazelisk@${bazeliskVersion}`)) {
48004-
_log__WEBPACK_IMPORTED_MODULE_3__["log"].info(`[bazel_tools] installing Bazel tools`);
48005-
_log__WEBPACK_IMPORTED_MODULE_3__["log"].debug(`[bazel_tools] bazelisk is not installed. Installing @bazel/bazelisk@${bazeliskVersion} and bazel@${bazelVersion}`);
48006-
await Object(_child_process__WEBPACK_IMPORTED_MODULE_1__["spawn"])('yarn', ['global', 'add', `@bazel/bazelisk@${bazeliskVersion}`], {
48018+
if (!bazeliskPkgInstallStdout.includes(`@bazel/bazelisk@${bazeliskVersion}`) || !isBazelBinAlreadyAvailable) {
48019+
_log__WEBPACK_IMPORTED_MODULE_4__["log"].info(`[bazel_tools] installing Bazel tools`);
48020+
_log__WEBPACK_IMPORTED_MODULE_4__["log"].debug(`[bazel_tools] bazelisk is not installed. Installing @bazel/bazelisk@${bazeliskVersion} and bazel@${bazelVersion}`);
48021+
await Object(_child_process__WEBPACK_IMPORTED_MODULE_2__["spawn"])('yarn', ['global', 'add', `@bazel/bazelisk@${bazeliskVersion}`], {
4800748022
env: {
4800848023
USE_BAZEL_VERSION: bazelVersion
4800948024
},
4801048025
stdio: 'pipe'
4801148026
});
48027+
const isBazelBinAvailableAfterInstall = await isBazelBinAvailable();
48028+
48029+
if (!isBazelBinAvailableAfterInstall) {
48030+
throw new Error(dedent__WEBPACK_IMPORTED_MODULE_0___default.a`
48031+
[bazel_tools] an error occurred when installing the Bazel tools. Please make sure 'yarn global bin' is on your $PATH, otherwise just add it there
48032+
`);
48033+
}
4801248034
}
4801348035

48014-
_log__WEBPACK_IMPORTED_MODULE_3__["log"].success(`[bazel_tools] all bazel tools are correctly installed`);
48036+
_log__WEBPACK_IMPORTED_MODULE_4__["log"].success(`[bazel_tools] all bazel tools are correctly installed`);
4801548037
}
4801648038

4801748039
/***/ }),

packages/kbn-pm/src/utils/bazel/install_tools.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* Public License, v 1.
77
*/
88

9+
import dedent from 'dedent';
910
import { resolve } from 'path';
1011
import { spawn } from '../child_process';
1112
import { readFile } from '../fs';
@@ -25,17 +26,34 @@ async function readBazelToolsVersionFile(repoRootPath: string, versionFilename:
2526
return version;
2627
}
2728

29+
async function isBazelBinAvailable() {
30+
try {
31+
await spawn('bazel', ['--version'], { stdio: 'pipe' });
32+
33+
return true;
34+
} catch {
35+
return false;
36+
}
37+
}
38+
2839
export async function installBazelTools(repoRootPath: string) {
2940
log.debug(`[bazel_tools] reading bazel tools versions from version files`);
3041
const bazeliskVersion = await readBazelToolsVersionFile(repoRootPath, '.bazeliskversion');
3142
const bazelVersion = await readBazelToolsVersionFile(repoRootPath, '.bazelversion');
3243

3344
// Check what globals are installed
3445
log.debug(`[bazel_tools] verify if bazelisk is installed`);
35-
const { stdout } = await spawn('yarn', ['global', 'list'], { stdio: 'pipe' });
46+
const { stdout: bazeliskPkgInstallStdout } = await spawn('yarn', ['global', 'list'], {
47+
stdio: 'pipe',
48+
});
49+
50+
const isBazelBinAlreadyAvailable = await isBazelBinAvailable();
3651

3752
// Install bazelisk if not installed
38-
if (!stdout.includes(`@bazel/bazelisk@${bazeliskVersion}`)) {
53+
if (
54+
!bazeliskPkgInstallStdout.includes(`@bazel/bazelisk@${bazeliskVersion}`) ||
55+
!isBazelBinAlreadyAvailable
56+
) {
3957
log.info(`[bazel_tools] installing Bazel tools`);
4058

4159
log.debug(
@@ -47,6 +65,13 @@ export async function installBazelTools(repoRootPath: string) {
4765
},
4866
stdio: 'pipe',
4967
});
68+
69+
const isBazelBinAvailableAfterInstall = await isBazelBinAvailable();
70+
if (!isBazelBinAvailableAfterInstall) {
71+
throw new Error(dedent`
72+
[bazel_tools] an error occurred when installing the Bazel tools. Please make sure 'yarn global bin' is on your $PATH, otherwise just add it there
73+
`);
74+
}
5075
}
5176

5277
log.success(`[bazel_tools] all bazel tools are correctly installed`);

preinstall_check.js

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,37 @@
66
* Public License, v 1.
77
*/
88

9-
const isUsingNpm = process.env.npm_config_git !== undefined;
9+
(() => {
10+
const isUsingNpm = process.env.npm_config_git !== undefined;
1011

11-
if (isUsingNpm) {
12-
throw `Use Yarn instead of npm, see Kibana's contributing guidelines`;
13-
}
14-
15-
// The value of the `npm_config_argv` env for each command:
16-
//
17-
// - `npm install`: '{"remain":[],"cooked":["install"],"original":[]}'
18-
// - `yarn`: '{"remain":[],"cooked":["install"],"original":[]}'
19-
// - `yarn kbn bootstrap`: '{"remain":[],"cooked":["run","kbn"],"original":["kbn","bootstrap"]}'
20-
const rawArgv = process.env.npm_config_argv;
21-
22-
if (rawArgv === undefined) {
23-
return;
24-
}
12+
if (isUsingNpm) {
13+
throw `Use Yarn instead of npm, see Kibana's contributing guidelines`;
14+
}
2515

26-
try {
27-
const argv = JSON.parse(rawArgv);
16+
// The value of the `npm_config_argv` env for each command:
17+
//
18+
// - `npm install`: '{"remain":[],"cooked":["install"],"original":[]}'
19+
// - `yarn`: '{"remain":[],"cooked":["install"],"original":[]}'
20+
// - `yarn kbn bootstrap`: '{"remain":[],"cooked":["run","kbn"],"original":["kbn","bootstrap"]}'
21+
const rawArgv = process.env.npm_config_argv;
2822

29-
if (argv.cooked.includes('kbn')) {
30-
// all good, trying to install deps using `kbn`
23+
if (rawArgv === undefined) {
3124
return;
3225
}
3326

34-
if (argv.cooked.includes('install')) {
35-
console.log('\nWARNING: When installing dependencies, prefer `yarn kbn bootstrap`\n');
27+
try {
28+
const argv = JSON.parse(rawArgv);
29+
30+
// allow dependencies to be installed with `yarn kbn bootstrap` or `bazel run @nodejs//:yarn` (called under the hood by bazel)
31+
if (argv.cooked.includes('kbn') || !!process.env.BAZEL_YARN_INSTALL) {
32+
// all good, trying to install deps using `kbn` or bazel directly
33+
return;
34+
}
35+
36+
if (argv.cooked.includes('install')) {
37+
console.log('\nWARNING: When installing dependencies, prefer `yarn kbn bootstrap`\n');
38+
}
39+
} catch (e) {
40+
// if it fails we do nothing, as this is just intended to be a helpful message
3641
}
37-
} catch (e) {
38-
// if it fails we do nothing, as this is just intended to be a helpful message
39-
}
42+
})();

src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@ import { loggingSystemMock } from '../../../logging/logging_system.mock';
1414
import { SavedObjectTypeRegistry } from '../../saved_objects_type_registry';
1515
import { SavedObjectsType } from '../../types';
1616
import { errors as esErrors } from '@elastic/elasticsearch';
17+
import { DocumentMigrator } from '../core/document_migrator';
18+
jest.mock('../core/document_migrator', () => {
19+
return {
20+
// Create a mock for spying on the constructor
21+
DocumentMigrator: jest.fn().mockImplementation((...args) => {
22+
const { DocumentMigrator: RealDocMigrator } = jest.requireActual('../core/document_migrator');
23+
return new RealDocMigrator(args[0]);
24+
}),
25+
};
26+
});
1727

1828
const createRegistry = (types: Array<Partial<SavedObjectsType>>) => {
1929
const registry = new SavedObjectTypeRegistry();
@@ -31,12 +41,16 @@ const createRegistry = (types: Array<Partial<SavedObjectsType>>) => {
3141
};
3242

3343
describe('KibanaMigrator', () => {
44+
beforeEach(() => {
45+
(DocumentMigrator as jest.Mock).mockClear();
46+
});
3447
describe('constructor', () => {
3548
it('coerces the current Kibana version if it has a hyphen', () => {
3649
const options = mockOptions();
3750
options.kibanaVersion = '3.2.1-SNAPSHOT';
3851
const migrator = new KibanaMigrator(options);
3952
expect(migrator.kibanaVersion).toEqual('3.2.1');
53+
expect((DocumentMigrator as jest.Mock).mock.calls[0][0].kibanaVersion).toEqual('3.2.1');
4054
});
4155
});
4256
describe('getActiveMappings', () => {
@@ -105,8 +119,8 @@ describe('KibanaMigrator', () => {
105119

106120
const migrator = new KibanaMigrator(options);
107121

108-
expect(() => migrator.runMigrations()).rejects.toThrow(
109-
/Migrations are not ready. Make sure prepareMigrations is called first./i
122+
await expect(() => migrator.runMigrations()).toThrowErrorMatchingInlineSnapshot(
123+
`"Migrations are not ready. Make sure prepareMigrations is called first."`
110124
);
111125
});
112126

src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
*/
1313

1414
import { BehaviorSubject } from 'rxjs';
15+
import Semver from 'semver';
1516
import { KibanaConfigType } from '../../../kibana_config';
1617
import { ElasticsearchClient } from '../../../elasticsearch';
1718
import { Logger } from '../../../logging';
@@ -97,7 +98,7 @@ export class KibanaMigrator {
9798
this.log = logger;
9899
this.kibanaVersion = kibanaVersion.split('-')[0]; // coerce a semver-like string (x.y.z-SNAPSHOT) or prerelease version (x.y.z-alpha) to a regular semver (x.y.z);
99100
this.documentMigrator = new DocumentMigrator({
100-
kibanaVersion,
101+
kibanaVersion: this.kibanaVersion,
101102
typeRegistry,
102103
log: this.log,
103104
});
@@ -163,6 +164,15 @@ export class KibanaMigrator {
163164
registry: this.typeRegistry,
164165
});
165166

167+
this.log.debug('Applying registered migrations for the following saved object types:');
168+
Object.entries(this.documentMigrator.migrationVersion)
169+
.sort(([t1, v1], [t2, v2]) => {
170+
return Semver.compare(v1, v2);
171+
})
172+
.forEach(([type, migrationVersion]) => {
173+
this.log.debug(`migrationVersion: ${migrationVersion} saved object type: ${type}`);
174+
});
175+
166176
const migrators = Object.keys(indexMap).map((index) => {
167177
// TODO migrationsV2: remove old migrations algorithm
168178
if (this.savedObjectsConfig.enableV2) {

0 commit comments

Comments
 (0)