Skip to content

Commit

Permalink
[Fleet] catching only mapper errors (#167044)
Browse files Browse the repository at this point in the history
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
  • Loading branch information
juliaElastic and kibanamachine committed Sep 26, 2023
1 parent 01f4d61 commit 08d44fe
Show file tree
Hide file tree
Showing 12 changed files with 447 additions and 16 deletions.
54 changes: 54 additions & 0 deletions x-pack/plugins/fleet/common/openapi/bundled.json
Original file line number Diff line number Diff line change
Expand Up @@ -572,6 +572,24 @@
"parameters": [
{
"$ref": "#/components/parameters/kbn_xsrf"
},
{
"in": "query",
"name": "ignoreMappingUpdateErrors",
"schema": {
"type": "boolean",
"default": false
},
"description": "avoid erroring out on unexpected mapping update errors"
},
{
"in": "query",
"name": "skipDataStreamRollover",
"schema": {
"type": "boolean",
"default": false
},
"description": "skip data stream rollover during index template mapping or settings update"
}
],
"requestBody": {
Expand Down Expand Up @@ -810,6 +828,24 @@
"name": "pkgkey",
"in": "path",
"required": true
},
{
"in": "query",
"name": "ignoreMappingUpdateErrors",
"schema": {
"type": "boolean",
"default": false
},
"description": "avoid erroring out on unexpected mapping update errors"
},
{
"in": "query",
"name": "skipDataStreamRollover",
"schema": {
"type": "boolean",
"default": false
},
"description": "skip data stream rollover during index template mapping or settings update"
}
],
"requestBody": {
Expand Down Expand Up @@ -1090,6 +1126,24 @@
"parameters": [
{
"$ref": "#/components/parameters/kbn_xsrf"
},
{
"in": "query",
"name": "ignoreMappingUpdateErrors",
"schema": {
"type": "boolean",
"default": false
},
"description": "avoid erroring out on unexpected mapping update errors"
},
{
"in": "query",
"name": "skipDataStreamRollover",
"schema": {
"type": "boolean",
"default": false
},
"description": "skip data stream rollover during index template mapping or settings update"
}
],
"requestBody": {
Expand Down
42 changes: 42 additions & 0 deletions x-pack/plugins/fleet/common/openapi/bundled.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,20 @@ paths:
description: ''
parameters:
- $ref: '#/components/parameters/kbn_xsrf'
- in: query
name: ignoreMappingUpdateErrors
schema:
type: boolean
default: false
description: avoid erroring out on unexpected mapping update errors
- in: query
name: skipDataStreamRollover
schema:
type: boolean
default: false
description: >-
skip data stream rollover during index template mapping or settings
update
requestBody:
content:
application/zip:
Expand Down Expand Up @@ -516,6 +530,20 @@ paths:
name: pkgkey
in: path
required: true
- in: query
name: ignoreMappingUpdateErrors
schema:
type: boolean
default: false
description: avoid erroring out on unexpected mapping update errors
- in: query
name: skipDataStreamRollover
schema:
type: boolean
default: false
description: >-
skip data stream rollover during index template mapping or settings
update
requestBody:
content:
application/json:
Expand Down Expand Up @@ -689,6 +717,20 @@ paths:
description: ''
parameters:
- $ref: '#/components/parameters/kbn_xsrf'
- in: query
name: ignoreMappingUpdateErrors
schema:
type: boolean
default: false
description: avoid erroring out on unexpected mapping update errors
- in: query
name: skipDataStreamRollover
schema:
type: boolean
default: false
description: >-
skip data stream rollover during index template mapping or settings
update
requestBody:
content:
application/json:
Expand Down
12 changes: 12 additions & 0 deletions x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,18 @@ post:
description: ''
parameters:
- $ref: ../components/headers/kbn_xsrf.yaml
- in: query
name: ignoreMappingUpdateErrors
schema:
type: boolean
default: false
description: avoid erroring out on unexpected mapping update errors
- in: query
name: skipDataStreamRollover
schema:
type: boolean
default: false
description: skip data stream rollover during index template mapping or settings update
requestBody:
content:
application/zip:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,18 @@ post:
description: ''
parameters:
- $ref: ../components/headers/kbn_xsrf.yaml
- in: query
name: ignoreMappingUpdateErrors
schema:
type: boolean
default: false
description: avoid erroring out on unexpected mapping update errors
- in: query
name: skipDataStreamRollover
schema:
type: boolean
default: false
description: skip data stream rollover during index template mapping or settings update
requestBody:
content:
application/json:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,18 @@ post:
name: pkgkey
in: path
required: true
- in: query
name: ignoreMappingUpdateErrors
schema:
type: boolean
default: false
description: avoid erroring out on unexpected mapping update errors
- in: query
name: skipDataStreamRollover
schema:
type: boolean
default: false
description: skip data stream rollover during index template mapping or settings update
requestBody:
content:
application/json:
Expand Down
6 changes: 5 additions & 1 deletion x-pack/plugins/fleet/server/routes/epm/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,8 @@ export const installPackageFromRegistryHandler: FleetRequestHandler<
ignoreConstraints: request.body?.ignore_constraints,
prerelease: request.query?.prerelease,
authorizationHeader,
ignoreMappingUpdateErrors: request.query?.ignoreMappingUpdateErrors,
skipDataStreamRollover: request.query?.skipDataStreamRollover,
});

if (!res.error) {
Expand Down Expand Up @@ -509,7 +511,7 @@ export const bulkInstallPackagesFromRegistryHandler: FleetRequestHandler<

export const installPackageByUploadHandler: FleetRequestHandler<
undefined,
undefined,
TypeOf<typeof InstallPackageByUploadRequestSchema.query>,
TypeOf<typeof InstallPackageByUploadRequestSchema.body>
> = async (context, request, response) => {
const coreContext = await context.core;
Expand All @@ -531,6 +533,8 @@ export const installPackageByUploadHandler: FleetRequestHandler<
spaceId,
contentType,
authorizationHeader,
ignoreMappingUpdateErrors: request.query?.ignoreMappingUpdateErrors,
skipDataStreamRollover: request.query?.skipDataStreamRollover,
});
if (!res.error) {
const body: InstallPackageResponse = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import { safeLoad } from 'js-yaml';
import { loggerMock } from '@kbn/logging-mocks';
import { elasticsearchServiceMock } from '@kbn/core/server/mocks';

import { errors } from '@elastic/elasticsearch';

import { createAppContextStartContractMock } from '../../../../mocks';
import { appContextService } from '../../..';
import type { RegistryDataStream } from '../../../../types';
Expand Down Expand Up @@ -1261,5 +1263,134 @@ describe('EPM template', () => {
},
});
});
it('should rollover on expected error', async () => {
const esClient = elasticsearchServiceMock.createElasticsearchClient();
esClient.indices.getDataStream.mockResponse({
data_streams: [{ name: 'test.prefix1-default' }],
} as any);
esClient.indices.simulateTemplate.mockImplementation(() => {
throw new errors.ResponseError({
statusCode: 400,
body: {
error: {
type: 'illegal_argument_exception',
},
},
} as any);
});
const logger = loggerMock.create();
await updateCurrentWriteIndices(esClient, logger, [
{
templateName: 'test',
indexTemplate: {
index_patterns: ['test.*-*'],
template: {
settings: { index: {} },
mappings: { properties: {} },
},
} as any,
},
]);

expect(esClient.indices.rollover).toHaveBeenCalled();
});
it('should skip rollover on expected error when flag is on', async () => {
const esClient = elasticsearchServiceMock.createElasticsearchClient();
esClient.indices.getDataStream.mockResponse({
data_streams: [{ name: 'test.prefix1-default' }],
} as any);
esClient.indices.simulateTemplate.mockImplementation(() => {
throw new errors.ResponseError({
statusCode: 400,
body: {
error: {
type: 'illegal_argument_exception',
},
},
} as any);
});
const logger = loggerMock.create();
await updateCurrentWriteIndices(
esClient,
logger,
[
{
templateName: 'test',
indexTemplate: {
index_patterns: ['test.*-*'],
template: {
settings: { index: {} },
mappings: { properties: {} },
},
} as any,
},
],
{
skipDataStreamRollover: true,
}
);

expect(esClient.indices.rollover).not.toHaveBeenCalled();
});
it('should not rollover on unexpected error', async () => {
const esClient = elasticsearchServiceMock.createElasticsearchClient();
esClient.indices.getDataStream.mockResponse({
data_streams: [{ name: 'test.prefix1-default' }],
} as any);
esClient.indices.simulateTemplate.mockImplementation(() => {
throw new Error();
});
const logger = loggerMock.create();
try {
await updateCurrentWriteIndices(esClient, logger, [
{
templateName: 'test',
indexTemplate: {
index_patterns: ['test.*-*'],
template: {
settings: { index: {} },
mappings: { properties: {} },
},
} as any,
},
]);
fail('expected updateCurrentWriteIndices to throw error');
} catch (err) {
// noop
}

expect(esClient.indices.rollover).not.toHaveBeenCalled();
});
it('should not throw on unexpected error when flag is on', async () => {
const esClient = elasticsearchServiceMock.createElasticsearchClient();
esClient.indices.getDataStream.mockResponse({
data_streams: [{ name: 'test.prefix1-default' }],
} as any);
esClient.indices.simulateTemplate.mockImplementation(() => {
throw new Error();
});
const logger = loggerMock.create();
await updateCurrentWriteIndices(
esClient,
logger,
[
{
templateName: 'test',
indexTemplate: {
index_patterns: ['test.*-*'],
template: {
settings: { index: {} },
mappings: { properties: {} },
},
} as any,
},
],
{
ignoreMappingUpdateErrors: true,
}
);

expect(esClient.indices.rollover).not.toHaveBeenCalled();
});
});
});
Loading

0 comments on commit 08d44fe

Please sign in to comment.