-
Notifications
You must be signed in to change notification settings - Fork 1.8k
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
Health api memory optimisation #15492
Health api memory optimisation #15492
Conversation
ec0ffc3
to
4ed3b18
Compare
❌ Gradle check result for ec0ffc3: 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? |
❌ Gradle check result for 4ed3b18: 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? |
4ed3b18
to
ebadf42
Compare
❌ Gradle check result for ebadf42: 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? |
How are breaking backward compatibility when the flag is true ? Isn't this construct only used in |
server/src/main/java/org/opensearch/cluster/health/ClusterIndexHealth.java
Outdated
Show resolved
Hide resolved
server/src/internalClusterTest/java/org/opensearch/cluster/ClusterHealthIT.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterStateHealth.java
Outdated
Show resolved
Hide resolved
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.
Unit tests are missing for all the changes in source code. Can we please cover those for files where we have added custom logic to iterate and compute health?
UTs covering corner cases will help i guess if you can check on coverage once.
server/src/main/java/org/opensearch/action/admin/cluster/health/ClusterHealthResponse.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterIndexHealth.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterIndexHealth.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterShardHealth.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterShardHealth.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterStateHealth.java
Outdated
Show resolved
Hide resolved
server/src/internalClusterTest/java/org/opensearch/cluster/ClusterHealthIT.java
Outdated
Show resolved
Hide resolved
...r/src/main/java/org/opensearch/action/admin/cluster/health/TransportClusterHealthAction.java
Show resolved
Hide resolved
server/src/main/java/org/opensearch/action/admin/cluster/health/ClusterHealthRequest.java
Outdated
Show resolved
Hide resolved
server/src/internalClusterTest/java/org/opensearch/cluster/ClusterHealthIT.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterIndexHealth.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterStateHealth.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/rest/action/admin/cluster/RestClusterHealthAction.java
Outdated
Show resolved
Hide resolved
ebadf42
to
103f468
Compare
103f468
to
ed65482
Compare
❌ Gradle check result for 103f468: 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? |
❌ Gradle check result for 19e5625: 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? |
❌ Gradle check result for 19e5625: 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? |
19e5625
to
3817fcd
Compare
❌ Gradle check result for 3817fcd: 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? |
server/src/main/java/org/opensearch/cluster/health/ClusterIndexHealth.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterShardHealth.java
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterStateHealth.java
Outdated
Show resolved
Hide resolved
server/src/main/java/org/opensearch/cluster/health/ClusterStateHealth.java
Outdated
Show resolved
Hide resolved
Added UTs. |
3817fcd
to
d5c5869
Compare
❌ Gradle check result for d5c5869: null 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? |
d5c5869
to
77338be
Compare
❌ Gradle check result for 77338be: null 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? |
The backport to
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-15492-to-2.x
# Cherry-pick the merged commit of this pull request and resolve the conflicts
git cherry-pick -x --mainline 1 89915b65dc51126189dd42d74c82d2cbac0cb154
# Push it to GitHub
git push --set-upstream origin backport/backport-15492-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 |
The backport to
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.17 2.17
# Navigate to the new working tree
pushd ../.worktrees/OpenSearch/backport-2.17
# Create a new branch
git switch --create backport/backport-15492-to-2.17
# Cherry-pick the merged commit of this pull request and resolve the conflicts
git cherry-pick -x --mainline 1 89915b65dc51126189dd42d74c82d2cbac0cb154
# Push it to GitHub
git push --set-upstream origin backport/backport-15492-to-2.17
# Go back to the original working tree
popd
# Delete the working tree
git worktree remove ../.worktrees/OpenSearch/backport-2.17 Then, create a pull request where the |
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
…gations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
…gations for levels cluster and indices. (#15492) (#15799) Signed-off-by: Swetha Guptha <[email protected]>
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: SwethaGuptha <[email protected]>
…egations for levels cluster and indices. (#15492) (#15802) Signed-off-by: SwethaGuptha <[email protected]>
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
…egations for levels cluster and indices. (opensearch-project#15492) Signed-off-by: Swetha Guptha <[email protected]>
Description
#11684 - on a large cluster the memory allocation of TransportClusterHealthAction is around 33%. Memory/compute requirement of TransportClusterHealthAction is proportional to the number of indices and shards on the cluster. Transport ClusterHealthResponse maintains health objects for individual indices and shards that can increase the memory allocation of this with the growth of indices and shards count. At rest layer, there is a room for optimization for _cluster/health API when request is at cluster/indices level by performing inline aggregations and not creating and maintaing shard health objects.
Changes:
honourClusterHealthLevel
in ClusterHealthRequest to identify if the request paramlevel
should be honored or not when computing health response in TransportClusterHealthAction - Currentlylevel
param is only used at REST layer for generating response from the transport response based on the level requested (usage) and has no meaning at transport layer. This flag will help TransportClusterHealthAction in differentiating if indices/shards level health information is required in the transport response or not. By default this flag is set to false to keep the change backward compatible.Memory allocation 5 min profile of an idle cluster before and after optimisation
Before Optimisation
After Optimisation
Related Issues
Resolves #[Issue number to be closed when this PR is merged]
Check List
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.