Skip to content
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

[ftr] automatically determine config run order #130983

Merged
merged 123 commits into from
May 4, 2022

Conversation

spalger
Copy link
Contributor

@spalger spalger commented Apr 26, 2022

This PR builds on the work done in #130857 to run Functional Test Runner config files in workers using an order defined by the ci-stats API. This order is defined by searching through "TestGroup" records stored in ci-stats, and pulling in the most recent execution time for a specific config file, then grouping the config files together to make groups which should take less than the max time passed to the API.

This new strategy has a few impacts on the way that our functional tests are written:

  • ciGroup* tags are no longer needed and were therefore removed
  • FTR Config files must now execute to completion in around 10 minutes (at the maximum) to be good participants in the grouping algorithm

FTR Configs which take longer than ~40 minutes will execute in their own worker and extend the time that CI takes on all PRs and therefore must be split up. We had to do this with several existing FTR Configs like:

  • test/functional/config.ts
  • x-pack/test/functional/config.ts

These config files are now broken up into many config files, many are per-app, but some apps needed to be broken down even further.

test/functional/apps/bundles/config.ts
test/functional/apps/console/config.ts
test/functional/apps/context/config.ts
test/functional/apps/dashboard_elements/config.ts
test/functional/apps/dashboard/group1/config.ts
test/functional/apps/dashboard/group2/config.ts
test/functional/apps/dashboard/group3/config.ts
test/functional/apps/dashboard/group4/config.ts
test/functional/apps/dashboard/group5/config.ts
test/functional/apps/discover/config.ts
test/functional/apps/getting_started/config.ts
test/functional/apps/home/config.ts
test/functional/apps/management/config.ts
test/functional/apps/saved_objects_management/config.ts
test/functional/apps/status_page/config.ts
test/functional/apps/visualize/group1/config.ts
test/functional/apps/visualize/group2/config.ts
test/functional/apps/visualize/group3/config.ts
test/functional/apps/visualize/group4/config.ts
test/functional/apps/visualize/group5/config.ts
test/functional/apps/visualize/group6/config.ts
test/functional/apps/visualize/replaced_vislib_chart_types/config.ts
x-pack/test/functional/apps/advanced_settings/config.ts
x-pack/test/functional/apps/api_keys/config.ts
x-pack/test/functional/apps/apm/config.ts
x-pack/test/functional/apps/canvas/config.ts
x-pack/test/functional/apps/cross_cluster_replication/config.ts
x-pack/test/functional/apps/dashboard/group1/config.ts
x-pack/test/functional/apps/dashboard/group2/config.ts
x-pack/test/functional/apps/data_views/config.ts
x-pack/test/functional/apps/dev_tools/config.ts
x-pack/test/functional/apps/discover/config.ts
x-pack/test/functional/apps/graph/config.ts
x-pack/test/functional/apps/grok_debugger/config.ts
x-pack/test/functional/apps/home/config.ts
x-pack/test/functional/apps/index_lifecycle_management/config.ts
x-pack/test/functional/apps/index_management/config.ts
x-pack/test/functional/apps/infra/config.ts
x-pack/test/functional/apps/ingest_pipelines/config.ts
x-pack/test/functional/apps/lens/group1/config.ts
x-pack/test/functional/apps/lens/group2/config.ts
x-pack/test/functional/apps/license_management/config.ts
x-pack/test/functional/apps/logstash/config.ts
x-pack/test/functional/apps/management/config.ts
x-pack/test/functional/apps/maps/group1/config.ts
x-pack/test/functional/apps/maps/group2/config.ts
x-pack/test/functional/apps/maps/group3/config.ts
x-pack/test/functional/apps/maps/group4/config.ts
x-pack/test/functional/apps/ml/group1/config.ts
x-pack/test/functional/apps/ml/group2/config.ts
x-pack/test/functional/apps/ml/group3/config.ts
x-pack/test/functional/apps/monitoring/config.ts
x-pack/test/functional/apps/remote_clusters/config.ts
x-pack/test/functional/apps/reporting_management/config.ts
x-pack/test/functional/apps/rollup_job/config.ts
x-pack/test/functional/apps/saved_objects_management/config.ts
x-pack/test/functional/apps/security/config.ts
x-pack/test/functional/apps/snapshot_restore/config.ts
x-pack/test/functional/apps/spaces/config.ts
x-pack/test/functional/apps/status_page/config.ts
x-pack/test/functional/apps/transform/config.ts
x-pack/test/functional/apps/upgrade_assistant/config.ts
x-pack/test/functional/apps/uptime/config.ts
x-pack/test/functional/apps/visualize/config.ts
x-pack/test/functional/apps/watcher/config.ts

In order to run these tests locally contributors will need to pass the right config path based on the tests they want to run like:

node scripts/functional_tests_runner --config x-pack/test/functional/apps/ml/group2/config.ts

@spalger spalger force-pushed the implement/ftr-config-run-order branch 7 times, most recently from 8589c46 to 8d0ba79 Compare April 28, 2022 15:31
@spalger spalger force-pushed the implement/ftr-config-run-order branch from d4e4153 to 8bc1088 Compare April 28, 2022 18:00
Copy link
Member

@efegurkan efegurkan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enterprise Search changes look good.

@spalger
Copy link
Contributor Author

spalger commented May 4, 2022

How does flaky test running work without ciGroups? Will there be an adaption to the awesome Trigger Flaky Test Runner Pipeline you've created?

@kertal already updated and it switches from ciGroups to FTR Configs based on the contents of the PR under test. Try putting this PR url into the form!

Copy link
Member

@pheyos pheyos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ML changes LGTM
There are a few optimizations we can do around the test cleanup, but I'll do that in a follow-up.

@kertal
Copy link
Member

kertal commented May 4, 2022

How does flaky test running work without ciGroups? Will there be an adaption to the awesome Trigger Flaky Test Runner Pipeline you've created?

@kertal already updated and it switches from ciGroups to FTR Configs based on the contents of the PR under test. Try putting this PR url into the form!

thx @spencer, works ❤️‍🔥

Copy link
Contributor

@liza-mae liza-mae left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, as we discussed this will break current cloud testing, so we will work that out after this is merged.

Copy link
Contributor

@nreese nreese left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maps changes LGTM
code review

@kibana-ci
Copy link
Collaborator

💛 Build succeeded, but was flaky

Failed CI Steps

Metrics [docs]

Public APIs missing comments

Total count of every public API that lacks a comment. Target amount is 0. Run node scripts/build_api_docs --plugin [yourplugin] --stats comments for more detailed information.

id before after diff
@kbn/test 214 198 -16

Any counts in public APIs

Total count of every any typed public API. Target amount is 0. Run node scripts/build_api_docs --plugin [yourplugin] --stats any for more detailed information.

id before after diff
@kbn/test 6 5 -1
Unknown metric groups

API count

id before after diff
@kbn/test 252 236 -16

History

To update your PR or re-run it, just comment with:
@elasticmachine merge upstream

@spalger
Copy link
Contributor Author

spalger commented May 4, 2022

It this point I think we have enough reviews to move forward. Thanks to everyone who took the time to review!

@spalger spalger merged commit 542b381 into elastic:main May 4, 2022
@spalger spalger deleted the implement/ftr-config-run-order branch May 4, 2022 22:06
@kibanamachine kibanamachine added the backport:skip This commit does not require backporting label May 4, 2022
kertal pushed a commit to kertal/kibana that referenced this pull request May 24, 2022
* [ftr] automatically determine config run order

* split lens config into two groups

* support ftr configs always running against CI

* Split detection_engine_api_integration rule exception list tests

* Add configs from previous commit

* [ftr] remove testMetadata and maintain a unique lifecycle instance per run

* Revert "[ftr] remove testMetadata and maintain a unique lifecycle instance per run"

This reverts commit d2b4fdb.

* Split alerting_api_integration/security_and_spaces tests

* Add groups to yaml

* Revert "Revert "[ftr] remove testMetadata and maintain a unique lifecycle instance per run""

This reverts commit 56232ee.

* stop ES more forcefully and fix timeout

* only cleanup lifecycle phases when the cleanup is totally complete

* only use kill when cleaning up an esTestInstance

* fix broken import

* fix runOptions.alwaysUseSource implementation

* fix config access

* fix x-pack/ccs config

* fix ml import file paths

* update kibana build id

* revert array.concat() change

* fix baseConfig usage

* fix pie chart data

* split up maps tests

* pull in all of group5 so that es archives are loaded correctly

* add to ftr configs.yml

* fix pie chart data without breaking legacy version

* fix more pie_chart stuff in new vis lib

* restore normal PR tasks

* bump kibana-buildkite-library

* remove ciGroup validation

* remove the script which is no longer called from checks.sh

* [CI] Auto-commit changed files from 'yarn kbn run build -i @kbn/pm'

* adapt flaky test runner scripts to handle ftrConfig paths

* fix types in alerting_api_integration

* improve flaky config parsing and use non-local var name for passing explicit configs to ftr_configs.sh

* Split xpack dashboard tests

* Add configs

* [flaky] remove key from ftr-config steps

* [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix'

* restore cypress builds

* remove ciGroups from FTR config files

* fixup some docs

* add temporary script to hunt for FTR config files

* use config.base.js naming for clarity

* use script to power ftr_configs.yml

* remove usage of removed x-pack/scripts/functional_tests

* fix test names in dashboard snapshots

* bump kibana-buildkite-library

* Try retrying only failed configs

* be a little quieter about trying to get testStats from configs with testRunners defined

* Remove test code

* bump kibana-buildkite-library

* update es_snapshot and on_merge jobs too

* track duration and exit code for each config and print it at the end of the script

* store results in order, rather than by key, in case there are duplicates in $config

* bash is hard

* fix env source and use +e rather than disabling e for whole file

* bash sucks

* print config summary in jest jobs too

* define results in jest_parallel.sh

* simplify config summary print, format times a little better

* fix reference to unbound time variable, use better variable name

* skip the newline between each result

* finish with the nitpicking

* sync changes with ftr_configs.sh

* refuse to execute config files which aren't listed in the .buildkite/ftr_configs.yml

* fix config.edge.js base config import paths

* fix some readmes

* resolve paths from ftr_configs manifest

* fix readConfigFile tests

* just allow __fixtures__ configs

* list a few more cypress config files

* install the main branch of kibana-buildkite-library

* split up lens group1

* move ml data_visualizer tests to their own config

* fix import paths

* fix more imports

* install specific commit of buildkite-pipeline-library

* sort configs in ftr_configs.yml

* bump kibana-buildkite-library

* remove temporary script

* fix env var for limiting config types

* Update docs/developer/contributing/development-functional-tests.asciidoc

Co-authored-by: Christiane (Tina) Heiligers <christiane.heiligers@elastic.co>

* produce a JUnit report for saved objects field count

* apply standard concurrency limits from flaky test runner

* support customizing FTR concurrency via the env

Co-authored-by: Brian Seeders <brian.seeders@elastic.co>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Christiane (Tina) Heiligers <christiane.heiligers@elastic.co>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport:skip This commit does not require backporting release_note:skip Skip the PR/issue when compiling release notes Team:APM All issues that need APM UI Team support Team:Fleet Team label for Observability Data Collection Fleet team Team:Operations Team label for Operations Team v8.3.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.