diff --git a/src/server/saved_objects/service/lib/decorate_es_error.js b/src/server/saved_objects/service/lib/decorate_es_error.js index 66d34d95dc1099..0f6190fcca465a 100644 --- a/src/server/saved_objects/service/lib/decorate_es_error.js +++ b/src/server/saved_objects/service/lib/decorate_es_error.js @@ -28,6 +28,7 @@ const { Conflict, 401: NotAuthorized, 403: Forbidden, + 413: RequestEntityTooLarge, NotFound, BadRequest } = elasticsearch.errors; @@ -36,6 +37,7 @@ import { decorateBadRequestError, decorateNotAuthorizedError, decorateForbiddenError, + decorateRequestEntityTooLargeError, createGenericNotFoundError, decorateConflictError, decorateEsUnavailableError, @@ -69,6 +71,10 @@ export function decorateEsError(error) { return decorateForbiddenError(error, reason); } + if (error instanceof RequestEntityTooLarge) { + return decorateRequestEntityTooLargeError(error, reason); + } + if (error instanceof NotFound) { return createGenericNotFoundError(); } diff --git a/src/server/saved_objects/service/lib/decorate_es_error.test.js b/src/server/saved_objects/service/lib/decorate_es_error.test.js index 07e284d0a894a3..8d070e17132027 100644 --- a/src/server/saved_objects/service/lib/decorate_es_error.test.js +++ b/src/server/saved_objects/service/lib/decorate_es_error.test.js @@ -25,6 +25,7 @@ import { isConflictError, isNotAuthorizedError, isForbiddenError, + isRequestEntityTooLargeError, isNotFoundError, isBadRequestError, } from './errors'; @@ -84,6 +85,13 @@ describe('savedObjectsClient/decorateEsError', () => { expect(isForbiddenError(error)).toBe(true); }); + it('makes es.RequestEntityTooLarge a SavedObjectsClient/RequestEntityTooLarge error', () => { + const error = new esErrors.RequestEntityTooLarge(); + expect(isRequestEntityTooLargeError(error)).toBe(false); + expect(decorateEsError(error)).toBe(error); + expect(isRequestEntityTooLargeError(error)).toBe(true); + }); + it('discards es.NotFound errors and returns a generic NotFound error', () => { const error = new esErrors.NotFound(); expect(isNotFoundError(error)).toBe(false); diff --git a/src/server/saved_objects/service/lib/errors.js b/src/server/saved_objects/service/lib/errors.js index dba2f61419a667..d0a4d6ecec796d 100644 --- a/src/server/saved_objects/service/lib/errors.js +++ b/src/server/saved_objects/service/lib/errors.js @@ -71,6 +71,16 @@ export function isForbiddenError(error) { } +// 413 - Request Entity Too Large +const CODE_REQUEST_ENTITY_TOO_LARGE = 'SavedObjectsClient/requestEntityTooLarge'; +export function decorateRequestEntityTooLargeError(error, reason) { + return decorate(error, CODE_REQUEST_ENTITY_TOO_LARGE, 413, reason); +} +export function isRequestEntityTooLargeError(error) { + return error && error[code] === CODE_REQUEST_ENTITY_TOO_LARGE; +} + + // 404 - Not Found const CODE_NOT_FOUND = 'SavedObjectsClient/notFound'; export function createGenericNotFoundError(type = null, id = null) {