Skip to content

Commit

Permalink
[8.8] [Fleet] Include hidden data streams in package upgrade (#158654) (
Browse files Browse the repository at this point in the history
#158698)

# Backport

This will backport the following commits from `main` to `8.8`:
- [[Fleet] Include hidden data streams in package upgrade
(#158654)](#158654)

<!--- Backport version: 8.9.7 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Julia
Bardi","email":"90178898+juliaElastic@users.noreply.github.com"},"sourceCommit":{"committedDate":"2023-05-31T07:50:42Z","message":"[Fleet]
Include hidden data streams in package upgrade (#158654)\n\n##
Summary\r\n\r\nAPM team reported an issue in 8.8 where some of their
newer data streams\r\nwere not rolled over as expected.\r\nIt turned out
these are hidden data streams and those were not updated\r\nin Fleet
when a new version of a package is installed.\r\n\r\nTo test:\r\n- Start
up a kibana\r\n- Install apm 8.7.0
package\r\n[apm-8.7.0.zip](https://github.com/elastic/kibana/files/11600335/apm-8.7.0.zip)\r\n```\r\nurl
-XPOST -H 'content-type: application/zip' -H 'kbn-xsrf: true'
http://localhost:5601/julia/api/fleet/epm/packages -u elastic:changeme
--data-binary @apm-8.7.0.zip\r\n```\r\n- Index a doc to apm
datastream\r\n```\r\nPOST
metrics-apm.service_summary.10m-default/_doc\r\n {\r\n \"@timestamp\":
\"2023-05-30T07:50:00.000Z\",\r\n \"agent\": {\r\n \"name\": \"go\"\r\n
},\r\n \"data_stream\": {\r\n \"dataset\":
\"apm.service_summary.10m\",\r\n \"namespace\": \"default\",\r\n
\"type\": \"metrics\"\r\n },\r\n \"ecs\": {\r\n \"version\":
\"8.6.0-dev\"\r\n },\r\n \"event\": {\r\n \"agent_id_status\":
\"missing\",\r\n \"ingested\": \"2023-05-30T07:57:12Z\"\r\n },\r\n
\"metricset\": {\r\n \"interval\": \"10m\",\r\n \"name\":
\"service_summary\"\r\n },\r\n \"observer\": {\r\n \"hostname\":
\"047e282994fb\",\r\n \"type\": \"apm-server\",\r\n \"version\":
\"8.7.0\"\r\n },\r\n \"processor\": {\r\n \"event\": \"metric\",\r\n
\"name\": \"metric\"\r\n },\r\n \"service\": {\r\n \"language\": {\r\n
\"name\": \"go\"\r\n },\r\n \"name\":
\"___main_elastic_cloud_87_ilm_fix\"\r\n }\r\n }\r\n```\r\n- Install apm
8.8.0
package\r\n[apm-8.8.0.zip](https://github.com/elastic/kibana/files/11599946/apm-8.8.0.zip)\r\n```\r\nurl
-XPOST -H 'content-type: application/zip' -H 'kbn-xsrf: true'
http://localhost:5601/julia/api/fleet/epm/packages -u elastic:changeme
--data-binary @apm-8.8.0.zip\r\n```\r\n- Expect that the hidden
datastream is updated and rolls over
on\r\nfailures.\r\n\r\n```\r\n[2023-05-30T15:23:21.666+02:00][DEBUG][plugins.fleet]
Updating mappings for
metrics-apm.service_summary.10m-default\r\n[2023-05-30T15:23:21.670+02:00][ERROR][plugins.fleet]
Mappings update for metrics-apm.service_summary.10m-default
failed\r\n[2023-05-30T15:23:21.671+02:00][ERROR][plugins.fleet]
ResponseError: illegal_argument_exception\r\n Root causes:\r\n
illegal_argument_exception: Mapper for [processor.name] conflicts with
existing mapper:\r\n Cannot update parameter [value] from [metric] to
[null]\r\n```\r\n\r\n<img width=\"995\"
alt=\"image\"\r\nsrc=\"https://github.com/elastic/kibana/assets/90178898/6a5a1abc-30f2-4b2f-a949-5b727cc91f57\">\r\n<img
width=\"1175\"
alt=\"image\"\r\nsrc=\"https://github.com/elastic/kibana/assets/90178898/8e18c40f-6b7f-4810-a9e4-9685a7fa5d0c\">\r\n\r\nAdded
integration test.\r\n\r\n### Checklist\r\n\r\n- [x] [Unit or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common
scenarios","sha":"58e0fdf096df0af53e5902ee9da9cc5c63d77847","branchLabelMapping":{"^v8.9.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Team:Fleet","v8.9.0","v8.8.1"],"number":158654,"url":"https://github.com/elastic/kibana/pull/158654","mergeCommit":{"message":"[Fleet]
Include hidden data streams in package upgrade (#158654)\n\n##
Summary\r\n\r\nAPM team reported an issue in 8.8 where some of their
newer data streams\r\nwere not rolled over as expected.\r\nIt turned out
these are hidden data streams and those were not updated\r\nin Fleet
when a new version of a package is installed.\r\n\r\nTo test:\r\n- Start
up a kibana\r\n- Install apm 8.7.0
package\r\n[apm-8.7.0.zip](https://github.com/elastic/kibana/files/11600335/apm-8.7.0.zip)\r\n```\r\nurl
-XPOST -H 'content-type: application/zip' -H 'kbn-xsrf: true'
http://localhost:5601/julia/api/fleet/epm/packages -u elastic:changeme
--data-binary @apm-8.7.0.zip\r\n```\r\n- Index a doc to apm
datastream\r\n```\r\nPOST
metrics-apm.service_summary.10m-default/_doc\r\n {\r\n \"@timestamp\":
\"2023-05-30T07:50:00.000Z\",\r\n \"agent\": {\r\n \"name\": \"go\"\r\n
},\r\n \"data_stream\": {\r\n \"dataset\":
\"apm.service_summary.10m\",\r\n \"namespace\": \"default\",\r\n
\"type\": \"metrics\"\r\n },\r\n \"ecs\": {\r\n \"version\":
\"8.6.0-dev\"\r\n },\r\n \"event\": {\r\n \"agent_id_status\":
\"missing\",\r\n \"ingested\": \"2023-05-30T07:57:12Z\"\r\n },\r\n
\"metricset\": {\r\n \"interval\": \"10m\",\r\n \"name\":
\"service_summary\"\r\n },\r\n \"observer\": {\r\n \"hostname\":
\"047e282994fb\",\r\n \"type\": \"apm-server\",\r\n \"version\":
\"8.7.0\"\r\n },\r\n \"processor\": {\r\n \"event\": \"metric\",\r\n
\"name\": \"metric\"\r\n },\r\n \"service\": {\r\n \"language\": {\r\n
\"name\": \"go\"\r\n },\r\n \"name\":
\"___main_elastic_cloud_87_ilm_fix\"\r\n }\r\n }\r\n```\r\n- Install apm
8.8.0
package\r\n[apm-8.8.0.zip](https://github.com/elastic/kibana/files/11599946/apm-8.8.0.zip)\r\n```\r\nurl
-XPOST -H 'content-type: application/zip' -H 'kbn-xsrf: true'
http://localhost:5601/julia/api/fleet/epm/packages -u elastic:changeme
--data-binary @apm-8.8.0.zip\r\n```\r\n- Expect that the hidden
datastream is updated and rolls over
on\r\nfailures.\r\n\r\n```\r\n[2023-05-30T15:23:21.666+02:00][DEBUG][plugins.fleet]
Updating mappings for
metrics-apm.service_summary.10m-default\r\n[2023-05-30T15:23:21.670+02:00][ERROR][plugins.fleet]
Mappings update for metrics-apm.service_summary.10m-default
failed\r\n[2023-05-30T15:23:21.671+02:00][ERROR][plugins.fleet]
ResponseError: illegal_argument_exception\r\n Root causes:\r\n
illegal_argument_exception: Mapper for [processor.name] conflicts with
existing mapper:\r\n Cannot update parameter [value] from [metric] to
[null]\r\n```\r\n\r\n<img width=\"995\"
alt=\"image\"\r\nsrc=\"https://github.com/elastic/kibana/assets/90178898/6a5a1abc-30f2-4b2f-a949-5b727cc91f57\">\r\n<img
width=\"1175\"
alt=\"image\"\r\nsrc=\"https://github.com/elastic/kibana/assets/90178898/8e18c40f-6b7f-4810-a9e4-9685a7fa5d0c\">\r\n\r\nAdded
integration test.\r\n\r\n### Checklist\r\n\r\n- [x] [Unit or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common
scenarios","sha":"58e0fdf096df0af53e5902ee9da9cc5c63d77847"}},"sourceBranch":"main","suggestedTargetBranches":["8.8"],"targetPullRequestStates":[{"branch":"main","label":"v8.9.0","labelRegex":"^v8.9.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/158654","number":158654,"mergeCommit":{"message":"[Fleet]
Include hidden data streams in package upgrade (#158654)\n\n##
Summary\r\n\r\nAPM team reported an issue in 8.8 where some of their
newer data streams\r\nwere not rolled over as expected.\r\nIt turned out
these are hidden data streams and those were not updated\r\nin Fleet
when a new version of a package is installed.\r\n\r\nTo test:\r\n- Start
up a kibana\r\n- Install apm 8.7.0
package\r\n[apm-8.7.0.zip](https://github.com/elastic/kibana/files/11600335/apm-8.7.0.zip)\r\n```\r\nurl
-XPOST -H 'content-type: application/zip' -H 'kbn-xsrf: true'
http://localhost:5601/julia/api/fleet/epm/packages -u elastic:changeme
--data-binary @apm-8.7.0.zip\r\n```\r\n- Index a doc to apm
datastream\r\n```\r\nPOST
metrics-apm.service_summary.10m-default/_doc\r\n {\r\n \"@timestamp\":
\"2023-05-30T07:50:00.000Z\",\r\n \"agent\": {\r\n \"name\": \"go\"\r\n
},\r\n \"data_stream\": {\r\n \"dataset\":
\"apm.service_summary.10m\",\r\n \"namespace\": \"default\",\r\n
\"type\": \"metrics\"\r\n },\r\n \"ecs\": {\r\n \"version\":
\"8.6.0-dev\"\r\n },\r\n \"event\": {\r\n \"agent_id_status\":
\"missing\",\r\n \"ingested\": \"2023-05-30T07:57:12Z\"\r\n },\r\n
\"metricset\": {\r\n \"interval\": \"10m\",\r\n \"name\":
\"service_summary\"\r\n },\r\n \"observer\": {\r\n \"hostname\":
\"047e282994fb\",\r\n \"type\": \"apm-server\",\r\n \"version\":
\"8.7.0\"\r\n },\r\n \"processor\": {\r\n \"event\": \"metric\",\r\n
\"name\": \"metric\"\r\n },\r\n \"service\": {\r\n \"language\": {\r\n
\"name\": \"go\"\r\n },\r\n \"name\":
\"___main_elastic_cloud_87_ilm_fix\"\r\n }\r\n }\r\n```\r\n- Install apm
8.8.0
package\r\n[apm-8.8.0.zip](https://github.com/elastic/kibana/files/11599946/apm-8.8.0.zip)\r\n```\r\nurl
-XPOST -H 'content-type: application/zip' -H 'kbn-xsrf: true'
http://localhost:5601/julia/api/fleet/epm/packages -u elastic:changeme
--data-binary @apm-8.8.0.zip\r\n```\r\n- Expect that the hidden
datastream is updated and rolls over
on\r\nfailures.\r\n\r\n```\r\n[2023-05-30T15:23:21.666+02:00][DEBUG][plugins.fleet]
Updating mappings for
metrics-apm.service_summary.10m-default\r\n[2023-05-30T15:23:21.670+02:00][ERROR][plugins.fleet]
Mappings update for metrics-apm.service_summary.10m-default
failed\r\n[2023-05-30T15:23:21.671+02:00][ERROR][plugins.fleet]
ResponseError: illegal_argument_exception\r\n Root causes:\r\n
illegal_argument_exception: Mapper for [processor.name] conflicts with
existing mapper:\r\n Cannot update parameter [value] from [metric] to
[null]\r\n```\r\n\r\n<img width=\"995\"
alt=\"image\"\r\nsrc=\"https://github.com/elastic/kibana/assets/90178898/6a5a1abc-30f2-4b2f-a949-5b727cc91f57\">\r\n<img
width=\"1175\"
alt=\"image\"\r\nsrc=\"https://github.com/elastic/kibana/assets/90178898/8e18c40f-6b7f-4810-a9e4-9685a7fa5d0c\">\r\n\r\nAdded
integration test.\r\n\r\n### Checklist\r\n\r\n- [x] [Unit or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common
scenarios","sha":"58e0fdf096df0af53e5902ee9da9cc5c63d77847"}},{"branch":"8.8","label":"v8.8.1","labelRegex":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}]
BACKPORT-->

---------

Co-authored-by: Julia Bardi <90178898+juliaElastic@users.noreply.github.com>
  • Loading branch information
kibanamachine and juliaElastic authored May 31, 2023
1 parent 9240a6e commit cf1a516
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1080,6 +1080,7 @@ describe('EPM template', () => {
]);
expect(esClient.indices.getDataStream).toBeCalledWith({
name: 'test.*-*',
expand_wildcards: ['open', 'hidden'],
});
const putMappingsCall = esClient.indices.putMapping.mock.calls.map(([{ index }]) => index);
expect(putMappingsCall).toHaveLength(1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -600,6 +600,7 @@ const getDataStreams = async (

const body = await esClient.indices.getDataStream({
name: indexTemplate.index_patterns.join(','),
expand_wildcards: ['open', 'hidden'],
});

const dataStreams = body.data_streams;
Expand Down
1 change: 1 addition & 0 deletions x-pack/test/fleet_api_integration/apis/epm/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,6 @@ export default function loadTests({ loadTestFile, getService }) {
loadTestFile(require.resolve('./custom_ingest_pipeline'));
loadTestFile(require.resolve('./verification_key_id'));
loadTestFile(require.resolve('./install_integration_in_multiple_spaces.ts'));
loadTestFile(require.resolve('./install_hidden_datastreams'));
});
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import expect from '@kbn/expect';
import { FtrProviderContext } from '../../../api_integration/ftr_provider_context';
import { skipIfNoDockerRegistry } from '../../helpers';
import { setupFleetAndAgents } from '../agents/services';

export default function (providerContext: FtrProviderContext) {
const { getService } = providerContext;
const supertest = getService('supertest');
const es = getService('es');

const deletePackage = async (name: string, version: string) => {
await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx');
};

describe('installing with hidden datastream', async () => {
skipIfNoDockerRegistry(providerContext);
setupFleetAndAgents(providerContext);

after(async () => {
await deletePackage('apm', '8.8.0');
});

it('should rollover hidden datastreams when failed to update mappings', async function () {
await supertest
.post(`/api/fleet/epm/packages/apm/8.7.0`)
.set('kbn-xsrf', 'xxxx')
.send({ force: true })
.expect(200);

await es.index({
index: 'metrics-apm.service_summary.10m-default',
document: {
'@timestamp': '2023-05-30T07:50:00.000Z',
agent: {
name: 'go',
},
data_stream: {
dataset: 'apm.service_summary.10m',
namespace: 'default',
type: 'metrics',
},
ecs: {
version: '8.6.0-dev',
},
event: {
agent_id_status: 'missing',
ingested: '2023-05-30T07:57:12Z',
},
metricset: {
interval: '10m',
name: 'service_summary',
},
observer: {
hostname: '047e282994fb',
type: 'apm-server',
version: '8.7.0',
},
processor: {
event: 'metric',
name: 'metric',
},
service: {
language: {
name: 'go',
},
name: '___main_elastic_cloud_87_ilm_fix',
},
},
});

await supertest
.post(`/api/fleet/epm/packages/apm/8.8.0`)
.set('kbn-xsrf', 'xxxx')
.send({ force: true })
.expect(200);

const ds = await es.indices.get({
index: 'metrics-apm.service_summary*',
expand_wildcards: ['open', 'hidden'],
});
// datastream rolled over
expect(Object.keys(ds).length).greaterThan(1);
});
});
}
Binary file not shown.
Binary file not shown.

0 comments on commit cf1a516

Please sign in to comment.