[Security Solution][Exceptions] Handle promise rejections when building artifacts#73831
Conversation
|
Pinging @elastic/endpoint-response (Team:Endpoint Response) |
|
Pinging @elastic/endpoint-app-team (Feature:Endpoint) |
| mockType: ManifestManagerMockType.ListClientPromiseRejection, | ||
| }); | ||
| await expect(manifestManager.buildNewManifest()).rejects.toThrow(); | ||
| }); |
There was a problem hiding this comment.
I think this test passes without the changes manifest_manager.ts https://github.com/elastic/kibana/pull/73831/files#diff-21a709e8a87929d93a7efdb95905d024R85-R95
There was a problem hiding this comment.
We zoomed. It passes either way, but an UnhandledPromiseRejectionWarning is printed when you run it against the pre-change code, and it's absent now. Doesn't appear to be a way to force jest to behave differently...
There was a problem hiding this comment.
@madirey explained to me, as posted in the comment, the test will pass without those changes, but the changes prevent the rejection warning from appearing when running the tests. The rejection does get handled further down the line when building the manifest.
|
@elasticmachine merge upstream |
| }): ManifestManager => { | ||
| let cache = new LRU<string, Buffer>({ max: 10, maxAge: 1000 * 60 * 60 }); | ||
| if (opts?.cache !== undefined) { | ||
| if (opts?.cache != null) { |
There was a problem hiding this comment.
❔ think you want !== instead of !=
There was a problem hiding this comment.
@bkimmel Maybe I misunderstood, but I thought the prevailing recommendation was that != null is preferable to !== undefined because it catches both null and undefined...
There was a problem hiding this comment.
It does, but coercively. == and it's != cousin hurt to read. That fancy new nullish coalescer ?? could come in handy, since it's made to handle undefined/null like if(opts?.cache ?? false) maybe,
peluja1012
left a comment
There was a problem hiding this comment.
Thanks for catching this, Madi!
💚 Build SucceededBuild metrics
History
To update your PR or re-run it, just comment with: |
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
* master: (54 commits) [ML] Migrate to React BrowserRouter and Kibana provided History. (elastic#71941) [Discover] Improve saveSearch functional test handling (elastic#73626) [Metrics UI] Fix all threshold alert conditions disappearing due to alert prefill (elastic#73708) [Metrics UI] Fix alert previews of ungrouped alerts (elastic#73735) [SIEM] Fixes "include building block button" to operate (elastic#73900) [Metrics UI] Fix alert management to open without refresh (elastic#73739) [Security Solution][Lists] - Tests cleanup and remove unnecessary import (elastic#73865) [Ingest Management] main branch uses epr-snapshot. Others production (elastic#73555) [Canvas][tech-debt] Fix SVG not shrinking vertically properly (elastic#73867) [Maps] upgrade turf (elastic#73816) [Security Solution][Telemetry] Concurrent telemetry requests (elastic#73558) [Security Solution][Exceptions] - Update how nested entries are displayed in exceptions viewer (elastic#73745) [Security Solution][Exceptions] Adds autocomplete workaround for .text fields (elastic#73761) [Metrics UI] Fix previewing of No Data results (elastic#73753) Closes elastic#72914 by hiding anomaly detection settings links when the ml plugin is disabled. (elastic#73638) [Ingest Manager] Fix config selection in enrollment flyout from config list page (elastic#73833) [DOCS] Fixes typo in Alerting actions (elastic#73756) [APM] fixes linking errors to ML and Discover (elastic#73758) Handle promise rejections when building artifacts (elastic#73831) [Security Solution][Detections] Change from sha1 to sha256 (elastic#73741) ...
* master: (38 commits) [Discover] Context unskip date nanos functional tests (elastic#73781) [ML] Migrate to React BrowserRouter and Kibana provided History. (elastic#71941) [Discover] Improve saveSearch functional test handling (elastic#73626) [Metrics UI] Fix all threshold alert conditions disappearing due to alert prefill (elastic#73708) [Metrics UI] Fix alert previews of ungrouped alerts (elastic#73735) [SIEM] Fixes "include building block button" to operate (elastic#73900) [Metrics UI] Fix alert management to open without refresh (elastic#73739) [Security Solution][Lists] - Tests cleanup and remove unnecessary import (elastic#73865) [Ingest Management] main branch uses epr-snapshot. Others production (elastic#73555) [Canvas][tech-debt] Fix SVG not shrinking vertically properly (elastic#73867) [Maps] upgrade turf (elastic#73816) [Security Solution][Telemetry] Concurrent telemetry requests (elastic#73558) [Security Solution][Exceptions] - Update how nested entries are displayed in exceptions viewer (elastic#73745) [Security Solution][Exceptions] Adds autocomplete workaround for .text fields (elastic#73761) [Metrics UI] Fix previewing of No Data results (elastic#73753) Closes elastic#72914 by hiding anomaly detection settings links when the ml plugin is disabled. (elastic#73638) [Ingest Manager] Fix config selection in enrollment flyout from config list page (elastic#73833) [DOCS] Fixes typo in Alerting actions (elastic#73756) [APM] fixes linking errors to ML and Discover (elastic#73758) Handle promise rejections when building artifacts (elastic#73831) ...
Summary
We weren't properly handling rejected promises when building artifacts, causing Kibana to crash if there's a failure in retrieving the exception list entries.
We first encountered this when building lists that contain 10,000 items, because the pagination was going 1 page past the end of the exception items, resulting in a
max window exceedederror from ES. This resulted in an unhandled promise exception that crashed Kibana, necessitating a complete server restart.The pagination was fixed here: https://github.com/elastic/kibana/pull/73610/files#diff-a4ce84a07372d3782adb00b2f9f1a665R83-R106
... but if we encounter some other error in the
findExceptionListItemcall chain, we still risk crashing Kibana.This PR fixes the code so that the promise rejection is handled properly. It was tested manually by forcing a promise rejection in the
ExceptionListClientand verifying that 1. an unhandled promise rejection occurred before the fix, and 2. it did NOT occur after the fix.Before

After

Checklist
For maintainers