Adding Cluster Endpoints for search failures and refactoring document status counters#19115
Conversation
Signed-off-by: Anthony Leong <aj.leong623@gmail.com>
|
❌ Gradle check result for ab74705: 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: Anthony Leong <aj.leong623@gmail.com>
|
❌ Gradle check result for ad9e107: 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: Anthony Leong <aj.leong623@gmail.com>
|
❌ Gradle check result for 9e3af03: 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: Anthony Leong <aj.leong623@gmail.com>
|
❌ Gradle check result for 7e9374a: 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: Anthony Leong <aj.leong623@gmail.com>
Signed-off-by: Anthony Leong <aj.leong623@gmail.com>
|
❌ Gradle check result for a345b21: 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: Anthony Leong <aj.leong623@gmail.com>
|
❌ Gradle check result for ae2c661: 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: Anthony Leong <aj.leong623@gmail.com>
Signed-off-by: Anthony Leong <aj.leong623@gmail.com>
|
❌ Gradle check result for c9ad00b: 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: Anthony Leong <aj.leong623@gmail.com>
|
❌ Gradle check result for 32a2fae: 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: Anthony Leong <aj.leong623@gmail.com>
server/src/main/java/org/opensearch/action/admin/indices/stats/AbstractStatusStats.java
Show resolved
Hide resolved
server/src/main/java/org/opensearch/action/admin/indices/stats/StatusCounterStats.java
Show resolved
Hide resolved
Signed-off-by: Anthony Leong <aj.leong623@gmail.com>
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
server/src/main/java/org/opensearch/action/admin/indices/stats/StatusCounterStats.java (1)
64-102: Guard nullable inner stats in snapshot/serialization to avoid NPEsBecause
docStatusStatsandsearchResponseStatusStatsare annotated@Nullableand can legitimately benull(e.g., when deserialized from nodes < 3.4.0 or via the 2‑arg ctor), the current implementations will throw:
writeTo(...)callsdocStatusStats.getSnapshot()/searchResponseStatusStats.getSnapshot()unconditionally.toXContent(...)does the same.getSnapshot()assumes both source fields are non‑null, relying on theiradd(...)to tolerate null arguments; it’s safer and clearer to guard here as well.This can surface as NPEs when serializing node stats for mixed‑version clusters or when callers intentionally pass
nullinto the constructor, which is both user‑visible and hard to diagnose.Consider treating
nullas “no data” for that component and guarding accordingly:@@ /** * Gets a snapshot of the current state of the REST status counters. */ public StatusCounterStats getSnapshot() { - StatusCounterStats stats = new StatusCounterStats(); - stats.getDocStatusStats().add(docStatusStats); - stats.getSearchResponseStatusStats().add(searchResponseStatusStats); - return stats; + StatusCounterStats stats = new StatusCounterStats(); + if (docStatusStats != null) { + stats.getDocStatusStats().add(docStatusStats); + } + if (searchResponseStatusStats != null) { + stats.getSearchResponseStatusStats().add(searchResponseStatusStats); + } + return stats; } @@ @Override public void writeTo(StreamOutput out) throws IOException { if (out.getVersion().onOrAfter(Version.V_3_4_0)) { - out.writeOptionalWriteable(docStatusStats.getSnapshot()); - out.writeOptionalWriteable(searchResponseStatusStats.getSnapshot()); + out.writeOptionalWriteable(docStatusStats == null ? null : docStatusStats.getSnapshot()); + out.writeOptionalWriteable( + searchResponseStatusStats == null ? null : searchResponseStatusStats.getSnapshot() + ); } } @@ @Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(Fields.STATUS_COUNTER); - docStatusStats.getSnapshot().toXContent(builder, params); - searchResponseStatusStats.getSnapshot().toXContent(builder, params); + if (docStatusStats != null) { + docStatusStats.getSnapshot().toXContent(builder, params); + } + if (searchResponseStatusStats != null) { + searchResponseStatusStats.getSnapshot().toXContent(builder, params); + } builder.endObject(); return builder; }This keeps the wire/XContent format stable while honoring the
@Nullablecontract and avoiding NPEs in mixed‑version or partially‑initialized scenarios.
🧹 Nitpick comments (2)
libs/core/src/main/java/org/opensearch/core/rest/RestStatus.java (2)
539-550: Consider returningStatusTypeinstead ofStringfor type safety.The method currently returns
Stringby callingStatusType.toString(), which reduces type safety. Returning theStatusTypeenum directly would provide:
- Compile-time type checking
- Better IDE support and autocompletion
- Ability to use switch statements
- Protection against typos in string comparisons
Callers can still convert to String when needed by calling
.toString()themselves.Apply this diff to return the enum type:
- public String getStatusType() { + public StatusType getStatusType() { int family = getStatusFamilyCode(); if (family <= 3) { - return StatusType.SUCCESS.toString(); + return StatusType.SUCCESS; } else if (family == 4) { // 4xx errors correspond with errors on the client side - return StatusType.USER_ERROR.toString(); + return StatusType.USER_ERROR; } else { // 5xx errors correspond with errors on the systems side - return StatusType.SYSTEM_FAILURE.toString(); + return StatusType.SYSTEM_FAILURE; } }
541-548: Replace magic numbers with named constants.As previously suggested by kaushalmahi12, the numeric values
3and4should be replaced with well-defined constants for better readability and maintainability.Consider defining constants at the class level:
private static final int SUCCESS_FAMILY_MAX = 3; private static final int CLIENT_ERROR_FAMILY = 4;Then apply this diff:
public StatusType getStatusType() { int family = getStatusFamilyCode(); - if (family <= 3) { + if (family <= SUCCESS_FAMILY_MAX) { return StatusType.SUCCESS; - } else if (family == 4) { + } else if (family == CLIENT_ERROR_FAMILY) { // 4xx errors correspond with errors on the client side return StatusType.USER_ERROR; } else { // 5xx errors correspond with errors on the systems side return StatusType.SYSTEM_FAILURE; } }Based on learnings, a previous reviewer has flagged this concern.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
libs/core/src/main/java/org/opensearch/core/rest/RestStatus.java(1 hunks)server/src/main/java/org/opensearch/action/admin/indices/stats/DocStatusStats.java(1 hunks)server/src/main/java/org/opensearch/action/admin/indices/stats/SearchResponseStatusStats.java(1 hunks)server/src/main/java/org/opensearch/action/admin/indices/stats/StatusCounterStats.java(1 hunks)server/src/main/java/org/opensearch/action/search/TransportSearchAction.java(7 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- server/src/main/java/org/opensearch/action/admin/indices/stats/DocStatusStats.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (20)
- GitHub Check: gradle-check
- GitHub Check: precommit (21, windows-2025, true)
- GitHub Check: precommit (21, macos-15-intel)
- GitHub Check: precommit (21, macos-15)
- GitHub Check: precommit (25, ubuntu-24.04-arm)
- GitHub Check: precommit (21, ubuntu-24.04-arm)
- GitHub Check: precommit (21, windows-latest)
- GitHub Check: precommit (25, macos-15)
- GitHub Check: precommit (25, macos-15-intel)
- GitHub Check: precommit (25, ubuntu-latest)
- GitHub Check: precommit (21, ubuntu-latest)
- GitHub Check: precommit (25, windows-latest)
- GitHub Check: detect-breaking-change
- GitHub Check: assemble (25, ubuntu-latest)
- GitHub Check: assemble (25, ubuntu-24.04-arm)
- GitHub Check: assemble (25, windows-latest)
- GitHub Check: assemble (21, ubuntu-latest)
- GitHub Check: assemble (21, ubuntu-24.04-arm)
- GitHub Check: assemble (21, windows-latest)
- GitHub Check: Analyze (java)
🔇 Additional comments (2)
server/src/main/java/org/opensearch/action/admin/indices/stats/SearchResponseStatusStats.java (1)
25-94: SearchResponseStatusStats implementation looks sound and consistent with AbstractStatusStatsConstructors, aggregation (
add/inc), snapshotting, andtoXContent/writeToall align with the intended LongAdder-based counter pattern and appear thread‑safe and correct for coordinator‑side search status tracking.server/src/main/java/org/opensearch/action/search/TransportSearchAction.java (1)
173-234: Search status tracking wrapper correctly composes with cancellation and tracingThe new
indicesServicedependency and thesearchStatusStatsUpdateListenerindoExecuteare wired in a reasonable spot:
- The original listener is first wrapped with
TimeoutTaskCancellationUtility(whentaskis cancellable), so timeout/cancellation semantics are preserved.- The stats wrapper sits on top and records both successful responses (
searchResponse.status()) and failures (ExceptionsHelper.status(e)) before delegating, ensuring all terminal outcomes get counted at the coordinator.- The wrapper is passed as
originalListenerintoexecuteRequest, so downstream tracing/rewriting logic remains unchanged apart from the additional counter increments.Assuming
indicesService.getSearchResponseStatusStats().inc(...)never throws, this should give you robust per‑node search status metrics without impacting search behavior.Also applies to: 320-353
libs/core/src/main/java/org/opensearch/core/rest/RestStatus.java
Outdated
Show resolved
Hide resolved
Signed-off-by: Anthony Leong <aj.leong623@gmail.com>
cwperks
left a comment
There was a problem hiding this comment.
Only minor typos remaining. Approving this PR. Any minor comments can be either pushed in another commit or a separate PR.
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (2)
server/src/main/java/org/opensearch/indices/NodeIndicesStats.java (2)
109-125: Deprecation is good; consider pointing callers to the new overloadsMarking the legacy constructors as
@Deprecated(since = "3.4.0")is appropriate. To make migration clearer for users of this public API, consider adding a brief note in the Javadoc for each deprecated ctor indicating that callers should switch to the corresponding overload that acceptsStatusCounterStats.Also applies to: 163-194
127-155: Constructor overloads duplicate aggregation logic; consider a shared helperBoth new constructors that accept
StatusCounterStatsre‑implement the same aggregation pattern used in the existing ctors (iterating shard stats, adding intostats, then wiringSearchRequestStats). The implementations themselves look correct and consistent, but this duplication across four ctors makes future changes to the aggregation path easier to get wrong.Consider extracting a private helper (e.g.,
initStats(CommonStats oldStats, Map<Index, List<IndexShardStats>> statsByShard, SearchRequestStats searchRequestStats)) and another small helper for assigningstatusCounterStats, and calling those from each ctor to centralize the logic.Also applies to: 196-235
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
server/src/main/java/org/opensearch/indices/NodeIndicesStats.java(8 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (20)
- GitHub Check: gradle-check
- GitHub Check: precommit (25, windows-latest)
- GitHub Check: precommit (21, windows-2025, true)
- GitHub Check: precommit (21, ubuntu-latest)
- GitHub Check: precommit (25, macos-15-intel)
- GitHub Check: precommit (21, ubuntu-24.04-arm)
- GitHub Check: precommit (25, ubuntu-24.04-arm)
- GitHub Check: precommit (21, macos-15-intel)
- GitHub Check: precommit (21, windows-latest)
- GitHub Check: precommit (25, macos-15)
- GitHub Check: precommit (25, ubuntu-latest)
- GitHub Check: precommit (21, macos-15)
- GitHub Check: assemble (21, ubuntu-24.04-arm)
- GitHub Check: assemble (25, ubuntu-latest)
- GitHub Check: assemble (21, ubuntu-latest)
- GitHub Check: assemble (25, ubuntu-24.04-arm)
- GitHub Check: assemble (21, windows-latest)
- GitHub Check: assemble (25, windows-latest)
- GitHub Check: Analyze (java)
- GitHub Check: detect-breaking-change
🔇 Additional comments (4)
server/src/main/java/org/opensearch/indices/NodeIndicesStats.java (4)
39-39: StatusCounterStats wiring into class state looks consistentThe new import and protected
statusCounterStatsfield integrate the status counters cleanly intoNodeIndicesStats, and leaving the field nullable matches how it’s used later (serialization/XContent guarded by null checks). No issues here.Also applies to: 84-84
97-102: Version‑gated optional serialization is symmetric and null‑safeThe new read/write logic for
StatusCounterStats:
- Gates on
Version.V_3_4_0on bothStreamInputandStreamOutput.- Uses an explicit boolean flag to represent presence before constructing/deserializing the object.
- Avoids emitting extra bytes for pre‑3.4 peers and avoids NPE when
statusCounterStatsis absent.This matches the pattern used elsewhere for optional fields and addresses prior feedback about encoding presence explicitly.
Also applies to: 384-389
363-366: Getter for StatusCounterStats matches existing patternsThe new
@Nullable getStatusCounterStats()accessor is straightforward and consistent with the other stats getters on this class (nullable, simple field return). No changes needed.
438-440: XContent emission of StatusCounterStats is correctly guardedEmitting
statusCounterStats.toXContent(...)only when the field is non‑null ensures backward compatibility for nodes or code paths that don’t yet populate these counters, while still placing the new data alongside the existing node‑levelindicesstats as intended. This integration looks correct.
|
❌ Gradle check result for 228288a: 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, I can push the typo fixes in the pr in another commit. |
|
❌ Gradle check result for a606dbb: 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 1969b35: 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? |
|
Hold on. Some of the tests are not passing now, for some reason. I can look into why that is first before merging. |
Signed-off-by: Anthony Leong <aj.leong623@gmail.com>
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
rest-api-spec/src/main/resources/rest-api-spec/test/nodes.stats/11_indices_metrics.yml (1)
188-217: Consider consolidating the duplicated test block forsearch_response_status.The new "Metric - indexing search_response_status" block (lines 188–217) mirrors the structure and setup of the preceding "Metric - indexing doc_status" block, differing only in the specific
status_counterfield assertion at the end. Both blocks query the same metric (metric: indices, index_metric: indexing) and verify nearly identical false/true conditions for other metrics.If both
doc_statusandsearch_response_statusare expected to coexist in the same response, consider whether a single test block with multiple assertions for both fields would reduce duplication and improve maintainability:- is_true: nodes.$node_id.indices.status_counter - is_true: nodes.$node_id.indices.status_counter.doc_status - is_true: nodes.$node_id.indices.status_counter.search_response_statusAlternatively, if the intent is to test them independently, document the rationale or consider using YAML anchors to reduce copy-paste.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
rest-api-spec/src/main/resources/rest-api-spec/test/nodes.stats/11_indices_metrics.yml(7 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (19)
- GitHub Check: gradle-check
- GitHub Check: assemble (25, ubuntu-latest)
- GitHub Check: assemble (21, ubuntu-24.04-arm)
- GitHub Check: assemble (25, ubuntu-24.04-arm)
- GitHub Check: assemble (21, windows-latest)
- GitHub Check: assemble (25, windows-latest)
- GitHub Check: assemble (21, ubuntu-latest)
- GitHub Check: detect-breaking-change
- GitHub Check: precommit (25, macos-15-intel)
- GitHub Check: precommit (21, windows-2025, true)
- GitHub Check: precommit (25, windows-latest)
- GitHub Check: precommit (25, ubuntu-24.04-arm)
- GitHub Check: precommit (21, macos-15-intel)
- GitHub Check: precommit (25, macos-15)
- GitHub Check: precommit (25, ubuntu-latest)
- GitHub Check: precommit (21, macos-15)
- GitHub Check: precommit (21, windows-latest)
- GitHub Check: precommit (21, ubuntu-latest)
- GitHub Check: Analyze (java)
🔇 Additional comments (1)
rest-api-spec/src/main/resources/rest-api-spec/test/nodes.stats/11_indices_metrics.yml (1)
3-6: Verify YAML version string format.The skip version fields use a leading space in the string value (e.g.,
" - 3.3.99"). Confirm that this format is intentional and correctly parsed by the test framework. If the space is unintended, the format should be"- 3.3.99"without the leading space.Also applies to: 34-37, 65-68, 96-99, 127-130, 158-160
Signed-off-by: Anthony Leong <aj.leong623@gmail.com>
|
It works now! This should be ready. |
… status counters (opensearch-project#19115) * add first changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * test for breaking detection Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * test for breaking detection Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * add changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix compile issues Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix breaking changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix breaking changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * added integration tests Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix null pointer and breaking changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * test runner not found Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * test compilation Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * it should pass Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * refactor doc status Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * refactor doc status Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * refactor doc status Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * rerun Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * skip old versions without status counter Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * updated license Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * keystore test timed out Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * keystore test timed out Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * refactor enum and stat holders Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * applied suggestions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * update conflicts Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * revert merge scheduler config Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * remove duplicate method Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * compile Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * update versions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * comment out doc status Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * add back old doc values Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * remove docstatus again Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * did not run Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * update version rules Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * rerun for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * rerun for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * should be ready Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * coderabbit suggestions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * applied suggestions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * write booleans Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix typos Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * rerun Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * update skip versions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * remove duplicate yml test Signed-off-by: Anthony Leong <aj.leong623@gmail.com> --------- Signed-off-by: Anthony Leong <aj.leong623@gmail.com>
… status counters (opensearch-project#19115) * add first changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * test for breaking detection Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * test for breaking detection Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * add changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix compile issues Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix breaking changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix breaking changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * added integration tests Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix null pointer and breaking changes Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * test runner not found Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * test compilation Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * it should pass Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * refactor doc status Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * refactor doc status Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * refactor doc status Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * rerun Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * skip old versions without status counter Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * updated license Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * keystore test timed out Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * keystore test timed out Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * refactor enum and stat holders Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * applied suggestions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * update conflicts Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * revert merge scheduler config Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * remove duplicate method Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * compile Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * update versions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * comment out doc status Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * add back old doc values Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * remove docstatus again Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * retry for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * did not run Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * update version rules Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * rerun for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * rerun for flaky Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * should be ready Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * spotless Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * coderabbit suggestions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * applied suggestions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * write booleans Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * fix typos Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * rerun Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * update skip versions Signed-off-by: Anthony Leong <aj.leong623@gmail.com> * remove duplicate yml test Signed-off-by: Anthony Leong <aj.leong623@gmail.com> --------- Signed-off-by: Anthony Leong <aj.leong623@gmail.com>
Description
This change is a rebased and cleaned version of another pr #18601
Related Issues
Resolves #18377, resolves #18438
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.
Summary by CodeRabbit
New Features
Bug Fixes
Tests
Chores
Documentation
✏️ Tip: You can customize this high-level summary in your review settings.