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

[RFC] OpenSearch Dashboard Version Decoupling #5804

Open
Tracked by #5752
Flyingliuhub opened this issue Feb 3, 2024 · 9 comments
Open
Tracked by #5752

[RFC] OpenSearch Dashboard Version Decoupling #5804

Flyingliuhub opened this issue Feb 3, 2024 · 9 comments
Assignees
Labels
dashboards anywhere label for dashboards anywhere RFC Substantial changes or new features that require community input to garner consensus.

Comments

@Flyingliuhub
Copy link
Member

Flyingliuhub commented Feb 3, 2024

Overview

Decoupling the OpenSearch Dashboard version from the underlying OpenSearch version offers several key benefits, addressing various challenges and enhancing the overall user experience. Here are some statements highlighting the reasons for OpenSearch Dashboard Version Decoupling:

Compatibility Support

Decoupling OpenSearch Dashboards from the backend version promotes compatibility across different versions of OpenSearch and Elasticsearch, making it easier for development, testing, and production environments to coexist without strict version alignment.

Consistent User Experience during Updates

With decoupled versions, users experience a more consistent interface during updates. As OpenSearch Dashboards can be updated independently, users interacting with the dashboard won't be impacted by changes or disruptions in the underlying OpenSearch cluster, contributing to a smoother and more reliable user experience.

Selective Updates and Patching

With version decoupling in OpenSearch Dashboards, maintenance tasks like updates and patches become much easier to handle. The operations team gains the ability to update OpenSearch Dashboards without impacting the entire OpenSearch cluster.

Proposed Solution

To assess the viability of version decoupling for OpenSearch Dashboards, we recommend initiating a test drive. This process involves leveraging all existing functional tests to collect a comprehensive support matrix. This matrix will help us see how well Dashboards work with different versions of OpenSearch or Elasticsearch. By running these tests, we want to find any differences or gaps between the version of OpenSearch Dashboards and OpenSearch/Elasticsearch. This will help us understand which features might need adjustments to work smoothly with different versions.

Our test results will fall into two main categories: passed and failed functional tests. The passing test cases indicate that OpenSearch Dashboards effectively support various versions of OpenSearch and Elasticsearch. This positive outcome demonstrates OpenSearch Dashboards' ability to operate across different OpenSearch and Elasticsearch versions.

On the other hand, failed test cases can be attributed to a variety of reasons. One reason might be that the communication between OpenSearch Dashboards and OpenSearch/ElasticSearch, known as the API, doesn't work well together. Another possible cause is differences in how data is structured (indices field types), making it tricky for OpenSearch Dashboards to handle. Lastly, there could be problems with how things look or how users interact with Discover, Visualization, and Dev Tools - these are known as UI issues. These are the common reasons why tests might not pass.

According to the test results, we will provide a solution for each category. For example, in the case of an API incompatibility issue, it may be that some APIs only exist in a higher version of OpenSearch Dashboards and are not present in the older version. In such cases, we will likely add a condition check to use a common API to achieve the same goal.

For UI incompatibility issues, differences in the user interface (UI) components or layouts between different versions of OpenSearch Dashboards, such as missing UI elements, can occur. New UI elements or components introduced in a higher version may be absent or not supported in an older version, leading to missing features or functionalities. In such cases, we may need to modify the UI codebase to adapt to version-specific changes to ensure a seamless user experience.

Scope

Our testing scope is focus on essential components - Discover, Visualization, and Dev Tools. Third-party plugins will not be included in this phase, allowing us to focus on evaluating the core features of OpenSearch Dashboards for a more targeted assessment of its native capabilities.

We will use the latest OpenSearch Dashboards 2.11 to run functional tests against the selected versions of OpenSearch ('1.0.0', '1.1.0', '1.2.0', '1.3.0', '2.3.0', '2.5.0', '2.7.0', '2.9.0') and Elasticsearch ('7.10').

Execution

We'll use Selenium functional tests to evaluate OpenSearch Dashboards across various major release versions of OpenSearch and Elasticsearch. These tests simulate user interactions, helping us identify and address any issues related to API compatibility, data handling, and user interface interactions. Our goal is to ensure consistent compatibility across different OpenSearch and Elasticsearch versions, informing decisions about the feasibility of version decoupling.

We quickly conducted functional tests using OpenSearch Dashboards 2.11.0 with OpenSearch 1.0.0. The output indicates that currently, version 2.11.0 OpenSearch Dashboards supports the OpenSearch 1.0.0 cluster.

Tests Duration Fail Skip Pass Total
Chrome UI Functional Tests 2 hr 4 min 0 30 601 631

Chrome UI Functional Tests Results so far, the detailed results will come out later on.
OpenSearch Dashboards 2.11.0 and OpenSearch 2.11.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 2.9.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 2.7.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 2.5.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 2.3.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 1.3.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 1.2.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 1.1.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 1.0.0 ✅

Version Coverage Matrix

Feature - Version Test Pass
Chrome UI Functional Tests (OS 2.11. current) - Discover true
Chrome UI Functional Tests (OS 2.11. current) - Visualization true
Chrome UI Functional Tests (OS 2.11. current) - Dashboards true
Chrome UI Functional Tests (OS 2.11. current) - Dev Tool true
Chrome UI Functional Tests (OS 2.9.0) - Discover true
Chrome UI Functional Tests (OS 2.9.0) - Visualization true
Chrome UI Functional Tests (OS 2.9.0) - Dashboards true
Chrome UI Functional Tests (OS 2.9.0) - Dev Tool true
Chrome UI Functional Tests (OS 2.7.0) - Discover true
Chrome UI Functional Tests (OS 2.7.0) - Visualization true
Chrome UI Functional Tests (OS 2.7.0) - Dashboards true
Chrome UI Functional Tests (OS 2.7.0) - Dev Tool true
Chrome UI Functional Tests (OS 2.5.0) - Discover true
Chrome UI Functional Tests (OS 2.5.0) - Visualization true
Chrome UI Functional Tests (OS 2.5.0) - Dashboards true
Chrome UI Functional Tests (OS 2.5.0) - Dev Tool true
Chrome UI Functional Tests (OS 2.3.0) - Discover true
Chrome UI Functional Tests (OS 2.3.0) - Visualization true
Chrome UI Functional Tests (OS 2.3.0) - Dashboards true
Chrome UI Functional Tests (OS 2.3.0) - Dev Tool true
Chrome UI Functional Tests (OS 1.3.0) - Discover true
Chrome UI Functional Tests (OS 1.3.0) - Visualization true
Chrome UI Functional Tests (OS 1.3.0) - Dashboards true
Chrome UI Functional Tests (OS 1.3.0) - Dev Tool true
Chrome UI Functional Tests (OS 1.2.0) - Discover true
Chrome UI Functional Tests (OS 1.2.0) - Visualization true
Chrome UI Functional Tests (OS 1.2.0) - Dashboards true
Chrome UI Functional Tests (OS 1.2.0) - Dev Tool true
Chrome UI Functional Tests (OS 1.1.0) - Discover true
Chrome UI Functional Tests (OS 1.1.0) - Visualization true
Chrome UI Functional Tests (OS 1.1.0) - Dashboards true
Chrome UI Functional Tests (OS 1.1.0) - Dev Tool true
Chrome UI Functional Tests (OS 1.0.0) - Discover true
Chrome UI Functional Tests (OS 1.0.0) - Visualization true
Chrome UI Functional Tests (OS 1.0.0) - Dashboards true
Chrome UI Functional Tests (OS 1.0.0) - Dev Tool true
Chrome UI Functional Tests (ES 7.10.2) - Discover true
Chrome UI Functional Tests (ES 7.10.2) - Visualization false - 15 failed tests
Chrome UI Functional Tests (ES 7.10.2) - Dashboards false - 5 failed tests
Chrome UI Functional Tests (ES 7.10.2) - Dev Tool true
Chrome UI Functional Tests (ES 7.10.2) - Others false - 4 failed tests - scripted fields
Chrome UI Functional Tests (ES 7.9.3) - Discover true
Chrome UI Functional Tests (ES 7.9.3) - Visualization false - 15 failed tests
Chrome UI Functional Tests (ES 7.9.3) - Dashboards false - 5 failed tests
Chrome UI Functional Tests (ES 7.9.3) - Dev Tool true
Chrome UI Functional Tests (ES 7.9.3) - Others false - 4 failed tests - scripted fields

The following sample demonstrates that we can use the OpenSearch Dashboards 2.11.0's multiple-datasource feature to connect to a 7.10 Elasticsearch cluster.

Index Pattern:
image

Discover page:
image

Multiple Datasource Connection Version Compatible so far, the detailed results will come out later on.
Playground Link
OpenSearch Dashboards 2.11.0 and OpenSearch 2.11.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 2.9.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 2.7.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 2.5.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 2.3.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 1.3.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 1.2.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 1.1.0 ✅
OpenSearch Dashboards 2.11.0 and OpenSearch 1.0.0 ✅
OpenSearch Dashboards 2.11.0 and Elasticsearch 7.10 ✅
OpenSearch Dashboards 2.11.0 and Elasticsearch 7.9 ✅

Multiple Data-source Coverage Matrix

Feature - Version Test Pass
(OSD 2.11.0-OS 2.11.0) - Connection true
(OSD 2.11.0-OS 2.11.0) - Create Index Pattern true
(OSD 2.11.0-OS 2.11.0) - Dashboards true
(OSD 2.11.0-OS 2.11.0) - Dev Tool true
(OSD 2.11.0-OS 2.9.0) - Connection true
(OSD 2.11.0-OS 2.9.0) - Create Index Pattern true
(OSD 2.11.0-OS 2.9.0) - Dashboards true
(OSD 2.11.0-OS 2.9.0) - Dev Tool true
(OSD 2.11.0-OS 2.7.0) - Connection true
(OSD 2.11.0-OS 2.7.0) - Create Index Pattern true
(OSD 2.11.0-OS 2.7.0) - Dashboards true
(OSD 2.11.0-OS 2.7.0) - Dev Tool true
(OSD 2.11.0-OS 2.5.0) - Connection true
(OSD 2.11.0-OS 2.5.0) - Create Index Pattern true
(OSD 2.11.0-OS 2.5.0) - Dashboards true
(OSD 2.11.0-OS 2.5.0) - Dev Tool true
(OSD 2.11.0-OS 2.3.0) - Connection true
(OSD 2.11.0-OS 2.3.0) - Create Index Pattern true
(OSD 2.11.0-OS 2.3.0) - Dashboards true
(OSD 2.11.0-OS 2.3.0) - Dev Tool true
(OSD 2.11.0-OS 1.3.0) - Connection true
(OSD 2.11.0-OS 1.3.0) - Create Index Pattern true
(OSD 2.11.0-OS 1.3.0)- Dashboards true
(OSD 2.11.0-OS 1.3.0) - Dev Tool true
(OSD 2.11.0-OS 1.2.0) - Connection true
(OSD 2.11.0-OS 1.2.0) - Create Index Pattern true
(OSD 2.11.0-OS 1.2.0)- Dashboards true
(OSD 2.11.0-OS 1.2.0) - Dev Tool true
(OSD 2.11.0-OS 1.1.0) - Connection true
(OSD 2.11.0-OS 1.1.0) - Create Index Pattern true
(OSD 2.11.0-OS 1.1.0)- Dashboards true
(OSD 2.11.0-OS 1.1.0) - Dev Tool true
(OSD 2.11.0-OS 1.0.0) - Connection true
(OSD 2.11.0-OS 1.0.0) - Create Index Pattern true
(OSD 2.11.0-OS 1.0.0)- Dashboards true
(OSD 2.11.0-OS 1.0.0) - Dev Tool true
(OSD 2.11.0-OS 7.10.0) - Connection true
(OSD 2.11.0-OS 7.10.0) - Create Index Pattern true
(OSD 2.11.0-OS 7.10.0)- Dashboards true
(OSD 2.11.0-OS 7.10.0) - Dev Tool true
(OSD 2.11.0-OS 7.9.0) - Connection true
(OSD 2.11.0-OS 7.9.0) - Create Index Pattern true
(OSD 2.11.0-OS 7.9.0)- Dashboards true
(OSD 2.11.0-OS 7.9.0) - Dev Tool true
(OSD 2.11.0-OS 7.8.0) - Connection true
(OSD 2.11.0-OS 7.8.0) - Create Index Pattern false -invalid_index_name_exception- [_resolve]
(OSD 2.11.0-OS 7.8.0)- Dashboards true
(OSD 2.11.0-OS 7.8.0) - Dev Tool true
(OSD 2.11.0-OS 7.4.0) - Connection true
(OSD 2.11.0-OS 7.4.0) - Create Index Pattern false -invalid_index_name_exception-[_resolve]
(OSD 2.11.0-OS 7.4.0)- Dashboards true
(OSD 2.11.0-OS 7.4.0) - Dev Tool true
(OSD 2.11.0-OS 7.1.0) - Connection true
(OSD 2.11.0-OS 7.1.0) - Create Index Pattern false -invalid_index_name_exception-[_resolve]
(OSD 2.11.0-OS 7.1.0)- Dashboards false - some vis - unknown field
(OSD 2.11.0-OS 7.1.0) - Dev Tool true
(OSD 2.11.0-OS 6.8.0) - Connection true
(OSD 2.11.0-OS 6.8.0) - Create Index Pattern false -invalid_index_name_exception-[_resolve]
(OSD 2.11.0-OS 6.8.0)- Dashboards false
(OSD 2.11.0-OS 6.8.0) - Dev Tool true

FAQ

@seraphjiang
Copy link
Member

overall, test driven approach is good approach to tackle this decouple challenge with measurable metric to evaluate the result and future effort.

It will be great to generate following Feature - Version coverage matrix to help us understand the existing coverage for core feature, and identity those version which feature are broken.

Feature - Version Test Pass
Chrome UI Functional Tests (OS 2.11. current) - Discover true
Chrome UI Functional Tests (OS 2.11. current) - Visualization true
Chrome UI Functional Tests (OS 2.11. current) - Dashboards true
Chrome UI Functional Tests (OS 2.11. current) - Dev Tool true
Chrome UI Functional Tests (OS 2.11. current) - Others true
... ...
Chrome UI Functional Tests (OS 2.0) - Discover true
Chrome UI Functional Tests (OS 2.0) - Visualization true
Chrome UI Functional Tests (OS 2.0) - Dashboards true
Chrome UI Functional Tests (OS 2.0) - Dev Tool true
Chrome UI Functional Tests (OS 2.0) - Others true
... ...
Chrome UI Functional Tests (ES 7.10) - Discover false
Chrome UI Functional Tests (ES 7.10) - Visualization false
Chrome UI Functional Tests (ES 7.10) - Dashboards false
Chrome UI Functional Tests (ES 7.10) - Dev Tool false
Chrome UI Functional Tests (ES 7.10) - Others true

for the solution part, could we add a little bit high level approach how to handle incompatible issue at UI, API, Data tier?

e.g. API
in the case higher version of OSD using some API doesn't existing in lower version of OSD, what are common approach to solve it.

@peterzhuamazon
Copy link
Member

peterzhuamazon commented Feb 5, 2024

The maintenance of a compatibility matrix of what version of OSD support what version of OS is going to take a lot of effort. Tho I am interested to see if we can extend this further.

With OS core having some sort of the version decoupling PR on the way: opensearch-project/OpenSearch#11441, would love to see the level of effort to maintain both of these, and be clear to the users. Also, there are cases where if one OSD version work with one OS version, but plugins are not supporting such version, what will be the solution on that?

And are we planning to have a batch of OSD test of multiple versions maintained somewhere so users can always see the current status of the test and support? Thanks.

@seraphjiang
Copy link
Member

seraphjiang commented Feb 6, 2024

The maintenance of a compatibility matrix of what version of OSD support what version of OS is going to take a lot of effort. Tho I am interested to see if we can extend this further.

We might cross check if we could reuse the thinking process. we want to focus on decouple OSD dependencies on OS at runtime. there could be other decouple like OS + OS Plugins at build time, OS + OS Plugin at runtime?

@Flyingliuhub Flyingliuhub added dashboards anywhere label for dashboards anywhere and removed untriaged labels Feb 7, 2024
@peterzhuamazon
Copy link
Member

The maintenance of a compatibility matrix of what version of OSD support what version of OS is going to take a lot of effort. Tho I am interested to see if we can extend this further.

We might cross check if we could reuse the thinking process. we want to focus on decouple OSD dependencies on OS at runtime. there could be other decouple like OS + OS Plugins at build time, OS + OS Plugin at runtime?

Build time might be a bit of stretch at the moment, as a lot of the code is assuming three digit matching + last digit 0 as of now. If we can achieve installation decoupon to start with, then runtime decouple can follow after.

@Flyingliuhub Flyingliuhub added the RFC Substantial changes or new features that require community input to garner consensus. label Feb 12, 2024
@Flyingliuhub
Copy link
Member Author

@wbeckler could you please take a look this RFC if you have a chance. Thanks

@ohTHATaaronbrown
Copy link

ohTHATaaronbrown commented Feb 23, 2024

Oh god, PLEASE YES. The minor-version-coupling between dashboards and the back-end opensearch is the single most stupid decision the elastic team ever made.

@ashwin-pc
Copy link
Member

@Flyingliuhub you might have already spoken to @AMoo-Miki about this so apologies if its redundant, but this only tests to see if older versions of OS support OSD based on selenium functional tests. A few things this RFC misses out on are:

  1. plugin compatibility. Selenium tests dont include any plugins.
  2. Any provision for graceful degradation. not all features from older clusters might be useful for users
  3. The proposed solution talks about testing to see which versions OSD can support. Thats a one time thing. What after that?

CC: @AMoo-Miki @manasvinibs since you two were working a cross compatibility framework and the test orchestrator that solves these limitations.

Also if you have already discussed this and changed the approach, It might be worth it to capture the current plan here for visibility :)

@Flyingliuhub
Copy link
Member Author

  1. plugin compatibility. Selenium tests dont include any plugins.
  2. The proposed solution talks about testing to see which versions OSD can support. Thats a one time thing. What after that?

@ashwin-pc As this RFC mentioned, we only focus on the vanilla dashboards. We scoped dashboards only, without other plugins. According to our test results, the P0 work is for versions 1.x and 2.x. We saw good results, indicating that the latest vanilla dashboards can support versions 1.x and 2.x OS well.

@seraphjiang
Copy link
Member

The maintenance of a compatibility matrix of what version of OSD support what version of OS is going to take a lot of effort. Tho I am interested to see if we can extend this further.

We might cross check if we could reuse the thinking process. we want to focus on decouple OSD dependencies on OS at runtime. there could be other decouple like OS + OS Plugins at build time, OS + OS Plugin at runtime?

Build time might be a bit of stretch at the moment, as a lot of the code is assuming three digit matching + last digit 0 as of now. If we can achieve installation decoupon to start with, then runtime decouple can follow after.

build time won't be priority if we could support runtime

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
dashboards anywhere label for dashboards anywhere RFC Substantial changes or new features that require community input to garner consensus.
Projects
Status: New
Development

No branches or pull requests

5 participants