Skip to content

[Meta] Breaking saved object type conversions in 8.0 #100489

@jportner

Description

@jportner

Overview

In #27004, we implemented a feature to allow users to share saved objects across multiple spaces. As part of that effort, we had to change how saved objects are serialized to raw Elasticsearch documents. We implemented a conversion process to change saved objects to the new format, but this will regenerate IDs of existing saved objects to ensure that they are unique across all spaces.

Regenerating IDs of saved objects is a major breaking change. This will affect objects that reference each other, and it will also affect external references to saved objects (for example, a bookmarked URL to a dashboard). It was decided that the best path forward is to identify all existing "namespace-isolated" object types that need to become shareable, and convert them all at once in the 8.0 release. This process is called making the object types "share-capable".

As such, plugin authors need to take additional steps:

  1. Before the 8.0 release (during 7.x): Make sure that existing saved object types are using references correctly to link to other objects. If you are linking to other objects and you aren't using the root-level references field, it will break in 8.0.
  2. In the 8.0 release: Change client-side code to use the newly available SavedObjectsClient.resolve API (instead of SavedObjectsClient.get), and handle the new different outcomes (exactMatch, aliasMatch, conflict).

Important note: This conversion will not make any object types fully shareable! From an end-user's perspective, these object types will continue to function the same way as they did before, each one will still be isolated to a single space. Plugin authors will also need to plan additional steps in the 8.x timeframe to make their object types fully shareable. This may entail additional UI elements and user flows as necessitated by their individual use cases.

Affected objects

Each of the objects in Kibana below are currently "isolated" (registered w/ namespaceType: 'single'). Each should be reviewed by plugin authors to determine if they are using references correctly, and if they should be converted to become "share-capable" (registered w/ namespaceType: 'multiple-isolated') in the 8.0 release.

Update: object types are crossed out if we have deemed they should not be converted.

Saved Object Type Code Owner GH Issue(s) Status
action, action_task_params, alert @elastic/kibana-alerting-services #100067
graph-workspace, lens, lens-ui-telemetry, search, timelion-sheet, visualization @elastic/kibana-app #105808 #105809 #105810 #105812
index-pattern, query, search-session, url @elastic/kibana-app-services #106900
config, tag @elastic/kibana-core #102870
map @elastic/kibana-gis #101177
dashboard, canvas-element, canvas-workpad @elastic/kibana-presentation #105967 #105970
infrastructure-ui-source, metrics-explorer-view, inventory-view @elastic/logs-metrics-ui #101966
security-solution-signals-migration, siem-detection-engine-rule-actions, siem-detection-engine-rule-status @elastic/security-detections-response #105819 #114548
cases, cases-comments, cases-configure, cases-connector-mappings, cases-sub-case, cases-user-actions, siem-ui-timeline, siem-ui-timeline-note, siem-ui-timeline-pinned-event @elastic/security-threat-hunting #105677
exception-list @elastic/security-detections-response & @elastic/security-threat-hunting #105819 #114548
uptime-dynamic-settings @elastic/uptime N/A
Type registration traces -- click to expand
Saved Object Type Trace
config UiSettingsService.setup (src/core/server/ui_settings/ui_settings_service.ts:53:18)
url SharePlugin.setup (src/plugins/share/server/plugin.ts:21:23)
query QueryService.setup (src/plugins/data/server/query/query_service.ts:14:23)
index-pattern IndexPatternsServiceProvider.setup (src/plugins/data/server/index_patterns/index_patterns_service.ts:84:23)
visualization VisualizationsPlugin.setup (src/plugins/visualizations/server/plugin.ts:41:23)
timelion-sheet TimelionPlugin.setup (src/plugins/timelion/server/plugin.ts:30:23)
graph-workspace GraphPlugin.setup (x-pack/plugins/graph/server/plugin.ts:38:23)
search DiscoverServerPlugin.setup (src/plugins/discover/server/plugin.ts:18:23)
dashboard DashboardPlugin.setup (src/plugins/dashboard/server/plugin.ts:43:23)
tag SavedObjectTaggingPlugin.setup (x-pack/plugins/saved_objects_tagging/server/plugin.ts:43:18)
lens setupSavedObjects (x-pack/plugins/lens/server/saved_objects.ts:13:21)
lens-ui-telemetry setupSavedObjects (x-pack/plugins/lens/server/saved_objects.ts:51:21)
canvas-element CanvasPlugin.setup (x-pack/plugins/canvas/server/plugin.ts:52:28)
canvas-workpad CanvasPlugin.setup (x-pack/plugins/canvas/server/plugin.ts:53:28)
exception-list initSavedObjects (x-pack/plugins/lists/server/saved_objects/init_saved_objects.ts:14:16)
map MapsPlugin.setup (x-pack/plugins/maps/server/plugin.ts:214:23)
search-session EnhancedDataServerPlugin.setup (x-pack/plugins/data_enhanced/server/plugin.ts:32:23)
action setupSavedObjects (x-pack/plugins/actions/server/saved_objects/index.ts:30:16)
action_task_params setupSavedObjects (x-pack/plugins/actions/server/saved_objects/index.ts:66:16)
alert setupSavedObjects (x-pack/plugins/alerting/server/saved_objects/index.ts:46:16)
infrastructure-ui-source InfraServerPlugin.setup (x-pack/plugins/infra/server/plugin.ts:103:23)
metrics-explorer-view InfraServerPlugin.setup (x-pack/plugins/infra/server/plugin.ts:104:23)
inventory-view InfraServerPlugin.setup (x-pack/plugins/infra/server/plugin.ts:105:23)
cases-comments CasePlugin.setup (x-pack/plugins/cases/server/plugin.ts:75:23)
cases-configure CasePlugin.setup (x-pack/plugins/cases/server/plugin.ts:76:23)
cases-connector-mappings CasePlugin.setup (x-pack/plugins/cases/server/plugin.ts:77:23)
cases CasePlugin.setup (x-pack/plugins/cases/server/plugin.ts:78:23)
cases-user-actions CasePlugin.setup (x-pack/plugins/cases/server/plugin.ts:79:23)
cases-sub-case (added 2021-09-30, this was hidden behind a feature flag) CasePlugin.setup (x-pack/plugins/cases/server/plugin.ts)
siem-ui-timeline-note forEach (x-pack/plugins/security_solution/server/saved_objects.ts:37:40)
siem-ui-timeline-pinned-event forEach (x-pack/plugins/security_solution/server/saved_objects.ts:37:40)
siem-detection-engine-rule-actions forEach (x-pack/plugins/security_solution/server/saved_objects.ts:37:40)
siem-detection-engine-rule-status forEach (x-pack/plugins/security_solution/server/saved_objects.ts:37:40)
siem-ui-timeline forEach (x-pack/plugins/security_solution/server/saved_objects.ts:37:40)
security-solution-signals-migration forEach (x-pack/plugins/security_solution/server/saved_objects.ts:37:40)
uptime-dynamic-settings (added 2021-08-23) Plugin.setup (x-pack/plugins/uptime/server/plugin.ts:61:23)

Important considerations

If an object type should be converted, then all object types that it can reference should be converted too. For example, dashboards have references to visualizations, which have references to index-patterns -- all of these object types must be converted to become share-capable.

Developer guide

See the Sharing Saved Objects developer guide for step-by-step instructions on how to prepare your plugin for the 8.0 release. You will need to take 3-5 specific steps (depending on how your plugin uses saved objects).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Breaking ChangeFeature:Saved ObjectsFeature:Security/Sharing Saved ObjectsPlatform Security - Sharing Saved Objects featureMetaTeam:SecurityPlatform Security: Auth, Users, Roles, Spaces, Audit Logging, etc t//impact:lowAddressing this issue will have a low level of impact on the quality/strength of our product.loe:smallSmall Level of Effortv8.0.0

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions