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

Fix issue with feature flags where default value may not be honored #12849

Merged
merged 7 commits into from
Mar 25, 2024

Conversation

cwperks
Copy link
Member

@cwperks cwperks commented Mar 22, 2024

Description

Fixes an issue where FeatureFlags is not honoring the default value of the feature flag setting when calling isEnabled.

The bug exists because the settings object in the FeatureFlags class is not initialized until initializeFeatureFlags is called and will return false from this line instead of honoring the default value. While a feature guarded by a feature flag should not be enabled by default, this is a bug in the way the feature flags logic is implemented.

Related Issues

Check List

  • New functionality includes testing.
    • All tests pass
  • New functionality has been documented.
    • New functionality has javadoc added
  • Failing checks are inspected and point to the corresponding known issue(s) (See: Troubleshooting Failing Builds)
  • Commits are signed per the DCO using --signoff
  • Commit changes are listed out in CHANGELOG.md file (See: Changelog)
  • Public documentation issue/PR created

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

@cwperks cwperks changed the title Fix issue with feature flags passed as system props where default value was not being honored Fix issue with feature flags where default value may not be honored Mar 22, 2024
Signed-off-by: Craig Perkins <craig5008@gmail.com>
Copy link
Contributor

github-actions bot commented Mar 22, 2024

Compatibility status:

Checks if related components are compatible with change 565109e

Incompatible components

Skipped components

Compatible components

Compatible components: [https://github.com/opensearch-project/custom-codecs.git, https://github.com/opensearch-project/asynchronous-search.git, https://github.com/opensearch-project/flow-framework.git, https://github.com/opensearch-project/observability.git, https://github.com/opensearch-project/reporting.git, https://github.com/opensearch-project/job-scheduler.git, https://github.com/opensearch-project/cross-cluster-replication.git, https://github.com/opensearch-project/opensearch-oci-object-storage.git, https://github.com/opensearch-project/common-utils.git, https://github.com/opensearch-project/geospatial.git, https://github.com/opensearch-project/k-nn.git, https://github.com/opensearch-project/neural-search.git, https://github.com/opensearch-project/anomaly-detection.git, https://github.com/opensearch-project/sql.git, https://github.com/opensearch-project/security-analytics.git, https://github.com/opensearch-project/ml-commons.git, https://github.com/opensearch-project/index-management.git, https://github.com/opensearch-project/notifications.git, https://github.com/opensearch-project/alerting.git, https://github.com/opensearch-project/performance-analyzer-rca.git, https://github.com/opensearch-project/security.git, https://github.com/opensearch-project/performance-analyzer.git]

Copy link
Contributor

❌ Gradle check result for daaabc4: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

Copy link
Contributor

❌ Gradle check result for 86769ec: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

Copy link
Member

@dblock dblock left a comment

Choose a reason for hiding this comment

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

Add a test for other defaults? (false, other types?)

Signed-off-by: Craig Perkins <cwperx@amazon.com>
@cwperks
Copy link
Member Author

cwperks commented Mar 22, 2024

Add a test for other defaults? (false, other types?)

@dblock I added an additional test for a feature flag where default value is false.

While its not strictly enforced, due to the presence of methods like isEnabled, feature flags are exclusively boolean settings.

Copy link
Contributor

❌ Gradle check result for ea21ee8: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

@dblock
Copy link
Member

dblock commented Mar 22, 2024

❌ Gradle check result for ea21ee8: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

@cwperks looks like org.opensearch.common.util.FeatureFlagTests.testBooleanFeatureFlagWithDefaultSetToTrue failed.

Signed-off-by: Craig Perkins <cwperx@amazon.com>
@cwperks
Copy link
Member Author

cwperks commented Mar 22, 2024

@cwperks looks like org.opensearch.common.util.FeatureFlagTests.testBooleanFeatureFlagWithDefaultSetToTrue failed.

@dblock I pushed another commit to handle the case when FeatureFlag initialization is called with empty settings where it can disregard defaults.

There are a lot of static variables and methods in this class which can make it unpredictable during the gradle check.

Signed-off-by: Craig Perkins <cwperx@amazon.com>
Copy link
Contributor

❌ Gradle check result for c8885f9: FAILURE

Please examine the workflow log, locate, and copy-paste the failure(s) below, then iterate to green. Is the failure a flaky test unrelated to your change?

Signed-off-by: Craig Perkins <cwperx@amazon.com>
Copy link
Contributor

✅ Gradle check result for 768e161: SUCCESS

Copy link
Contributor

✅ Gradle check result for 565109e: SUCCESS

Copy link

codecov bot commented Mar 22, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 71.36%. Comparing base (b15cb0c) to head (565109e).
Report is 81 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff              @@
##               main   #12849      +/-   ##
============================================
- Coverage     71.42%   71.36%   -0.06%     
- Complexity    59978    60254     +276     
============================================
  Files          4985     5011      +26     
  Lines        282275   283678    +1403     
  Branches      40946    41119     +173     
============================================
+ Hits         201603   202456     +853     
- Misses        63999    64427     +428     
- Partials      16673    16795     +122     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@dblock dblock merged commit 12f1487 into opensearch-project:main Mar 25, 2024
30 checks passed
@dblock dblock added the backport 2.x Backport to 2.x branch label Mar 25, 2024
@opensearch-trigger-bot
Copy link
Contributor

The backport to 2.x failed:

The process '/usr/bin/git' failed with exit code 128

To backport manually, run these commands in your terminal:

# Navigate to the root of your repository
cd $(git rev-parse --show-toplevel)
# Fetch latest updates from GitHub
git fetch
# Create a new working tree
git worktree add ../.worktrees/OpenSearch/backport-2.x 2.x
# Navigate to the new working tree
pushd ../.worktrees/OpenSearch/backport-2.x
# Create a new branch
git switch --create backport/backport-12849-to-2.x
# Cherry-pick the merged commit of this pull request and resolve the conflicts
git cherry-pick -x --mainline 1 12f1487cf8e3d28fa0ec99aba435099aeba904ad
# Push it to GitHub
git push --set-upstream origin backport/backport-12849-to-2.x
# Go back to the original working tree
popd
# Delete the working tree
git worktree remove ../.worktrees/OpenSearch/backport-2.x

Then, create a pull request where the base branch is 2.x and the compare/head branch is backport/backport-12849-to-2.x.

@cwperks
Copy link
Member Author

cwperks commented Mar 25, 2024

I will open a backport for this

cwperks added a commit to cwperks/OpenSearch that referenced this pull request Mar 25, 2024
…pensearch-project#12849)

* Fix issue with feature flags passed as system props where default value was not being honored

Signed-off-by: Craig Perkins <craig5008@gmail.com>

* Add CHANGELOG entry

Signed-off-by: Craig Perkins <craig5008@gmail.com>

* Add test for default value of false

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Fix issue when empty settings passed in initialization

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Get actual value from settings and default from ff setting

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Add test with non-empty setting initialization

Signed-off-by: Craig Perkins <cwperx@amazon.com>

---------

Signed-off-by: Craig Perkins <craig5008@gmail.com>
Signed-off-by: Craig Perkins <cwperx@amazon.com>
(cherry picked from commit 12f1487)
@cwperks
Copy link
Member Author

cwperks commented Mar 25, 2024

Opened up a backport here: #12912

I'm not sure why the automatic backport failed. After cherry-picking, there were no conflicts to resolve.

dblock pushed a commit that referenced this pull request Mar 26, 2024
…12849) (#12912)

* Fix issue with feature flags passed as system props where default value was not being honored

Signed-off-by: Craig Perkins <craig5008@gmail.com>

* Add CHANGELOG entry

Signed-off-by: Craig Perkins <craig5008@gmail.com>

* Add test for default value of false

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Fix issue when empty settings passed in initialization

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Get actual value from settings and default from ff setting

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Add test with non-empty setting initialization

Signed-off-by: Craig Perkins <cwperx@amazon.com>

---------

Signed-off-by: Craig Perkins <craig5008@gmail.com>
Signed-off-by: Craig Perkins <cwperx@amazon.com>
(cherry picked from commit 12f1487)
shiv0408 pushed a commit to Gaurav614/OpenSearch that referenced this pull request Apr 25, 2024
…pensearch-project#12849)

* Fix issue with feature flags passed as system props where default value was not being honored

Signed-off-by: Craig Perkins <craig5008@gmail.com>

* Add CHANGELOG entry

Signed-off-by: Craig Perkins <craig5008@gmail.com>

* Add test for default value of false

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Fix issue when empty settings passed in initialization

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Get actual value from settings and default from ff setting

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Add test with non-empty setting initialization

Signed-off-by: Craig Perkins <cwperx@amazon.com>

---------

Signed-off-by: Craig Perkins <craig5008@gmail.com>
Signed-off-by: Craig Perkins <cwperx@amazon.com>
Signed-off-by: Shivansh Arora <hishiv@amazon.com>
harshavamsi pushed a commit to harshavamsi/OpenSearch that referenced this pull request Apr 29, 2024
…pensearch-project#12849)

* Fix issue with feature flags passed as system props where default value was not being honored

Signed-off-by: Craig Perkins <craig5008@gmail.com>

* Add CHANGELOG entry

Signed-off-by: Craig Perkins <craig5008@gmail.com>

* Add test for default value of false

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Fix issue when empty settings passed in initialization

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Get actual value from settings and default from ff setting

Signed-off-by: Craig Perkins <cwperx@amazon.com>

* Add test with non-empty setting initialization

Signed-off-by: Craig Perkins <cwperx@amazon.com>

---------

Signed-off-by: Craig Perkins <craig5008@gmail.com>
Signed-off-by: Craig Perkins <cwperx@amazon.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport 2.x Backport to 2.x branch backport-failed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants