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:
- 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.
- 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).
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:
referencesfield, it will break in 8.0.SavedObjectsClient.resolveAPI (instead ofSavedObjectsClient.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 outif we have deemed they should not be converted.timelion-sheet, visualizationsearch-session,urlconfig, taginfrastructure-ui-source,metrics-explorer-view,inventory-viewsecurity-solution-signals-migration, siem-detection-engine-rule-actions, siem-detection-engine-rule-statusuptime-dynamic-settingsType registration traces -- click to expand
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).