elastic / kibana

Your window into the Elastic Stack
https://www.elastic.co/products/kibana
Other
19.63k stars 8.22k forks source link

[Maps] Upgraded maps panel displays Cannot create AbstractESSourceDescriptor when indexPatternId is not provided error and no data #191777

Open bhavyarm opened 2 months ago

bhavyarm commented 2 months ago

Kibana version: 8.15.1

Browser version: chrome latest

Browser OS version: OS X

Original install method (e.g. download page, yum, from source, etc.): from staging

Describe the bug: I upgraded from 7.17.23->8.15.1 BC1 with a bunch of saved objects. In a dashboard, one of the maps panel doesn't display any data instead displays this error - "Unable to create layer. Cannot create AbstractESSourceDescriptor when indexPatternId is not provided"

Same error when I exported the dashboard saved object from 7.17.23 and imported it to 8.15.1.

Image

Here is the attached saved object file from 7.17.23 -

7.17.x_dashboard.ndjson.zip

Saved object file from 8.15.1 BC1

8.15.1_dashboard.ndjson.zip

elasticmachine commented 2 months ago

Pinging @elastic/kibana-presentation (Team:Presentation)

Heenawter commented 2 months ago

This looks like a reference error to me - the other panels on the dashboard are built on the same data view, and their references are being converted properly. Looking at the saved object - it seems like we are creating the reference (layer_1_source_index_pattern) and it's getting translated properly (43fcac20-ca27-11eb-bf5e-3de94e83d4f0 -> 25161e69-51aa-56dd-aa91-21c1f82be976) - but I'm not sure that it is getting applied in 8.15? Could there be a reference problem with the new React Map @nreese?

This is just my guess as a Maps layman 🙈

nreese commented 2 months ago

This looks like a reference error to me - the other panels on the dashboard are built on the same data view, and their references are being converted properly. Looking at the saved object - it seems like we are creating the reference (layer_1_source_index_pattern) and it's getting translated properly (43fcac20-ca27-11eb-bf5e-3de94e83d4f0 -> 25161e69-51aa-56dd-aa91-21c1f82be976) - but I'm not sure that it is getting applied in 8.15? Could there be a reference problem with the new React Map @elastic/incident-response

You are right, its a reference problem. The error message is similar to one in canvas, https://github.com/elastic/kibana/issues/190994, which was a result of a reference problem.

nreese commented 1 hour ago

@bhavyarm Where did you get these dashboard exports from (which version, how where they made)? The references do not contain the expected shape.

Provided reference for data view used in the map. Notice the name key. This value should be panelId:layer_1_source_index_pattern

   {
      "id": "43fcac20-ca27-11eb-bf5e-3de94e83d4f0",
      "name": "layer_1_source_index_pattern",
      "type": "index-pattern"
    },
nreese commented 1 hour ago

In 8.15, map embeddable was migrated from a legacy embeddable to a react embeddable. This changed reference injection. See below for details. TLDR is that legacy embeddables pass all references to the embeddable factory when no references for the panel exist. React embeddables just pass an empty reference list regardless of if panel references exist or not.

Reference injection with legacy embeddables

workingState.panels[key] = { ...panel };
const filteredReferences = getReferencesForPanelId(key, references);
const panelReferences = filteredReferences.length === 0 ? references : filteredReferences;

Reference injection with react embeddables

    const rawState = this.getInput().panels[childId].explicitInput;
    const { id, ...serializedState } = rawState;
    if (!rawState || Object.keys(serializedState).length === 0) return;
    const references = getReferencesForPanelId(childId, this.savedObjectReferences);
    return {
      rawState,
      references,
    };