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

Add body validation to update follower index API endpoint. #63653

Merged

Conversation

cjcenizal
Copy link
Contributor

@cjcenizal cjcenizal commented Apr 16, 2020

Fixes #62943

When we migrated the server to NP we left out some route validation (https://github.com/elastic/kibana/pull/60121/files#diff-8ae5a51616bdcb1706f0aaf1ab1581c9R173). This means the body gets stripped from requests. I tested the other endpoints and I believe this is the only endpoint to have this type of regression. I'm improving the validation of other routes to be more strict in #62890.

Note that I will update the release label to be 7.7.1 and add a release note if we don't make 7.7.0.

@cjcenizal cjcenizal added bug Fixes for quality problems that affect the customer experience Feature:CCR and Remote Clusters v8.0.0 Team:Kibana Management Dev Tools, Index Management, Upgrade Assistant, ILM, Ingest Node Pipelines, and more release_note:skip Skip the PR/issue when compiling release notes v7.7.0 v7.8.0 labels Apr 16, 2020
@cjcenizal cjcenizal requested review from sebelga and jloleysens April 16, 2020 00:20
@cjcenizal cjcenizal requested a review from a team as a code owner April 16, 2020 00:20
@elasticmachine
Copy link
Contributor

Pinging @elastic/es-ui (Team:Elasticsearch UI)

Copy link
Contributor

@sebelga sebelga left a comment

Choose a reason for hiding this comment

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

LGTM! Tested locally and the bug is fixed. I created a PR to add the tests (API integration + component integration) to avoid possible regression in the future.

cjcenizal#24

Once tests are added I'll approve 👍

const request = httpClient.put(`${API_BASE_PATH}/follower_indices/${encodeURIComponent(id)}`, {
body: JSON.stringify(followerIndex),
body: JSON.stringify({
Copy link
Contributor

Choose a reason for hiding this comment

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

Nit: the stringify is not needed anymore as the httpClient takes care of it.

Copy link
Contributor

Choose a reason for hiding this comment

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

Hm, do you know whether this is also the case for public side httpClient? I seem to recall the JSON.stringify being required there.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I just did a test and confirmed we still need to stringify the body.

@@ -164,6 +164,18 @@ export const registerFollowerIndexRoutes = ({ router, __LEGACY }: RouteDependenc
path: `${API_BASE_PATH}/follower_indices/{id}`,
validate: {
params: schema.object({ id: schema.string() }),
body: schema.object({
Copy link
Contributor

Choose a reason for hiding this comment

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

It would be better to declare the schema outside the route handler so we can re-use and compose it for the create route.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've done this in #62890, so I'm going to leave it out of this PR.

Copy link
Contributor

@jloleysens jloleysens left a comment

Choose a reason for hiding this comment

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

Thanks for finding and fixing this @cjcenizal ! It's kind of extra tricksy because at runtime the body, without validation is {} which is really unfortunate because we would definitely have caught this bug otherwise. Hopefully we can make 7.7.0!

const request = httpClient.put(`${API_BASE_PATH}/follower_indices/${encodeURIComponent(id)}`, {
body: JSON.stringify(followerIndex),
body: JSON.stringify({
Copy link
Contributor

Choose a reason for hiding this comment

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

Hm, do you know whether this is also the case for public side httpClient? I seem to recall the JSON.stringify being required there.

@cjcenizal
Copy link
Contributor Author

@elasticmachine merge upstream

@kibanamachine
Copy link
Contributor

💛 Build succeeded, but was flaky


Test Failures

Kibana Pipeline / kibana-oss-agent / Accessibility Tests.test/accessibility/apps/discover·ts.Discover should open context view on a doc

Link to Jenkins

Standard Out

Failed Tests Reporter:
  - Test has failed 5 times on tracked branches: https://github.com/elastic/kibana/issues/62497

[00:00:00]       │
[00:00:00]         └-: Discover
[00:00:00]           └-> "before all" hook
[00:00:00]           └-> "before all" hook
[00:00:00]             │ info [discover] Loading "mappings.json"
[00:00:00]             │ info [discover] Loading "data.json.gz"
[00:00:00]             │ info [o.e.c.m.MetadataDeleteIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana_1/Xq0mS0IcQpeV4eGITklw-w] deleting index
[00:00:00]             │ info [discover] Deleted existing index [".kibana_1"]
[00:00:00]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] applying create index request using v1 templates []
[00:00:00]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana] creating index, cause [api], templates [], shards [1]/[1], mappings [_doc]
[00:00:00]             │ info [discover] Created index ".kibana"
[00:00:00]             │ debg [discover] ".kibana" settings {"index":{"number_of_replicas":"1","number_of_shards":"1"}}
[00:00:00]             │ info [discover] Indexed 2 docs into ".kibana"
[00:00:00]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana/Q00FctrFTTe4atHYMtiKaw] update_mapping [_doc]
[00:00:00]             │ debg Migrating saved objects
[00:00:00]             │ proc [kibana]   log   [23:02:33.380] [info][savedobjects-service] Creating index .kibana_2.
[00:00:00]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] applying create index request using v1 templates []
[00:00:00]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana_2] creating index, cause [api], templates [], shards [1]/[1], mappings [_doc]
[00:00:00]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] updating number_of_replicas to [0] for indices [.kibana_2]
[00:00:00]             │ proc [kibana]   log   [23:02:33.468] [info][savedobjects-service] Reindexing .kibana to .kibana_1
[00:00:00]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] applying create index request using v1 templates []
[00:00:00]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana_1] creating index, cause [api], templates [], shards [1]/[1], mappings [_doc]
[00:00:00]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] updating number_of_replicas to [0] for indices [.kibana_1]
[00:00:00]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] applying create index request using v1 templates []
[00:00:00]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.tasks] creating index, cause [auto(task api)], templates [], shards [1]/[1], mappings [_doc]
[00:00:00]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] updating number_of_replicas to [0] for indices [.tasks]
[00:00:00]             │ info [o.e.t.LoggingTaskListener] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] 104 finished with response BulkByScrollResponse[took=103.4ms,timed_out=false,sliceId=null,updated=0,created=2,deleted=0,batches=1,versionConflicts=0,noops=0,retries=0,throttledUntil=0s,bulk_failures=[],search_failures=[]]
[00:00:00]             │ info [o.e.c.m.MetadataDeleteIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana/Q00FctrFTTe4atHYMtiKaw] deleting index
[00:00:01]             │ proc [kibana]   log   [23:02:33.901] [info][savedobjects-service] Migrating .kibana_1 saved objects to .kibana_2
[00:00:01]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana_2/IPe9N4-MSriICvxftJIDEQ] update_mapping [_doc]
[00:00:01]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana_2/IPe9N4-MSriICvxftJIDEQ] update_mapping [_doc]
[00:00:01]             │ proc [kibana]   log   [23:02:34.055] [info][savedobjects-service] Pointing alias .kibana to .kibana_2.
[00:00:01]             │ proc [kibana]   log   [23:02:34.125] [info][savedobjects-service] Finished in 748ms.
[00:00:01]             │ debg applying update to kibana config: {"accessibility:disableAnimations":true,"dateFormat:tz":"UTC"}
[00:00:01]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana_2/IPe9N4-MSriICvxftJIDEQ] update_mapping [_doc]
[00:00:02]             │ info [logstash_functional] Loading "mappings.json"
[00:00:02]             │ info [logstash_functional] Loading "data.json.gz"
[00:00:02]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] applying create index request using v1 templates []
[00:00:02]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [logstash-2015.09.22] creating index, cause [api], templates [], shards [1]/[0], mappings [_doc]
[00:00:02]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] current.health="GREEN" message="Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[logstash-2015.09.22][0]]])." previous.health="YELLOW" reason="shards started [[logstash-2015.09.22][0]]"
[00:00:02]             │ info [logstash_functional] Created index "logstash-2015.09.22"
[00:00:02]             │ debg [logstash_functional] "logstash-2015.09.22" settings {"index":{"analysis":{"analyzer":{"url":{"max_token_length":"1000","tokenizer":"uax_url_email","type":"standard"}}},"number_of_replicas":"0","number_of_shards":"1"}}
[00:00:02]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] applying create index request using v1 templates []
[00:00:02]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [logstash-2015.09.20] creating index, cause [api], templates [], shards [1]/[0], mappings [_doc]
[00:00:02]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] current.health="GREEN" message="Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[logstash-2015.09.20][0]]])." previous.health="YELLOW" reason="shards started [[logstash-2015.09.20][0]]"
[00:00:02]             │ info [logstash_functional] Created index "logstash-2015.09.20"
[00:00:02]             │ debg [logstash_functional] "logstash-2015.09.20" settings {"index":{"analysis":{"analyzer":{"url":{"max_token_length":"1000","tokenizer":"uax_url_email","type":"standard"}}},"number_of_replicas":"0","number_of_shards":"1"}}
[00:00:02]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] applying create index request using v1 templates []
[00:00:02]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [logstash-2015.09.21] creating index, cause [api], templates [], shards [1]/[0], mappings [_doc]
[00:00:02]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] current.health="GREEN" message="Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[logstash-2015.09.21][0]]])." previous.health="YELLOW" reason="shards started [[logstash-2015.09.21][0]]"
[00:00:02]             │ info [logstash_functional] Created index "logstash-2015.09.21"
[00:00:02]             │ debg [logstash_functional] "logstash-2015.09.21" settings {"index":{"analysis":{"analyzer":{"url":{"max_token_length":"1000","tokenizer":"uax_url_email","type":"standard"}}},"number_of_replicas":"0","number_of_shards":"1"}}
[00:00:12]             │ info progress: 10834
[00:00:14]             │ info [logstash_functional] Indexed 4633 docs into "logstash-2015.09.22"
[00:00:14]             │ info [logstash_functional] Indexed 4757 docs into "logstash-2015.09.20"
[00:00:14]             │ info [logstash_functional] Indexed 4614 docs into "logstash-2015.09.21"
[00:00:14]             │ debg applying update to kibana config: {"defaultIndex":"logstash-*"}
[00:00:14]             │ info [o.e.c.m.MetadataMappingService] [kibana-ci-immutable-oraclelinux-tests-xl-1587076818270164410] [.kibana_2/IPe9N4-MSriICvxftJIDEQ] update_mapping [_doc]
[00:00:15]             │ debg navigating to discover url: http://localhost:61131/app/kibana#/discover
[00:00:15]             │ debg navigate to: http://localhost:61131/app/kibana#/discover
[00:00:15]             │ debg browser[INFO] http://localhost:61131/app/kibana?_t=1587078168507#/discover 341 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'unsafe-eval' 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-P5polb1UreUSOe5V/Pv7tc+yeZuJXiOi/3fqhGsU7BE='), or a nonce ('nonce-...') is required to enable inline execution.
[00:00:15]             │
[00:00:15]             │ debg browser[INFO] http://localhost:61131/bundles/app/kibana/bootstrap.js 9:19 "^ A single error about an inline script not firing due to content security policy is expected!"
[00:00:15]             │ debg ... sleep(700) start
[00:00:16]             │ debg ... sleep(700) end
[00:00:16]             │ debg returned from get, calling refresh
[00:00:17]             │ debg browser[INFO] http://localhost:61131/app/kibana?_t=1587078168507#/discover 341 Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'unsafe-eval' 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-P5polb1UreUSOe5V/Pv7tc+yeZuJXiOi/3fqhGsU7BE='), or a nonce ('nonce-...') is required to enable inline execution.
[00:00:17]             │
[00:00:17]             │ debg browser[INFO] http://localhost:61131/bundles/app/kibana/bootstrap.js 9:19 "^ A single error about an inline script not firing due to content security policy is expected!"
[00:00:17]             │ debg currentUrl = http://localhost:61131/app/kibana#/discover
[00:00:17]             │          appUrl = http://localhost:61131/app/kibana#/discover
[00:00:17]             │ debg TestSubjects.find(kibanaChrome)
[00:00:17]             │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=60000
[00:00:20]             │ debg browser[INFO] http://localhost:61131/bundles/kbn-ui-shared-deps/kbn-ui-shared-deps.js 380:106115 "INFO: 2020-04-16T23:02:53Z
[00:00:20]             │        Adding connection to http://localhost:61131/elasticsearch
[00:00:20]             │
[00:00:20]             │      "
[00:00:20]             │ debg TestSubjects.find(kibanaChrome)
[00:00:20]             │ debg Find.findByCssSelector('[data-test-subj="kibanaChrome"]') with timeout=10000
[00:00:21]             │ debg ... sleep(501) start
[00:00:21]             │ debg ... sleep(501) end
[00:00:21]             │ debg in navigateTo url = http://localhost:61131/app/kibana#/discover
[00:00:21]             │ debg TestSubjects.exists(statusPageContainer)
[00:00:21]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="statusPageContainer"]') with timeout=2500
[00:00:24]             │ debg --- retry.tryForTime error: [data-test-subj="statusPageContainer"] is not displayed
[00:00:24]             │ debg Setting absolute range to Sep 19, 2015 @ 06:31:44.000 to Sep 23, 2015 @ 18:31:44.000
[00:00:24]             │ debg TestSubjects.exists(superDatePickerToggleQuickMenuButton)
[00:00:24]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerToggleQuickMenuButton"]') with timeout=20000
[00:00:24]             │ debg TestSubjects.exists(superDatePickerShowDatesButton)
[00:00:24]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=2500
[00:00:24]             │ debg TestSubjects.click(superDatePickerShowDatesButton)
[00:00:24]             │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:00:24]             │ debg Find.findByCssSelector('[data-test-subj="superDatePickerShowDatesButton"]') with timeout=10000
[00:00:24]             │ debg TestSubjects.exists(superDatePickerstartDatePopoverButton)
[00:00:24]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=2500
[00:00:24]             │ debg TestSubjects.click(superDatePickerendDatePopoverButton)
[00:00:24]             │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:00:24]             │ debg Find.findByCssSelector('[data-test-subj="superDatePickerendDatePopoverButton"]') with timeout=10000
[00:00:24]             │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:00:24]             │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:00:24]             │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:00:24]             │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:00:25]             │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:00:25]             │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:00:25]             │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:00:25]             │ debg TestSubjects.setValue(superDatePickerAbsoluteDateInput, Sep 23, 2015 @ 18:31:44.000)
[00:00:25]             │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:00:25]             │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:00:25]             │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:00:25]             │ debg ... sleep(500) start
[00:00:26]             │ debg ... sleep(500) end
[00:00:26]             │ debg TestSubjects.click(superDatePickerstartDatePopoverButton)
[00:00:26]             │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:00:26]             │ debg Find.findByCssSelector('[data-test-subj="superDatePickerstartDatePopoverButton"]') with timeout=10000
[00:00:26]             │ debg Find.waitForElementStale with timeout=10000
[00:00:26]             │ debg Find.findByCssSelector('div.euiPopover__panel-isOpen') with timeout=10000
[00:00:26]             │ debg TestSubjects.click(superDatePickerAbsoluteTab)
[00:00:26]             │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:00:26]             │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteTab"]') with timeout=10000
[00:00:26]             │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:00:26]             │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:00:26]             │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:00:26]             │ debg TestSubjects.setValue(superDatePickerAbsoluteDateInput, Sep 19, 2015 @ 06:31:44.000)
[00:00:26]             │ debg TestSubjects.click(superDatePickerAbsoluteDateInput)
[00:00:26]             │ debg Find.clickByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:00:26]             │ debg Find.findByCssSelector('[data-test-subj="superDatePickerAbsoluteDateInput"]') with timeout=10000
[00:00:27]             │ debg TestSubjects.exists(superDatePickerApplyTimeButton)
[00:00:27]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="superDatePickerApplyTimeButton"]') with timeout=2500
[00:00:29]             │ debg --- retry.tryForTime error: [data-test-subj="superDatePickerApplyTimeButton"] is not displayed
[00:00:30]             │ debg TestSubjects.click(querySubmitButton)
[00:00:30]             │ debg Find.clickByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:00:30]             │ debg Find.findByCssSelector('[data-test-subj="querySubmitButton"]') with timeout=10000
[00:00:30]             │ debg Find.waitForElementStale with timeout=10000
[00:00:30]             │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:00:30]             │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:00:32]           └-> main view
[00:00:32]             └-> "before each" hook: global before each
[00:00:42]             └- ✓ pass  (10.1s) "Discover main view"
[00:00:42]           └-> Click save button
[00:00:42]             └-> "before each" hook: global before each
[00:00:42]             │ debg TestSubjects.click(discoverSaveButton)
[00:00:42]             │ debg Find.clickByCssSelector('[data-test-subj="discoverSaveButton"]') with timeout=10000
[00:00:42]             │ debg Find.findByCssSelector('[data-test-subj="discoverSaveButton"]') with timeout=10000
[00:00:51]             └- ✓ pass  (8.8s) "Discover Click save button"
[00:00:51]           └-> Save search panel
[00:00:51]             └-> "before each" hook: global before each
[00:00:51]             │ debg TestSubjects.setValue(savedObjectTitle, a11ySearch)
[00:00:51]             │ debg TestSubjects.click(savedObjectTitle)
[00:00:51]             │ debg Find.clickByCssSelector('[data-test-subj="savedObjectTitle"]') with timeout=10000
[00:00:51]             │ debg Find.findByCssSelector('[data-test-subj="savedObjectTitle"]') with timeout=10000
[00:01:00]             └- ✓ pass  (8.5s) "Discover Save search panel"
[00:01:00]           └-> Confirm saved search
[00:01:00]             └-> "before each" hook: global before each
[00:01:00]             │ debg TestSubjects.click(confirmSaveSavedObjectButton)
[00:01:00]             │ debg Find.clickByCssSelector('[data-test-subj="confirmSaveSavedObjectButton"]') with timeout=10000
[00:01:00]             │ debg Find.findByCssSelector('[data-test-subj="confirmSaveSavedObjectButton"]') with timeout=10000
[00:01:08]             └- ✓ pass  (8.6s) "Discover Confirm saved search"
[00:01:08]           └-> Click on new to clear the search
[00:01:08]             └-> "before each" hook: global before each
[00:01:08]             │ debg TestSubjects.click(discoverNewButton)
[00:01:08]             │ debg Find.clickByCssSelector('[data-test-subj="discoverNewButton"]') with timeout=10000
[00:01:08]             │ debg Find.findByCssSelector('[data-test-subj="discoverNewButton"]') with timeout=10000
[00:01:09]             │ debg isGlobalLoadingIndicatorVisible
[00:01:09]             │ debg TestSubjects.exists(globalLoadingIndicator)
[00:01:09]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:01:09]             │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:01:09]             │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:01:19]             └- ✓ pass  (11.1s) "Discover Click on new to clear the search"
[00:01:19]           └-> Open load saved search panel
[00:01:19]             └-> "before each" hook: global before each
[00:01:19]             │ debg TestSubjects.exists(loadSearchForm)
[00:01:19]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="loadSearchForm"]') with timeout=2500
[00:01:22]             │ debg --- retry.tryForTime error: [data-test-subj="loadSearchForm"] is not displayed
[00:01:22]             │ debg TestSubjects.moveMouseTo(discoverOpenButton)
[00:01:22]             │ debg TestSubjects.find(discoverOpenButton)
[00:01:22]             │ debg Find.findByCssSelector('[data-test-subj="discoverOpenButton"]') with timeout=10000
[00:01:23]             │ debg TestSubjects.click(discoverOpenButton)
[00:01:23]             │ debg Find.clickByCssSelector('[data-test-subj="discoverOpenButton"]') with timeout=10000
[00:01:23]             │ debg Find.findByCssSelector('[data-test-subj="discoverOpenButton"]') with timeout=10000
[00:01:23]             │ debg isGlobalLoadingIndicatorVisible
[00:01:23]             │ debg TestSubjects.exists(globalLoadingIndicator)
[00:01:23]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:01:24]             │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:01:26]             │ debg --- retry.tryForTime failed again with the same message...
[00:01:26]             │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:01:26]             │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:01:26]             │ debg TestSubjects.exists(loadSearchForm)
[00:01:26]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="loadSearchForm"]') with timeout=2500
[00:01:35]             │ debg TestSubjects.click(euiFlyoutCloseButton)
[00:01:35]             │ debg Find.clickByCssSelector('[data-test-subj="euiFlyoutCloseButton"]') with timeout=10000
[00:01:35]             │ debg Find.findByCssSelector('[data-test-subj="euiFlyoutCloseButton"]') with timeout=10000
[00:01:35]             └- ✓ pass  (15.8s) "Discover Open load saved search panel"
[00:01:35]           └-> Open inspector panel
[00:01:35]             └-> "before each" hook: global before each
[00:01:35]             │ debg Inspector.open
[00:01:35]             │ debg TestSubjects.exists(inspectorPanel)
[00:01:35]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="inspectorPanel"]') with timeout=2500
[00:01:38]             │ debg --- retry.tryForTime error: [data-test-subj="inspectorPanel"] is not displayed
[00:01:38]             │ debg TestSubjects.click(openInspectorButton)
[00:01:38]             │ debg Find.clickByCssSelector('[data-test-subj="openInspectorButton"]') with timeout=10000
[00:01:38]             │ debg Find.findByCssSelector('[data-test-subj="openInspectorButton"]') with timeout=10000
[00:01:38]             │ debg TestSubjects.exists(inspectorPanel)
[00:01:38]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="inspectorPanel"]') with timeout=2500
[00:01:47]             │ debg Close Inspector
[00:01:47]             │ debg TestSubjects.exists(inspectorPanel)
[00:01:47]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="inspectorPanel"]') with timeout=2500
[00:01:47]             │ debg Closing flyout inspectorPanel
[00:01:47]             │ debg TestSubjects.find(inspectorPanel)
[00:01:47]             │ debg Find.findByCssSelector('[data-test-subj="inspectorPanel"]') with timeout=10000
[00:01:47]             │ debg Waiting up to 20000ms for flyout closed...
[00:01:47]             │ debg TestSubjects.exists(inspectorPanel)
[00:01:47]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="inspectorPanel"]') with timeout=1000
[00:01:48]             │ debg --- retry.tryForTime error: [data-test-subj="inspectorPanel"] is not displayed
[00:01:49]             │ debg TestSubjects.exists(inspectorPanel)
[00:01:49]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="inspectorPanel"]') with timeout=2500
[00:01:51]             │ debg --- retry.tryForTime error: [data-test-subj="inspectorPanel"] is not displayed
[00:01:52]             └- ✓ pass  (16.6s) "Discover Open inspector panel"
[00:01:52]           └-> Open add filter
[00:01:52]             └-> "before each" hook: global before each
[00:01:52]             │ debg TestSubjects.click(addFilter)
[00:01:52]             │ debg Find.clickByCssSelector('[data-test-subj="addFilter"]') with timeout=10000
[00:01:52]             │ debg Find.findByCssSelector('[data-test-subj="addFilter"]') with timeout=10000
[00:02:01]             └- ✓ pass  (8.7s) "Discover Open add filter"
[00:02:01]           └-> Select values for a filter
[00:02:01]             └-> "before each" hook: global before each
[00:02:01]             │ debg TestSubjects.click(addFilter)
[00:02:01]             │ debg Find.clickByCssSelector('[data-test-subj="addFilter"]') with timeout=10000
[00:02:01]             │ debg Find.findByCssSelector('[data-test-subj="addFilter"]') with timeout=10000
[00:02:01]             │ debg comboBox.set, comboBoxSelector: filterFieldSuggestionList
[00:02:01]             │ debg TestSubjects.find(filterFieldSuggestionList)
[00:02:01]             │ debg Find.findByCssSelector('[data-test-subj="filterFieldSuggestionList"]') with timeout=10000
[00:02:01]             │ debg comboBox.setElement, value: extension.raw
[00:02:01]             │ debg comboBox.isOptionSelected, value: extension.raw
[00:02:03]             │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:02:03]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:02:04]             │ debg Find.allByCssSelector('.euiFilterSelectItem[title^="extension.raw"]') with timeout=2500
[00:02:04]             │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:02:04]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:02:07]             │ debg --- retry.tryForTime error: [data-test-subj~="comboBoxOptionsList"] is not displayed
[00:02:07]             │ debg comboBox.set, comboBoxSelector: filterOperatorList
[00:02:07]             │ debg TestSubjects.find(filterOperatorList)
[00:02:07]             │ debg Find.findByCssSelector('[data-test-subj="filterOperatorList"]') with timeout=10000
[00:02:07]             │ debg comboBox.setElement, value: is one of
[00:02:07]             │ debg comboBox.isOptionSelected, value: is one of
[00:02:10]             │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:02:10]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:02:10]             │ debg Find.allByCssSelector('.euiFilterSelectItem[title^="is one of"]') with timeout=2500
[00:02:10]             │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:02:10]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:02:13]             │ debg --- retry.tryForTime error: [data-test-subj~="comboBoxOptionsList"] is not displayed
[00:02:13]             │ debg TestSubjects.find(filterParams)
[00:02:13]             │ debg Find.findByCssSelector('[data-test-subj="filterParams"]') with timeout=10000
[00:02:13]             │ debg comboBox.setElement, value: jpg
[00:02:13]             │ debg comboBox.isOptionSelected, value: jpg
[00:02:16]             │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:02:16]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:02:16]             │ debg Find.allByCssSelector('.euiFilterSelectItem[title^="jpg"]') with timeout=2500
[00:02:16]             │ debg TestSubjects.exists(~comboBoxOptionsList)
[00:02:16]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj~="comboBoxOptionsList"]') with timeout=2500
[00:02:16]             │ debg TestSubjects.click(saveFilter)
[00:02:16]             │ debg Find.clickByCssSelector('[data-test-subj="saveFilter"]') with timeout=10000
[00:02:16]             │ debg Find.findByCssSelector('[data-test-subj="saveFilter"]') with timeout=10000
[00:02:17]             │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:02:17]             │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:02:25]             └- ✓ pass  (24.7s) "Discover Select values for a filter"
[00:02:25]           └-> Load a new search from the panel
[00:02:25]             └-> "before each" hook: global before each
[00:02:25]             │ debg TestSubjects.click(discoverSaveButton)
[00:02:25]             │ debg Find.clickByCssSelector('[data-test-subj="discoverSaveButton"]') with timeout=10000
[00:02:25]             │ debg Find.findByCssSelector('[data-test-subj="discoverSaveButton"]') with timeout=10000
[00:02:26]             │ debg TestSubjects.setValue(savedObjectTitle, filterSearch)
[00:02:26]             │ debg TestSubjects.click(savedObjectTitle)
[00:02:26]             │ debg Find.clickByCssSelector('[data-test-subj="savedObjectTitle"]') with timeout=10000
[00:02:26]             │ debg Find.findByCssSelector('[data-test-subj="savedObjectTitle"]') with timeout=10000
[00:02:26]             │ debg TestSubjects.click(confirmSaveSavedObjectButton)
[00:02:26]             │ debg Find.clickByCssSelector('[data-test-subj="confirmSaveSavedObjectButton"]') with timeout=10000
[00:02:26]             │ debg Find.findByCssSelector('[data-test-subj="confirmSaveSavedObjectButton"]') with timeout=10000
[00:02:26]             │ debg TestSubjects.exists(loadSearchForm)
[00:02:26]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="loadSearchForm"]') with timeout=2500
[00:02:29]             │ debg --- retry.tryForTime error: [data-test-subj="loadSearchForm"] is not displayed
[00:02:29]             │ debg TestSubjects.moveMouseTo(discoverOpenButton)
[00:02:29]             │ debg TestSubjects.find(discoverOpenButton)
[00:02:29]             │ debg Find.findByCssSelector('[data-test-subj="discoverOpenButton"]') with timeout=10000
[00:02:30]             │ debg TestSubjects.click(discoverOpenButton)
[00:02:30]             │ debg Find.clickByCssSelector('[data-test-subj="discoverOpenButton"]') with timeout=10000
[00:02:30]             │ debg Find.findByCssSelector('[data-test-subj="discoverOpenButton"]') with timeout=10000
[00:02:30]             │ debg isGlobalLoadingIndicatorVisible
[00:02:30]             │ debg TestSubjects.exists(globalLoadingIndicator)
[00:02:30]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:02:32]             │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:02:32]             │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:02:32]             │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:02:32]             │ debg TestSubjects.exists(loadSearchForm)
[00:02:32]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="loadSearchForm"]') with timeout=2500
[00:02:32]             │ debg TestSubjects.exists(loadSearchForm)
[00:02:32]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="loadSearchForm"]') with timeout=2500
[00:02:32]             │ debg Find.byButtonText('filterSearch') with timeout=10000
[00:02:37]             │ debg isGlobalLoadingIndicatorVisible
[00:02:37]             │ debg TestSubjects.exists(globalLoadingIndicator)
[00:02:37]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:02:39]             │ debg --- retry.tryForTime error: [data-test-subj="globalLoadingIndicator"] is not displayed
[00:02:39]             │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:02:39]             │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:02:47]             └- ✓ pass  (21.8s) "Discover Load a new search from the panel"
[00:02:47]           └-> click share button
[00:02:47]             └-> "before each" hook: global before each
[00:02:47]             │ debg TestSubjects.click(shareTopNavButton)
[00:02:47]             │ debg Find.clickByCssSelector('[data-test-subj="shareTopNavButton"]') with timeout=10000
[00:02:47]             │ debg Find.findByCssSelector('[data-test-subj="shareTopNavButton"]') with timeout=10000
[00:02:55]             └- ✓ pass  (8.4s) "Discover click share button"
[00:02:55]           └-> Open sidebar filter
[00:02:55]             └-> "before each" hook: global before each
[00:02:55]             │ debg TestSubjects.click(toggleFieldFilterButton)
[00:02:55]             │ debg Find.clickByCssSelector('[data-test-subj="toggleFieldFilterButton"]') with timeout=10000
[00:02:55]             │ debg Find.findByCssSelector('[data-test-subj="toggleFieldFilterButton"]') with timeout=10000
[00:02:56]             │ debg TestSubjects.exists(filterSelectionPanel)
[00:02:56]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="filterSelectionPanel"]') with timeout=120000
[00:03:04]             └- ✓ pass  (8.7s) "Discover Open sidebar filter"
[00:03:04]           └-> Close sidebar filter
[00:03:04]             └-> "before each" hook: global before each
[00:03:04]             │ debg TestSubjects.click(toggleFieldFilterButton)
[00:03:04]             │ debg Find.clickByCssSelector('[data-test-subj="toggleFieldFilterButton"]') with timeout=10000
[00:03:04]             │ debg Find.findByCssSelector('[data-test-subj="toggleFieldFilterButton"]') with timeout=10000
[00:03:04]             │ debg TestSubjects.missingOrFail(filterSelectionPanel)
[00:03:04]             │ debg TestSubjects.waitForHidden(filterSelectionPanel)
[00:03:04]             │ debg TestSubjects.find(filterSelectionPanel)
[00:03:04]             │ debg Find.findByCssSelector('[data-test-subj="filterSelectionPanel"]') with timeout=10000
[00:03:04]             │ debg Find.waitForElementHidden with timeout=2500
[00:03:12]             └- ✓ pass  (8.1s) "Discover Close sidebar filter"
[00:03:12]           └-> Add a field from sidebar
[00:03:12]             └-> "before each" hook: global before each
[00:03:12]             │ debg TestSubjects.moveMouseTo(field-@message)
[00:03:12]             │ debg TestSubjects.find(field-@message)
[00:03:12]             │ debg Find.findByCssSelector('[data-test-subj="field-@message"]') with timeout=10000
[00:03:13]             │ debg TestSubjects.click(fieldToggle-@message)
[00:03:13]             │ debg Find.clickByCssSelector('[data-test-subj="fieldToggle-@message"]') with timeout=10000
[00:03:13]             │ debg Find.findByCssSelector('[data-test-subj="fieldToggle-@message"]') with timeout=10000
[00:03:15]             └- ✓ pass  (2.8s) "Discover Add a field from sidebar"
[00:03:15]           └-> Add more fields from sidebar
[00:03:15]             └-> "before each" hook: global before each
[00:03:15]             │ debg TestSubjects.click(field-extension)
[00:03:15]             │ debg Find.clickByCssSelector('[data-test-subj="field-extension"]') with timeout=10000
[00:03:15]             │ debg Find.findByCssSelector('[data-test-subj="field-extension"]') with timeout=10000
[00:03:15]             │ debg TestSubjects.exists(plus-extension-jpg)
[00:03:15]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="plus-extension-jpg"]') with timeout=2500
[00:03:15]             │ debg TestSubjects.click(plus-extension-jpg)
[00:03:15]             │ debg Find.clickByCssSelector('[data-test-subj="plus-extension-jpg"]') with timeout=10000
[00:03:15]             │ debg Find.findByCssSelector('[data-test-subj="plus-extension-jpg"]') with timeout=10000
[00:03:16]             │ debg isGlobalLoadingIndicatorVisible
[00:03:16]             │ debg TestSubjects.exists(globalLoadingIndicator)
[00:03:16]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:03:16]             │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:03:16]             │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:03:17]             │ debg TestSubjects.click(field-geo.src)
[00:03:17]             │ debg Find.clickByCssSelector('[data-test-subj="field-geo.src"]') with timeout=10000
[00:03:17]             │ debg Find.findByCssSelector('[data-test-subj="field-geo.src"]') with timeout=10000
[00:03:17]             │ debg TestSubjects.exists(plus-geo.src-IN)
[00:03:17]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="plus-geo.src-IN"]') with timeout=2500
[00:03:17]             │ debg TestSubjects.click(plus-geo.src-IN)
[00:03:17]             │ debg Find.clickByCssSelector('[data-test-subj="plus-geo.src-IN"]') with timeout=10000
[00:03:17]             │ debg Find.findByCssSelector('[data-test-subj="plus-geo.src-IN"]') with timeout=10000
[00:03:17]             │ debg isGlobalLoadingIndicatorVisible
[00:03:17]             │ debg TestSubjects.exists(globalLoadingIndicator)
[00:03:17]             │ debg Find.existsByDisplayedByCssSelector('[data-test-subj="globalLoadingIndicator"]') with timeout=1500
[00:03:17]             │ debg TestSubjects.exists(globalLoadingIndicator-hidden)
[00:03:17]             │ debg Find.existsByCssSelector('[data-test-subj="globalLoadingIndicator-hidden"]') with timeout=100000
[00:03:19]             └- ✓ pass  (3.8s) "Discover Add more fields from sidebar"
[00:03:19]           └-> should open context view on a doc
[00:03:19]             └-> "before each" hook: global before each
[00:03:19]             │ debg TestSubjects.find(docTable)
[00:03:19]             │ debg Find.findByCssSelector('[data-test-subj="docTable"]') with timeout=10000
[00:03:19]             │ debg TestSubjects.find(docTable)
[00:03:19]             │ debg Find.findByCssSelector('[data-test-subj="docTable"]') with timeout=10000
[00:03:20]             │ info Taking screenshot "/dev/shm/workspace/kibana/test/functional/screenshots/failure/Discover should open context view on a doc.png"
[00:03:20]             │ info Current URL is: http://localhost:61131/app/kibana#/discover/b2438460-8036-11ea-b6f4-21973a881cd0?_a=(columns:!(%27@message%27),filters:!((%27$state%27:(store:appState),meta:(alias:!n,disabled:!f,index:%27logstash-*%27,key:extension.raw,negate:!f,params:!(jpg),type:phrases,value:jpg),query:(bool:(minimum_should_match:1,should:!((match_phrase:(extension.raw:jpg)))))),(%27$state%27:(store:appState),meta:(alias:!n,disabled:!f,index:%27logstash-*%27,key:extension,negate:!f,params:(query:jpg),type:phrase),query:(match_phrase:(extension:jpg))),(%27$state%27:(store:appState),meta:(alias:!n,disabled:!f,index:%27logstash-*%27,key:geo.src,negate:!f,params:(query:IN),type:phrase),query:(match_phrase:(geo.src:IN)))),index:%27logstash-*%27,interval:auto,query:(language:kuery,query:%27%27),sort:!())
[00:03:20]             │ info Saving page source to: /dev/shm/workspace/kibana/test/functional/failure_debug/html/Discover should open context view on a doc.html
[00:03:20]             └- ✖ fail: "Discover should open context view on a doc"
[00:03:20]             │

Stack Trace

{ StaleElementReferenceError: stale element reference: element is not attached to the page document
  (Session info: headless chrome=81.0.4044.113)
    at Object.throwDecodedError (node_modules/selenium-webdriver/lib/error.js:550:15)
    at parseHttpResponse (node_modules/selenium-webdriver/lib/http.js:565:13)
    at Executor.execute (node_modules/selenium-webdriver/lib/http.js:491:26)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  name: 'StaleElementReferenceError',
  remoteStacktrace: '#0 0x55b8fb96a5b9 <unknown>\n' }

History

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

@sebelga sebelga self-requested a review April 17, 2020 07:35
Copy link
Contributor

@sebelga sebelga left a comment

Choose a reason for hiding this comment

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

I'll approve to not block it but you are also missing the component integration tests that I added in the PR.

I'd like this PR cjcenizal#24 to not get stale and have people's feedback on it. cc @jloleysens @alisonelizabeth @cjcenizal @cuff-links

@cjcenizal cjcenizal merged commit 7e7884e into elastic:master Apr 17, 2020
cjcenizal added a commit to cjcenizal/kibana that referenced this pull request Apr 17, 2020
cjcenizal added a commit to cjcenizal/kibana that referenced this pull request Apr 17, 2020
cjcenizal added a commit to cjcenizal/kibana that referenced this pull request Apr 19, 2020
@cjcenizal
Copy link
Contributor Author

missing the component integration tests that I added in the PR.

Thanks for pointing this out. I'll add it in another PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Fixes for quality problems that affect the customer experience Feature:CCR and Remote Clusters release_note:skip Skip the PR/issue when compiling release notes Team:Kibana Management Dev Tools, Index Management, Upgrade Assistant, ILM, Ingest Node Pipelines, and more v7.7.0 v7.8.0 v8.0.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[CCR] Edit follower index: advanced settings are not persisted
5 participants