mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
Revert "[8.10] [SOR] Allow optionally downgrading documents with a higher version model in API READ methods (#164789)" (#165023)
This commit is contained in:
parent
fd6a456641
commit
f504ce3c9b
20 changed files with 52 additions and 141 deletions
|
@ -25,7 +25,6 @@ export type SavedObjectsFindOptions = Omit<
|
|||
| 'sortOrder'
|
||||
| 'typeToNamespacesMap'
|
||||
| 'migrationVersionCompatibility'
|
||||
| 'downwardConversion'
|
||||
>;
|
||||
|
||||
/**
|
||||
|
|
|
@ -65,7 +65,7 @@ export const performBulkGet = async <T>(
|
|||
const { securityExtension, spacesExtension } = extensions;
|
||||
|
||||
const namespace = commonHelper.getCurrentNamespace(options.namespace);
|
||||
const { migrationVersionCompatibility, downwardConversion } = options;
|
||||
const { migrationVersionCompatibility } = options;
|
||||
|
||||
if (objects.length === 0) {
|
||||
return { saved_objects: [] };
|
||||
|
@ -204,7 +204,7 @@ export const performBulkGet = async <T>(
|
|||
const document = getSavedObjectFromSource(registry, type, id, doc, {
|
||||
migrationVersionCompatibility,
|
||||
});
|
||||
const migrated = migrationHelper.migrateStorageDocument(document, { downwardConversion });
|
||||
const migrated = migrationHelper.migrateStorageDocument(document);
|
||||
|
||||
return migrated;
|
||||
}),
|
||||
|
|
|
@ -10,7 +10,7 @@ import { type SavedObject, BulkResolveError } from '@kbn/core-saved-objects-serv
|
|||
import {
|
||||
SavedObjectsBulkResolveObject,
|
||||
SavedObjectsBulkResolveResponse,
|
||||
SavedObjectsGetOptions,
|
||||
SavedObjectsResolveOptions,
|
||||
SavedObjectsResolveResponse,
|
||||
} from '@kbn/core-saved-objects-api-server';
|
||||
import { errorContent } from './utils';
|
||||
|
@ -20,7 +20,7 @@ import { incrementCounterInternal } from './internals/increment_counter_internal
|
|||
|
||||
export interface PerformCreateParams<T = unknown> {
|
||||
objects: SavedObjectsBulkResolveObject[];
|
||||
options: SavedObjectsGetOptions;
|
||||
options: SavedObjectsResolveOptions;
|
||||
}
|
||||
|
||||
export const performBulkResolve = async <T>(
|
||||
|
@ -52,7 +52,7 @@ export const performBulkResolve = async <T>(
|
|||
encryptionExtension,
|
||||
securityExtension,
|
||||
objects,
|
||||
options: { ...options, namespace }, // note: Includes downwardConversion?: 'forbid'
|
||||
options: { ...options, namespace },
|
||||
});
|
||||
const resolvedObjects = bulkResults.map<SavedObjectsResolveResponse<T>>((result) => {
|
||||
// extract payloads from saved object errors
|
||||
|
|
|
@ -92,7 +92,6 @@ export const performFind = async <T = unknown, A = unknown>(
|
|||
preference,
|
||||
aggs,
|
||||
migrationVersionCompatibility,
|
||||
downwardConversion,
|
||||
} = options;
|
||||
|
||||
if (!type) {
|
||||
|
@ -245,9 +244,7 @@ export const performFind = async <T = unknown, A = unknown>(
|
|||
});
|
||||
// can't migrate a document with partial attributes
|
||||
if (!fields) {
|
||||
savedObject = migrationHelper.migrateStorageDocument(savedObject, {
|
||||
downwardConversion,
|
||||
}) as SavedObject;
|
||||
savedObject = migrationHelper.migrateStorageDocument(savedObject) as SavedObject;
|
||||
}
|
||||
return {
|
||||
...savedObject,
|
||||
|
|
|
@ -42,7 +42,7 @@ export const performGet = async <T>(
|
|||
const { securityExtension } = extensions;
|
||||
|
||||
const namespace = commonHelper.getCurrentNamespace(options.namespace);
|
||||
const { migrationVersionCompatibility, downwardConversion } = options;
|
||||
const { migrationVersionCompatibility } = options;
|
||||
|
||||
if (!allowedTypes.includes(type)) {
|
||||
throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id);
|
||||
|
@ -86,9 +86,7 @@ export const performGet = async <T>(
|
|||
|
||||
let migrated: SavedObject<T>;
|
||||
try {
|
||||
migrated = migrationHelper.migrateStorageDocument(document, {
|
||||
downwardConversion,
|
||||
}) as SavedObject<T>;
|
||||
migrated = migrationHelper.migrateStorageDocument(document) as SavedObject<T>;
|
||||
} catch (error) {
|
||||
throw SavedObjectsErrorHelpers.decorateGeneralError(
|
||||
error,
|
||||
|
|
|
@ -35,17 +35,8 @@ export class MigrationHelper {
|
|||
* Migrate the given SO document, accepting downgrades.
|
||||
* This function is meant to be used by read APIs (get, find) for documents fetched from the index.
|
||||
* It will therefore accept downgrading the document before returning it from the API.
|
||||
*
|
||||
* Note: to opt out of downgrades, use the downwardConversion: 'forbid' API option in READ API operations:
|
||||
* get, resolve, find, bulk_get, bulk_resolve
|
||||
*/
|
||||
migrateStorageDocument(
|
||||
document: SavedObjectUnsanitizedDoc,
|
||||
options: { downwardConversion?: 'allow' | 'forbid' }
|
||||
): SavedObjectUnsanitizedDoc {
|
||||
return this.migrator.migrateDocument(document, {
|
||||
allowDowngrade:
|
||||
options?.downwardConversion && options.downwardConversion === 'forbid' ? false : true,
|
||||
}); // allowDowngrade conditional on downwardConversion
|
||||
migrateStorageDocument(document: SavedObjectUnsanitizedDoc): SavedObjectUnsanitizedDoc {
|
||||
return this.migrator.migrateDocument(document, { allowDowngrade: true });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import type { MgetResponseItem } from '@elastic/elasticsearch/lib/api/typesWithB
|
|||
import { isNotFoundFromUnsupportedServer } from '@kbn/core-elasticsearch-server-internal';
|
||||
import type {
|
||||
SavedObjectsBulkResolveObject,
|
||||
SavedObjectsGetOptions,
|
||||
SavedObjectsResolveOptions,
|
||||
SavedObjectsResolveResponse,
|
||||
SavedObjectsIncrementCounterField,
|
||||
SavedObjectsIncrementCounterOptions,
|
||||
|
@ -74,7 +74,7 @@ export interface InternalBulkResolveParams {
|
|||
encryptionExtension: ISavedObjectsEncryptionExtension | undefined;
|
||||
securityExtension: ISavedObjectsSecurityExtension | undefined;
|
||||
objects: SavedObjectsBulkResolveObject[];
|
||||
options?: SavedObjectsGetOptions;
|
||||
options?: SavedObjectsResolveOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -120,7 +120,7 @@ export async function internalBulkResolve<T>(
|
|||
const validObjects = allObjects.filter(isRight);
|
||||
|
||||
const namespace = normalizeNamespace(options.namespace);
|
||||
const { migrationVersionCompatibility, downwardConversion } = options;
|
||||
const { migrationVersionCompatibility } = options;
|
||||
|
||||
const aliasDocs = await fetchAndUpdateAliases(
|
||||
validObjects,
|
||||
|
@ -186,11 +186,8 @@ export async function internalBulkResolve<T>(
|
|||
// @ts-expect-error MultiGetHit._source is optional
|
||||
const object = getSavedObjectFromSource<T>(registry, objectType, objectId, doc, {
|
||||
migrationVersionCompatibility,
|
||||
downwardConversion,
|
||||
});
|
||||
const migrated = migrator.migrateDocument(object, {
|
||||
allowDowngrade: downwardConversion && downwardConversion === 'forbid' ? false : true, // 'forbid' => docMigrator throws on when documents have higher model versions than current.
|
||||
}) as SavedObject<T>;
|
||||
const migrated = migrator.migrateDocument(object, { allowDowngrade: true }) as SavedObject<T>;
|
||||
|
||||
if (!encryptionExtension?.isEncryptableType(migrated.type)) {
|
||||
return migrated;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*/
|
||||
|
||||
import {
|
||||
SavedObjectsGetOptions,
|
||||
SavedObjectsResolveOptions,
|
||||
SavedObjectsResolveResponse,
|
||||
} from '@kbn/core-saved-objects-api-server';
|
||||
import { ApiExecutionContext } from './types';
|
||||
|
@ -17,7 +17,7 @@ import { incrementCounterInternal } from './internals/increment_counter_internal
|
|||
export interface PerformCreateParams<T = unknown> {
|
||||
type: string;
|
||||
id: string;
|
||||
options: SavedObjectsGetOptions;
|
||||
options: SavedObjectsResolveOptions;
|
||||
}
|
||||
|
||||
export const performResolve = async <T>(
|
||||
|
@ -51,7 +51,7 @@ export const performResolve = async <T>(
|
|||
encryptionExtension,
|
||||
securityExtension,
|
||||
objects: [{ type, id }],
|
||||
options: { ...options, namespace }, // note: Includes downwardConversion?: 'forbid'
|
||||
options: { ...options, namespace },
|
||||
});
|
||||
const [result] = bulkResults;
|
||||
if (isBulkResolveError(result)) {
|
||||
|
|
|
@ -35,6 +35,7 @@ import type {
|
|||
SavedObjectsClosePointInTimeResponse,
|
||||
ISavedObjectsPointInTimeFinder,
|
||||
SavedObjectsCreatePointInTimeFinderDependencies,
|
||||
SavedObjectsResolveOptions,
|
||||
SavedObjectsResolveResponse,
|
||||
SavedObjectsCollectMultiNamespaceReferencesObject,
|
||||
SavedObjectsUpdateObjectsSpacesObject,
|
||||
|
@ -347,7 +348,7 @@ export class SavedObjectsRepository implements ISavedObjectsRepository {
|
|||
*/
|
||||
async bulkResolve<T = unknown>(
|
||||
objects: SavedObjectsBulkResolveObject[],
|
||||
options: SavedObjectsGetOptions = {}
|
||||
options: SavedObjectsResolveOptions = {}
|
||||
): Promise<SavedObjectsBulkResolveResponse<T>> {
|
||||
return await performBulkResolve(
|
||||
{
|
||||
|
@ -382,7 +383,7 @@ export class SavedObjectsRepository implements ISavedObjectsRepository {
|
|||
async resolve<T = unknown>(
|
||||
type: string,
|
||||
id: string,
|
||||
options: SavedObjectsGetOptions = {}
|
||||
options: SavedObjectsResolveOptions = {}
|
||||
): Promise<SavedObjectsResolveResponse<T>> {
|
||||
return await performResolve(
|
||||
{
|
||||
|
|
|
@ -31,6 +31,7 @@ import type {
|
|||
SavedObjectsBulkUpdateObject,
|
||||
ISavedObjectsPointInTimeFinder,
|
||||
SavedObjectsCreatePointInTimeFinderDependencies,
|
||||
SavedObjectsResolveOptions,
|
||||
SavedObjectsResolveResponse,
|
||||
SavedObjectsCollectMultiNamespaceReferencesObject,
|
||||
SavedObjectsUpdateObjectsSpacesObject,
|
||||
|
@ -121,7 +122,7 @@ export class SavedObjectsClient implements SavedObjectsClientContract {
|
|||
/** {@inheritDoc SavedObjectsClientContract.bulkResolve} */
|
||||
async bulkResolve<T = unknown>(
|
||||
objects: SavedObjectsBulkResolveObject[],
|
||||
options?: SavedObjectsGetOptions
|
||||
options?: SavedObjectsResolveOptions
|
||||
): Promise<SavedObjectsBulkResolveResponse<T>> {
|
||||
return await this._repository.bulkResolve(objects, options);
|
||||
}
|
||||
|
@ -130,7 +131,7 @@ export class SavedObjectsClient implements SavedObjectsClientContract {
|
|||
async resolve<T = unknown>(
|
||||
type: string,
|
||||
id: string,
|
||||
options: SavedObjectsGetOptions = {}
|
||||
options: SavedObjectsResolveOptions = {}
|
||||
): Promise<SavedObjectsResolveResponse<T>> {
|
||||
return await this._repository.resolve(type, id, options);
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ export type {
|
|||
ISavedObjectsPointInTimeFinder,
|
||||
SavedObjectsCreatePointInTimeFinderDependencies,
|
||||
SavedObjectsPitParams,
|
||||
SavedObjectsResolveOptions,
|
||||
SavedObjectsResolveResponse,
|
||||
SavedObjectsCollectMultiNamespaceReferencesObject,
|
||||
SavedObjectsUpdateObjectsSpacesResponseObject,
|
||||
|
|
|
@ -11,7 +11,7 @@ import type {
|
|||
AggregationsAggregationContainer,
|
||||
SortResults,
|
||||
} from '@elastic/elasticsearch/lib/api/typesWithBodyKey';
|
||||
import type { SavedObject, SavedObjectsGetOptions } from '../..';
|
||||
import type { SavedObject } from '../..';
|
||||
|
||||
type KueryNode = any;
|
||||
|
||||
|
@ -153,8 +153,7 @@ export interface SavedObjectsFindOptions {
|
|||
*/
|
||||
pit?: SavedObjectsPitParams;
|
||||
/** {@link SavedObjectsRawDocParseOptions.migrationVersionCompatibility} */
|
||||
migrationVersionCompatibility?: SavedObjectsGetOptions['migrationVersionCompatibility'];
|
||||
downwardConversion?: SavedObjectsGetOptions['downwardConversion'];
|
||||
migrationVersionCompatibility?: 'compatible' | 'raw';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,5 +16,4 @@ import { SavedObjectsBaseOptions } from './base';
|
|||
export interface SavedObjectsGetOptions extends SavedObjectsBaseOptions {
|
||||
/** {@link SavedObjectsRawDocParseOptions.migrationVersionCompatibility} */
|
||||
migrationVersionCompatibility?: 'compatible' | 'raw';
|
||||
downwardConversion?: 'allow' | 'forbid';
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ export type {
|
|||
SavedObjectsRemoveReferencesToOptions,
|
||||
SavedObjectsRemoveReferencesToResponse,
|
||||
} from './remove_references_to';
|
||||
export type { SavedObjectsResolveResponse } from './resolve';
|
||||
export type { SavedObjectsResolveOptions, SavedObjectsResolveResponse } from './resolve';
|
||||
export type { SavedObjectsUpdateResponse, SavedObjectsUpdateOptions } from './update';
|
||||
export type {
|
||||
SavedObjectsUpdateObjectsSpacesObject,
|
||||
|
|
|
@ -6,8 +6,19 @@
|
|||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { SavedObjectsBaseOptions } from './base';
|
||||
import type { SavedObject } from '../..';
|
||||
|
||||
/**
|
||||
* Options for the saved objects get operation
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export interface SavedObjectsResolveOptions extends SavedObjectsBaseOptions {
|
||||
/** {@link SavedObjectsRawDocParseOptions.migrationVersionCompatibility} */
|
||||
migrationVersionCompatibility?: 'compatible' | 'raw';
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @public
|
||||
|
|
|
@ -20,6 +20,7 @@ import type {
|
|||
SavedObjectsUpdateObjectsSpacesOptions,
|
||||
SavedObjectsCollectMultiNamespaceReferencesObject,
|
||||
SavedObjectsUpdateObjectsSpacesResponse,
|
||||
SavedObjectsResolveOptions,
|
||||
SavedObjectsResolveResponse,
|
||||
ISavedObjectsPointInTimeFinder,
|
||||
SavedObjectsRemoveReferencesToOptions,
|
||||
|
@ -216,7 +217,7 @@ export interface SavedObjectsClientContract {
|
|||
* See documentation for `.resolve`.
|
||||
*
|
||||
* @param objects - an array of objects to resolve (contains id and type)
|
||||
* @param options {@link SavedObjectsGetOptions} - options for the bulk resolve operation
|
||||
* @param options {@link SavedObjectsResolveOptions} - options for the bulk resolve operation
|
||||
* @returns the {@link SavedObjectsBulkResolveResponse}
|
||||
* @example
|
||||
*
|
||||
|
@ -231,7 +232,7 @@ export interface SavedObjectsClientContract {
|
|||
*/
|
||||
bulkResolve<T = unknown>(
|
||||
objects: SavedObjectsBulkResolveObject[],
|
||||
options?: SavedObjectsGetOptions
|
||||
options?: SavedObjectsResolveOptions
|
||||
): Promise<SavedObjectsBulkResolveResponse<T>>;
|
||||
|
||||
/**
|
||||
|
@ -247,13 +248,13 @@ export interface SavedObjectsClientContract {
|
|||
*
|
||||
* @param type - The type of SavedObject to retrieve
|
||||
* @param id - The ID of the SavedObject to retrieve
|
||||
* @param options {@link SavedObjectsGetOptions} - options for the resolve operation
|
||||
* @param options {@link SavedObjectsResolveOptions} - options for the resolve operation
|
||||
* @returns the {@link SavedObjectsResolveResponse}
|
||||
*/
|
||||
resolve<T = unknown>(
|
||||
type: string,
|
||||
id: string,
|
||||
options?: SavedObjectsGetOptions
|
||||
options?: SavedObjectsResolveOptions
|
||||
): Promise<SavedObjectsResolveResponse<T>>;
|
||||
|
||||
/**
|
||||
|
|
|
@ -20,6 +20,7 @@ import type {
|
|||
SavedObjectsUpdateObjectsSpacesOptions,
|
||||
SavedObjectsCollectMultiNamespaceReferencesObject,
|
||||
SavedObjectsUpdateObjectsSpacesResponse,
|
||||
SavedObjectsResolveOptions,
|
||||
SavedObjectsResolveResponse,
|
||||
ISavedObjectsPointInTimeFinder,
|
||||
SavedObjectsRemoveReferencesToOptions,
|
||||
|
@ -200,7 +201,7 @@ export interface ISavedObjectsRepository {
|
|||
* Resolves an array of objects by id, using any legacy URL aliases if they exist
|
||||
*
|
||||
* @param {array} objects - an array of objects containing id, type
|
||||
* @param {object} [options={}] {@link SavedObjectsGetOptions} - options for the bulk resolve operation
|
||||
* @param {object} [options={}] {@link SavedObjectsResolveOptions} - options for the bulk resolve operation
|
||||
* @property {string} [options.migrationVersionCompatibility]
|
||||
* @property {string} [options.namespace]
|
||||
* @returns {promise} - { resolved_objects: [{ saved_object, outcome }] }
|
||||
|
@ -213,7 +214,7 @@ export interface ISavedObjectsRepository {
|
|||
*/
|
||||
bulkResolve<T = unknown>(
|
||||
objects: SavedObjectsBulkResolveObject[],
|
||||
options?: SavedObjectsGetOptions
|
||||
options?: SavedObjectsResolveOptions
|
||||
): Promise<SavedObjectsBulkResolveResponse<T>>;
|
||||
|
||||
/**
|
||||
|
@ -237,7 +238,7 @@ export interface ISavedObjectsRepository {
|
|||
*
|
||||
* @param {string} type - the type of the object to resolve
|
||||
* @param {string} id - the id of the object to resolve
|
||||
* @param {object} [options={}] {@link SavedObjectsGetOptions} - options for the resolve operation
|
||||
* @param {object} [options={}] {@link SavedObjectsResolveOptions} - options for the resolve operation
|
||||
* @property {string} [options.migrationVersionCompatibility]
|
||||
* @property {string} [options.namespace]
|
||||
* @returns {promise} - { saved_object, outcome }
|
||||
|
@ -245,7 +246,7 @@ export interface ISavedObjectsRepository {
|
|||
resolve<T = unknown>(
|
||||
type: string,
|
||||
id: string,
|
||||
options?: SavedObjectsGetOptions
|
||||
options?: SavedObjectsResolveOptions
|
||||
): Promise<SavedObjectsResolveResponse<T>>;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1462,7 +1462,7 @@ describe('DocumentMigrator', () => {
|
|||
expect(() =>
|
||||
migrator.migrate(document, { allowDowngrade: false })
|
||||
).toThrowErrorMatchingInlineSnapshot(
|
||||
`"[NewerModelVersionError]: Document \\"smelly\\" belongs to a more recent version of Kibana [10.2.0] when the last known version is [10.1.0]."`
|
||||
`"Document \\"smelly\\" belongs to a more recent version of Kibana [10.2.0] when the last known version is [10.1.0]."`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -81,9 +81,6 @@ export interface VersionedTransformer {
|
|||
migrateAndConvert(doc: SavedObjectUnsanitizedDoc): SavedObjectUnsanitizedDoc[];
|
||||
}
|
||||
|
||||
export function createNewerModelVersionError(message: string) {
|
||||
return Boom.boomify(Boom.badData(message), { message: '[NewerModelVersionError]' });
|
||||
}
|
||||
/**
|
||||
* A concrete implementation of the {@link VersionedTransformer} interface.
|
||||
*/
|
||||
|
@ -184,11 +181,9 @@ export class DocumentMigrator implements VersionedTransformer {
|
|||
const currentVersion = doc.typeMigrationVersion ?? doc.migrationVersion?.[doc.type];
|
||||
const latestVersion = this.migrations[doc.type].latestVersion[TransformType.Migrate];
|
||||
if (!allowDowngrade) {
|
||||
if (!allowDowngrade) {
|
||||
throw createNewerModelVersionError(
|
||||
`Document "${doc.id}" belongs to a more recent version of Kibana [${currentVersion}] when the last known version is [${latestVersion}].`
|
||||
);
|
||||
}
|
||||
throw Boom.badData(
|
||||
`Document "${doc.id}" belongs to a more recent version of Kibana [${currentVersion}] when the last known version is [${latestVersion}].`
|
||||
);
|
||||
}
|
||||
return this.transformDown(doc, { targetTypeVersion: latestVersion! });
|
||||
} else {
|
||||
|
|
|
@ -138,26 +138,6 @@ describe('Higher version doc conversion', () => {
|
|||
newField: 'someValue',
|
||||
});
|
||||
});
|
||||
it('throws error for documents using higher version model than current', async () => {
|
||||
try {
|
||||
await repositoryV1.get('test-type', 'doc-1', {
|
||||
downwardConversion: 'forbid',
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err.message).toBe(
|
||||
'[NewerModelVersionError]: Document "doc-1" belongs to a more recent version of Kibana [10.2.0] when the last known version is [10.1.0].'
|
||||
);
|
||||
}
|
||||
});
|
||||
it("doesn't throw error for documents using current version model when 'downwardConversion' is 'forbid'", async () => {
|
||||
try {
|
||||
await repositoryV2.get('test-type', 'doc-1', {
|
||||
downwardConversion: 'forbid',
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err).toBeUndefined();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('#bulkGet', () => {
|
||||
|
@ -175,26 +155,6 @@ describe('Higher version doc conversion', () => {
|
|||
newField: 'someValue',
|
||||
});
|
||||
});
|
||||
it('throws error for documents using higher version model than current', async () => {
|
||||
try {
|
||||
await repositoryV2.bulkGet([{ type: 'test-type', id: 'doc-1' }], {
|
||||
downwardConversion: 'forbid',
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err.message).toBe(
|
||||
'[NewerModelVersionError]: Document "doc-1" belongs to a more recent version of Kibana [10.2.0] when the last known version is [10.1.0].'
|
||||
);
|
||||
}
|
||||
});
|
||||
it("doesn't throw error for documents using current version model when 'downwardConversion' is 'forbid'", async () => {
|
||||
try {
|
||||
await repositoryV2.get('test-type', 'doc-1', {
|
||||
downwardConversion: 'forbid',
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err).toBeUndefined();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('#resolve', () => {
|
||||
|
@ -212,26 +172,6 @@ describe('Higher version doc conversion', () => {
|
|||
newField: 'someValue',
|
||||
});
|
||||
});
|
||||
it('throws error for documents using higher version model than current', async () => {
|
||||
try {
|
||||
await repositoryV2.resolve('test-type', 'doc-1', {
|
||||
downwardConversion: 'forbid',
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err.message).toBe(
|
||||
'[NewerModelVersionError]: Document "doc-1" belongs to a more recent version of Kibana [10.2.0] when the last known version is [10.1.0].'
|
||||
);
|
||||
}
|
||||
});
|
||||
it("doesn't throw error for documents using current version model when 'downwardConversion' is 'forbid'", async () => {
|
||||
try {
|
||||
await repositoryV2.get('test-type', 'doc-1', {
|
||||
downwardConversion: 'forbid',
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err).toBeUndefined();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('#bulkResolve', () => {
|
||||
|
@ -249,25 +189,5 @@ describe('Higher version doc conversion', () => {
|
|||
newField: 'someValue',
|
||||
});
|
||||
});
|
||||
it('throws error for documents using higher version model than current', async () => {
|
||||
try {
|
||||
await repositoryV2.bulkResolve([{ type: 'test-type', id: 'doc-1' }], {
|
||||
downwardConversion: 'forbid',
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err.message).toBe(
|
||||
'[NewerModelVersionError]: Document "doc-1" belongs to a more recent version of Kibana [10.2.0] when the last known version is [10.1.0].'
|
||||
);
|
||||
}
|
||||
});
|
||||
it("doesn't throw error for documents using current version model when 'downwardConversion' is 'forbid'", async () => {
|
||||
try {
|
||||
await repositoryV2.get('test-type', 'doc-1', {
|
||||
downwardConversion: 'forbid',
|
||||
});
|
||||
} catch (err) {
|
||||
expect(err).toBeUndefined();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue