diff --git a/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts b/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts index 48594416cbece..2d234c6f4d3d3 100644 --- a/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts +++ b/src/core/packages/saved-objects/migration-server-internal/src/core/unused_types.ts @@ -11,6 +11,8 @@ import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/type /** * Types that are no longer registered and need to be removed + * As of 8.8, no new types are allowed to be removed. + * Removing saved object types is not backward compatible */ export const REMOVED_TYPES: string[] = [ 'apm-services-telemetry', diff --git a/src/core/packages/saved-objects/server-internal/index.ts b/src/core/packages/saved-objects/server-internal/index.ts index 7b67bfa6861b4..3a9c80749c72e 100644 --- a/src/core/packages/saved-objects/server-internal/index.ts +++ b/src/core/packages/saved-objects/server-internal/index.ts @@ -11,6 +11,7 @@ export { MIGRATION_CLIENT_OPTIONS, SavedObjectsService, CoreSavedObjectsRouteHandlerContext, + SAVED_OBJECT_TYPES_COUNT, } from './src'; export type { InternalSavedObjectsServiceStart, diff --git a/src/core/packages/saved-objects/server-internal/src/index.ts b/src/core/packages/saved-objects/server-internal/src/index.ts index a964d30a0e66a..ae34f8f945462 100644 --- a/src/core/packages/saved-objects/server-internal/src/index.ts +++ b/src/core/packages/saved-objects/server-internal/src/index.ts @@ -18,3 +18,4 @@ export type { InternalSavedObjectsRequestHandlerContext, InternalSavedObjectRouter, } from './internal_types'; +export { SAVED_OBJECT_TYPES_COUNT } from './object_types'; diff --git a/src/core/packages/saved-objects/server-internal/src/object_types/index.ts b/src/core/packages/saved-objects/server-internal/src/object_types/index.ts index 74ba99cf95498..6246c59b8e943 100644 --- a/src/core/packages/saved-objects/server-internal/src/object_types/index.ts +++ b/src/core/packages/saved-objects/server-internal/src/object_types/index.ts @@ -8,3 +8,7 @@ */ export { registerCoreObjectTypes } from './registration'; + +// set minimum number of registered saved objects to ensure no object types are removed after 8.8 +// declared in internal implementation exclicilty to prevent unintended changes. +export const SAVED_OBJECT_TYPES_COUNT = 127 as const; diff --git a/src/core/packages/saved-objects/server/src/type_registry.ts b/src/core/packages/saved-objects/server/src/type_registry.ts index a1128b683166b..d64ca1917be0d 100644 --- a/src/core/packages/saved-objects/server/src/type_registry.ts +++ b/src/core/packages/saved-objects/server/src/type_registry.ts @@ -8,7 +8,6 @@ */ import type { SavedObjectsType } from './saved_objects_type'; - /** * Registry holding information about all the registered {@link SavedObjectsType | saved object types}. */ diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 43d5403245e64..427fcc06c3c30 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -15,6 +15,7 @@ import { createRootWithCorePlugins, type TestElasticsearchUtils, } from '@kbn/core-test-helpers-kbn-server'; +import { SAVED_OBJECT_TYPES_COUNT } from '@kbn/core-saved-objects-server-internal'; describe('checking migration metadata changes on all registered SO types', () => { let esServer: TestElasticsearchUtils; @@ -46,6 +47,8 @@ describe('checking migration metadata changes on all registered SO types', () => // This test is meant to fail when any change is made in registered types that could potentially impact the SO migration. // Just update the snapshot by running this test file via jest_integration with `-u` and push the update. // The intent is to trigger a code review from the Core team to review the SO type changes. + // The number of types in the hashMap should never be reduced, it can only increase. + // Removing saved object types is forbidden after 8.8. it('detecting migration related changes in registered types', () => { const allTypes = typeRegistry.getAllTypes(); @@ -185,5 +188,6 @@ describe('checking migration metadata changes on all registered SO types', () => "workplace_search_telemetry": "52b32b47ee576f554ac77cb1d5896dfbcfe9a1fb", } `); + expect(Object.keys(hashMap).length).toEqual(SAVED_OBJECT_TYPES_COUNT); }); }); diff --git a/src/core/server/integration_tests/saved_objects/jest.integration.config.js b/src/core/server/integration_tests/saved_objects/jest.integration.config.js index 842eeb6e9d19d..6f1903f5cf689 100644 --- a/src/core/server/integration_tests/saved_objects/jest.integration.config.js +++ b/src/core/server/integration_tests/saved_objects/jest.integration.config.js @@ -16,6 +16,7 @@ module.exports = { preset: '@kbn/test/jest_integration', rootDir: '../../../../..', roots: [ + '<rootDir>/src/core/server/integration_tests/saved_objects/registration', '<rootDir>/src/core/server/integration_tests/saved_objects/routes', '<rootDir>/src/core/server/integration_tests/saved_objects/service', '<rootDir>/src/core/server/integration_tests/saved_objects/validation', diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts b/src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts similarity index 100% rename from src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts rename to src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts