mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
[saved objects] Strip version qualifier in SO service to fix unknown type deprecations. (#116480) (#116858)
Co-authored-by: Luke Elmers <luke.elmers@elastic.co>
This commit is contained in:
parent
91b28f3351
commit
3911490502
5 changed files with 84 additions and 14 deletions
|
@ -46,15 +46,6 @@ describe('KibanaMigrator', () => {
|
|||
beforeEach(() => {
|
||||
(DocumentMigrator as jest.Mock).mockClear();
|
||||
});
|
||||
describe('constructor', () => {
|
||||
it('coerces the current Kibana version if it has a hyphen', () => {
|
||||
const options = mockOptions();
|
||||
options.kibanaVersion = '3.2.1-SNAPSHOT';
|
||||
const migrator = new KibanaMigrator(options);
|
||||
expect(migrator.kibanaVersion).toEqual('3.2.1');
|
||||
expect((DocumentMigrator as jest.Mock).mock.calls[0][0].kibanaVersion).toEqual('3.2.1');
|
||||
});
|
||||
});
|
||||
describe('getActiveMappings', () => {
|
||||
it('returns full index mappings w/ core properties', () => {
|
||||
const options = mockOptions();
|
||||
|
|
|
@ -88,7 +88,7 @@ export class KibanaMigrator {
|
|||
this.serializer = new SavedObjectsSerializer(this.typeRegistry);
|
||||
this.mappingProperties = mergeTypes(this.typeRegistry.getAllTypes());
|
||||
this.log = logger;
|
||||
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);
|
||||
this.kibanaVersion = kibanaVersion;
|
||||
this.documentMigrator = new DocumentMigrator({
|
||||
kibanaVersion: this.kibanaVersion,
|
||||
typeRegistry,
|
||||
|
|
|
@ -25,3 +25,8 @@ export const typeRegistryInstanceMock = typeRegistryMock.create();
|
|||
jest.doMock('./saved_objects_type_registry', () => ({
|
||||
SavedObjectTypeRegistry: jest.fn().mockImplementation(() => typeRegistryInstanceMock),
|
||||
}));
|
||||
|
||||
export const registerRoutesMock = jest.fn();
|
||||
jest.doMock('./routes', () => ({
|
||||
registerRoutes: registerRoutesMock,
|
||||
}));
|
||||
|
|
|
@ -6,17 +6,25 @@
|
|||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { join } from 'path';
|
||||
import loadJsonFile from 'load-json-file';
|
||||
|
||||
import {
|
||||
migratorInstanceMock,
|
||||
clientProviderInstanceMock,
|
||||
KibanaMigratorMock,
|
||||
migratorInstanceMock,
|
||||
registerRoutesMock,
|
||||
typeRegistryInstanceMock,
|
||||
} from './saved_objects_service.test.mocks';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import { RawPackageInfo } from '@kbn/config';
|
||||
import { ByteSizeValue } from '@kbn/config-schema';
|
||||
import { REPO_ROOT } from '@kbn/dev-utils';
|
||||
|
||||
import { SavedObjectsService } from './saved_objects_service';
|
||||
import { mockCoreContext } from '../core_context.mock';
|
||||
import { Env } from '../config';
|
||||
import { getEnvOptions } from '../config/mocks';
|
||||
import { configServiceMock } from '../mocks';
|
||||
import { elasticsearchServiceMock } from '../elasticsearch/elasticsearch_service.mock';
|
||||
import { coreUsageDataServiceMock } from '../core_usage_data/core_usage_data_service.mock';
|
||||
|
@ -108,6 +116,42 @@ describe('SavedObjectsService', () => {
|
|||
expect(mockRegistry.registerDeprecations).toHaveBeenCalledWith(deprecations);
|
||||
});
|
||||
|
||||
it('registers the deprecation provider with the correct kibanaVersion', async () => {
|
||||
const pkg = loadJsonFile.sync(join(REPO_ROOT, 'package.json')) as RawPackageInfo;
|
||||
const kibanaVersion = pkg.version;
|
||||
|
||||
const coreContext = createCoreContext({
|
||||
env: Env.createDefault(REPO_ROOT, getEnvOptions(), {
|
||||
...pkg,
|
||||
version: `${kibanaVersion}-beta1`, // test behavior when release has a version qualifier
|
||||
}),
|
||||
});
|
||||
|
||||
const soService = new SavedObjectsService(coreContext);
|
||||
await soService.setup(createSetupDeps());
|
||||
|
||||
expect(getSavedObjectsDeprecationsProvider).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ kibanaVersion })
|
||||
);
|
||||
});
|
||||
|
||||
it('calls registerRoutes with the correct kibanaVersion', async () => {
|
||||
const pkg = loadJsonFile.sync(join(REPO_ROOT, 'package.json')) as RawPackageInfo;
|
||||
const kibanaVersion = pkg.version;
|
||||
|
||||
const coreContext = createCoreContext({
|
||||
env: Env.createDefault(REPO_ROOT, getEnvOptions(), {
|
||||
...pkg,
|
||||
version: `${kibanaVersion}-beta1`, // test behavior when release has a version qualifier
|
||||
}),
|
||||
});
|
||||
|
||||
const soService = new SavedObjectsService(coreContext);
|
||||
await soService.setup(createSetupDeps());
|
||||
|
||||
expect(registerRoutesMock).toHaveBeenCalledWith(expect.objectContaining({ kibanaVersion }));
|
||||
});
|
||||
|
||||
describe('#setClientFactoryProvider', () => {
|
||||
it('registers the factory to the clientProvider', async () => {
|
||||
const coreContext = createCoreContext();
|
||||
|
@ -218,6 +262,24 @@ describe('SavedObjectsService', () => {
|
|||
expect(migratorInstanceMock.runMigrations).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('calls KibanaMigrator with correct version', async () => {
|
||||
const pkg = loadJsonFile.sync(join(REPO_ROOT, 'package.json')) as RawPackageInfo;
|
||||
const kibanaVersion = pkg.version;
|
||||
|
||||
const coreContext = createCoreContext({
|
||||
env: Env.createDefault(REPO_ROOT, getEnvOptions(), {
|
||||
...pkg,
|
||||
version: `${kibanaVersion}-beta1`, // test behavior when release has a version qualifier
|
||||
}),
|
||||
});
|
||||
|
||||
const soService = new SavedObjectsService(coreContext);
|
||||
await soService.setup(createSetupDeps());
|
||||
await soService.start(createStartDeps());
|
||||
|
||||
expect(KibanaMigratorMock).toHaveBeenCalledWith(expect.objectContaining({ kibanaVersion }));
|
||||
});
|
||||
|
||||
it('waits for all es nodes to be compatible before running migrations', async (done) => {
|
||||
expect.assertions(2);
|
||||
const coreContext = createCoreContext({ skipMigration: false });
|
||||
|
|
|
@ -278,6 +278,7 @@ export class SavedObjectsService
|
|||
implements CoreService<InternalSavedObjectsServiceSetup, InternalSavedObjectsServiceStart>
|
||||
{
|
||||
private logger: Logger;
|
||||
private readonly kibanaVersion: string;
|
||||
|
||||
private setupDeps?: SavedObjectsSetupDeps;
|
||||
private config?: SavedObjectConfig;
|
||||
|
@ -290,6 +291,9 @@ export class SavedObjectsService
|
|||
|
||||
constructor(private readonly coreContext: CoreContext) {
|
||||
this.logger = coreContext.logger.get('savedobjects-service');
|
||||
this.kibanaVersion = SavedObjectsService.stripVersionQualifier(
|
||||
this.coreContext.env.packageInfo.version
|
||||
);
|
||||
}
|
||||
|
||||
public async setup(setupDeps: SavedObjectsSetupDeps): Promise<InternalSavedObjectsServiceSetup> {
|
||||
|
@ -312,7 +316,7 @@ export class SavedObjectsService
|
|||
getSavedObjectsDeprecationsProvider({
|
||||
kibanaIndex,
|
||||
savedObjectsConfig: this.config,
|
||||
kibanaVersion: this.coreContext.env.packageInfo.version,
|
||||
kibanaVersion: this.kibanaVersion,
|
||||
typeRegistry: this.typeRegistry,
|
||||
})
|
||||
);
|
||||
|
@ -326,7 +330,7 @@ export class SavedObjectsService
|
|||
config: this.config,
|
||||
migratorPromise: this.migrator$.pipe(first()).toPromise(),
|
||||
kibanaIndex,
|
||||
kibanaVersion: this.coreContext.env.packageInfo.version,
|
||||
kibanaVersion: this.kibanaVersion,
|
||||
});
|
||||
|
||||
registerCoreObjectTypes(this.typeRegistry);
|
||||
|
@ -502,11 +506,19 @@ export class SavedObjectsService
|
|||
return new KibanaMigrator({
|
||||
typeRegistry: this.typeRegistry,
|
||||
logger: this.logger,
|
||||
kibanaVersion: this.coreContext.env.packageInfo.version,
|
||||
kibanaVersion: this.kibanaVersion,
|
||||
soMigrationsConfig,
|
||||
kibanaIndex,
|
||||
client,
|
||||
migrationsRetryDelay,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Coerce a semver-like string (x.y.z-SNAPSHOT) or prerelease version (x.y.z-alpha)
|
||||
* to regular semver (x.y.z).
|
||||
*/
|
||||
private static stripVersionQualifier(version: string) {
|
||||
return version.split('-')[0];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue