-
Notifications
You must be signed in to change notification settings - Fork 8.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Fleet] Add retry logic to serverless API check #176808
[Fleet] Add retry logic to serverless API check #176808
Conversation
🤖 GitHub commentsExpand to view the GitHub comments
Just comment with:
|
2a12f1f
to
5e7fc30
Compare
/ci |
@elasticmachine merge upstream |
merge conflict between base and head |
a6609c7
to
cfe7518
Compare
/ci |
Pinging @elastic/fleet (Team:Fleet) |
// No need to validate on update if hosts are not passed. | ||
if (outputId && !output.hosts) { | ||
// No need to validate for other types. | ||
if (output.type !== outputType.Elasticsearch) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the type here could be undefined as our PUT
are in fact PATCH
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, thanks. I've modified the unit tests slightly to test that update works as expected when the output type is not passed.
const defaultElasticsearchOutputId = 'es-default-output'; | ||
const defaultElasticsearchOutputHostUrl = 'https://localhost:9200'; | ||
|
||
async function expectDefaultFleetServer() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is it possible to move expectDefaultFleetServer
and expectDefaultElasticsearchOutput
to a helper to avoid duplication?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not super easy to read IMHO because of the different details (e.g. body.item.host_urls
vs. body.item.hosts
) 😅 maybe something like:
async function expectDefault({ name, endpoint, defaultId, hostField, defaultHostUrl }) {
await retry.waitForWithTimeout(`get default ${name}`, 30_000, async () => {
const { body, status } = await supertest.get(`/api/fleet/${endpoint}/${defaultId}`);
if (status === 200 && body.item[hostField].includes(defaultHostUrl)) {
return true;
} else {
throw new Error(`Expected default ${name} id ${defaultId} to exist`);
}
});
}
and
const fleetServer = {
name: 'Fleet Server',
endpoint: 'fleet_server_hosts',
defaultId: 'default-fleet-server',
hostField: 'host_urls',
defaultHostUrl: 'https://localhost:8220',
};
Any thoughts or recommendation?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, I didn't mean joining the 2 functions, but the duplication in observability/fleet
and security/fleet
.
The suggested refactor could make sense too, though not really necessary, I think.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My bad, that makes a lot more sense 🙈 I wasn't sure as these two tests are identical anyway, but I tried to extract this and part of the config as they are linked. Let me know what you think.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for suggesting 👍 I've re-run the flaky test runner for good measure, all green: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5237
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me
💛 Build succeeded, but was flaky
Failed CI StepsTest Failures
Metrics [docs]
History
To update your PR or re-run it, just comment with: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚀
## Summary Closes elastic#176352 Closes elastic#176399 elastic#175315 added the possibility to configure new Fleet Server hosts in serverless, with the constraint that the host URL must match the default URL. The API integration tests written to test this have been flaky, due to failure retrieving the default Fleet Server host or default Elasticsearch output from saved objects. This PR adds retry in the tests. Note: I have tried adding retry logic in the API handlers but kept hitting test flakiness. This fix has been tested using the Flaky Test Runner Pipeline, with 48/49 test runs for observability and security project types: 🟢 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5218 🟢 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5222 🟢 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5225 ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed
💔 All backports failed
Manual backportTo create the backport manually run:
Questions ?Please refer to the Backport tool documentation |
💚 All backports created successfully
Note: Successful backport PRs will be merged automatically after passing CI. Questions ?Please refer to the Backport tool documentation |
## Summary Closes elastic#176352 Closes elastic#176399 elastic#175315 added the possibility to configure new Fleet Server hosts in serverless, with the constraint that the host URL must match the default URL. The API integration tests written to test this have been flaky, due to failure retrieving the default Fleet Server host or default Elasticsearch output from saved objects. This PR adds retry in the tests. Note: I have tried adding retry logic in the API handlers but kept hitting test flakiness. This fix has been tested using the Flaky Test Runner Pipeline, with 48/49 test runs for observability and security project types: 🟢 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5218 🟢 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5222 🟢 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5225 ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed (cherry picked from commit 83e64be) # Conflicts: # x-pack/test_serverless/api_integration/test_suites/security/fleet/fleet.ts
…8508) # Backport This will backport the following commits from `main` to `8.13`: - [[Fleet] Add retry logic to serverless API check (#176808)](#176808) <!--- Backport version: 8.9.8 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) <!--BACKPORT [{"author":{"name":"Jill Guyonnet","email":"jill.guyonnet@elastic.co"},"sourceCommit":{"committedDate":"2024-02-21T09:14:10Z","message":"[Fleet] Add retry logic to serverless API check (#176808)\n\n## Summary\r\n\r\nCloses #176352 #176399 added the possibility to\r\nconfigure new Fleet Server hosts in serverless, with the constraint that\r\nthe host URL must match the default URL. The API integration tests\r\nwritten to test this have been flaky, due to failure retrieving the\r\ndefault Fleet Server host or default Elasticsearch output from saved\r\nobjects. This PR adds retry in the tests.\r\n\r\nNote: I have tried adding retry logic in the API handlers but kept\r\nhitting test flakiness.\r\n\r\nThis fix has been tested using the Flaky Test Runner Pipeline, with\r\n48/49 test runs for observability and security project types:\r\n🟢\r\nhttps://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5218\r\n🟢\r\nhttps://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5222\r\n🟢\r\nhttps://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5225\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\r\n- [x] [Flaky Test\r\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\r\nused on any tests changed","sha":"83e64be5d6730ec1f22ade806192bf1eab54751a","branchLabelMapping":{"^v8.14.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","Team:Fleet","backport:prev-minor","v8.14.0"],"number":176808,"url":"#176808 Add retry logic to serverless API check (#176808)\n\n## Summary\r\n\r\nCloses #176352 #176399 added the possibility to\r\nconfigure new Fleet Server hosts in serverless, with the constraint that\r\nthe host URL must match the default URL. The API integration tests\r\nwritten to test this have been flaky, due to failure retrieving the\r\ndefault Fleet Server host or default Elasticsearch output from saved\r\nobjects. This PR adds retry in the tests.\r\n\r\nNote: I have tried adding retry logic in the API handlers but kept\r\nhitting test flakiness.\r\n\r\nThis fix has been tested using the Flaky Test Runner Pipeline, with\r\n48/49 test runs for observability and security project types:\r\n🟢\r\nhttps://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5218\r\n🟢\r\nhttps://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5222\r\n🟢\r\nhttps://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5225\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\r\n- [x] [Flaky Test\r\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\r\nused on any tests changed","sha":"83e64be5d6730ec1f22ade806192bf1eab54751a"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v8.14.0","labelRegex":"^v8.14.0$","isSourceBranch":true,"state":"MERGED","url":"#176808 Add retry logic to serverless API check (#176808)\n\n## Summary\r\n\r\nCloses #176352 #176399 added the possibility to\r\nconfigure new Fleet Server hosts in serverless, with the constraint that\r\nthe host URL must match the default URL. The API integration tests\r\nwritten to test this have been flaky, due to failure retrieving the\r\ndefault Fleet Server host or default Elasticsearch output from saved\r\nobjects. This PR adds retry in the tests.\r\n\r\nNote: I have tried adding retry logic in the API handlers but kept\r\nhitting test flakiness.\r\n\r\nThis fix has been tested using the Flaky Test Runner Pipeline, with\r\n48/49 test runs for observability and security project types:\r\n🟢\r\nhttps://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5218\r\n🟢\r\nhttps://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5222\r\n🟢\r\nhttps://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5225\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\r\n- [x] [Flaky Test\r\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\r\nused on any tests changed","sha":"83e64be5d6730ec1f22ade806192bf1eab54751a"}}]}] BACKPORT-->
Summary
Closes #176352
Closes #176399
#175315 added the possibility to configure new Fleet Server hosts in serverless, with the constraint that the host URL must match the default URL. The API integration tests written to test this have been flaky, due to failure retrieving the default Fleet Server host or default Elasticsearch output from saved objects. This PR adds retry in the tests.
Note: I have tried adding retry logic in the API handlers but kept hitting test flakiness.
This fix has been tested using the Flaky Test Runner Pipeline, with 48/49 test runs for observability and security project types:
🟢 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5218
🟢 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5222
🟢 https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5225
Checklist