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

[grid] retry if no node does support the Capabilities #14986

Merged
merged 7 commits into from
Jan 1, 2025

Conversation

joerg1985
Copy link
Member

@joerg1985 joerg1985 commented Dec 30, 2024

User description

Description

This PR will allow to retry if currently no node does support the Capabilities, this can change over time when a new node registers.

Motivation and Context

When using --drain-after-session-count and a single node which is automatically restarted after shutdown, this PR will allow the pending session request to retry until the node is restarted and healthy again.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • I have read the contributing document.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

PR Type

Bug fix


Description

  • Implements retry mechanism in LocalDistributor when no nodes support requested capabilities
  • Previously, the system would fail immediately if no node supported the capabilities
  • Now it will retry, allowing time for new nodes to register that may support the requested capabilities
  • Particularly useful when using --drain-after-session-count feature with node restarts

Changes walkthrough 📝

Relevant files
Error handling
LocalDistributor.java
Add retry mechanism for unsupported capabilities                 

java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java

  • Added retry logic when no node supports the requested capabilities
  • Updated error message to indicate waiting for node registration
  • +5/-0     

    💡 PR-Agent usage: Comment /help "your question" on any pull request to receive relevant information

    Copy link
    Contributor

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

    ⏱️ Estimated effort to review: 1 🔵⚪⚪⚪⚪
    🧪 No relevant tests
    🔒 No security concerns identified
    ⚡ Recommended focus areas for review

    Retry Logic

    Verify that the retry mechanism does not cause excessive resource consumption or performance issues when waiting for nodes to register. Consider adding a maximum retry limit or timeout.

    // e.g. the last node drained, we have to wait for a new to register
    lastFailure =
        new SessionNotCreatedException(
            "Unable to find a node supporting the desired capabilities");
    retry = true;

    Copy link
    Contributor

    PR Code Suggestions ✨

    Explore these optional code suggestions:

    CategorySuggestion                                                                                                                                    Score
    Possible issue
    Implement retry limits and delays to prevent infinite loops when waiting for node registration

    Add a maximum retry limit and delay between retries to prevent infinite loops and
    resource exhaustion when waiting for node registration.

    java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java [584-594]

    +int retryCount = 0;
    +final int MAX_RETRIES = 3;
    +final long RETRY_DELAY_MS = 1000;
     boolean retry = false;
     SessionNotCreatedException lastFailure =
         new SessionNotCreatedException("Unable to create new session");
     for (Capabilities caps : request.getDesiredCapabilities()) {
       if (isNotSupported(caps)) {
    -    lastFailure =
    -        new SessionNotCreatedException(
    -            "Unable to find a node supporting the desired capabilities");
    +    if (retryCount >= MAX_RETRIES) {
    +      lastFailure = new SessionNotCreatedException(
    +          "Max retries exceeded. Unable to find a node supporting the desired capabilities");
    +      break;
    +    }
    +    retryCount++;
    +    try {
    +      Thread.sleep(RETRY_DELAY_MS);
    +    } catch (InterruptedException e) {
    +      Thread.currentThread().interrupt();
    +      break;
    +    }
    +    lastFailure = new SessionNotCreatedException(
    +        String.format("Retry %d/%d: Unable to find a node supporting the desired capabilities",
    +            retryCount, MAX_RETRIES));
         retry = true;
         continue;
       }
    • Apply this suggestion
    Suggestion importance[1-10]: 9

    Why: The suggestion addresses a critical issue by preventing potential infinite loops and resource exhaustion in the retry mechanism. Adding retry limits and delays is essential for system stability and proper error handling when waiting for node registration.

    9

    @joerg1985
    Copy link
    Member Author

    @VietND96 is this a common case when using Kubernetes, when only one node is used?

    Copy link
    Member

    @diemol diemol left a comment

    Choose a reason for hiding this comment

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

    The nodes are not restarted after shutdown. Plus, the rejectUnsupportedCaps configurable value keeps the request in the queue for the configured time. I think this scenario is already covered.

    @joerg1985
    Copy link
    Member Author

    joerg1985 commented Dec 30, 2024

    Some more words to the scenario, the node process is external monitored and restarted after shutdown, e.g. via container heath check.

    The rejectUnsupportedCaps mechanism does not work here, at the time the NewSessionRunnable is executed the nodes might be different than later on when session is about to be started. So the result of isNotSupported will flip from false to true and we run into this if. I guess this is the reason for having the if statement here.

    I have stress test for the scenario, but it is currently failing due to this issue and #14987. It might be best to add this test to the PR as soon as #14987 is merged, to reproduce it and than look at it.

    @joerg1985
    Copy link
    Member Author

    @diemol i have created the test org.openqa.selenium.grid.distributor.DrainTest.sessionIsNotRejectedWhenNodeDrains to provoke it. The test will have two sessions in the queue and a single node with drain-after-session-count 1 is started in a loop. This will sooner or later (on my system 1 to 6 iterations) run into the issue.

    As soon as the retry = true line added in this pr is removed the test will fail with: java.util.concurrent.ExecutionException: org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: Could not start a new session. Unable to find a node supporting the desired capabilities

    PS: the /readyz endpoint has been changed to return 200, this will allow to use the UrlChecker and have a consistent behaviour compared to the hub.

    Copy link
    Contributor

    qodo-merge-pro bot commented Dec 30, 2024

    CI Failure Feedback 🧐

    (Checks updated until commit 6c43f65)

    Action: Test / All RBE tests

    Failed stage: Run Bazel [❌]

    Failed test name: DrainTest

    Failure summary:

    The action failed because multiple instances of the DrainTest failed across different
    configurations:

  • DrainTest (base test)
  • DrainTest-chrome
  • DrainTest-chrome-remote
  • DrainTest-edge
  • DrainTest-edge-remote
  • DrainTest-remote

    The test failures appear to be related to timeouts, with test runs taking between 150-420 seconds
    before failing. The DrainTest is part of Selenium's grid distributor functionality which handles
    browser session distribution.

  • Relevant error logs:
    1:  ##[group]Operating System
    2:  Ubuntu
    ...
    
    970:  Package 'php-symfony-debug-bundle' is not installed, so not removed
    971:  Package 'php-symfony-dependency-injection' is not installed, so not removed
    972:  Package 'php-symfony-deprecation-contracts' is not installed, so not removed
    973:  Package 'php-symfony-discord-notifier' is not installed, so not removed
    974:  Package 'php-symfony-doctrine-bridge' is not installed, so not removed
    975:  Package 'php-symfony-doctrine-messenger' is not installed, so not removed
    976:  Package 'php-symfony-dom-crawler' is not installed, so not removed
    977:  Package 'php-symfony-dotenv' is not installed, so not removed
    978:  Package 'php-symfony-error-handler' is not installed, so not removed
    ...
    
    1868:  AccessController.doPrivileged(
    1869:  ^
    1870:  (13:37:32) �[32mINFO: �[0mFrom Compiling src/google/protobuf/compiler/rust/relative_path.cc [for tool]:
    1871:  external/protobuf~/src/google/protobuf/compiler/rust/relative_path.cc: In member function ‘std::string google::protobuf::compiler::rust::RelativePath::Relative(const google::protobuf::compiler::rust::RelativePath&) const’:
    1872:  external/protobuf~/src/google/protobuf/compiler/rust/relative_path.cc:65:21: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<absl::lts_20240116::string_view>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
    1873:  65 |   for (int i = 0; i < current_segments.size(); ++i) {
    1874:  |                   ~~^~~~~~~~~~~~~~~~~~~~~~~~~
    1875:  (13:37:32) �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (71 source files):
    1876:  java/src/org/openqa/selenium/remote/ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1877:  private final ErrorCodes errorCodes;
    1878:  ^
    1879:  java/src/org/openqa/selenium/remote/ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1880:  this.errorCodes = new ErrorCodes();
    1881:  ^
    1882:  java/src/org/openqa/selenium/remote/ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1883:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    1884:  ^
    1885:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1886:  ErrorCodes errorCodes = new ErrorCodes();
    1887:  ^
    1888:  java/src/org/openqa/selenium/remote/Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1889:  ErrorCodes errorCodes = new ErrorCodes();
    1890:  ^
    1891:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1892:  response.setStatus(ErrorCodes.SUCCESS);
    1893:  ^
    1894:  java/src/org/openqa/selenium/remote/ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1895:  response.setState(ErrorCodes.SUCCESS_STRING);
    1896:  ^
    1897:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1898:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    1899:  ^
    1900:  java/src/org/openqa/selenium/remote/W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1901:  new ErrorCodes().getExceptionType((String) rawError);
    1902:  ^
    1903:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1904:  private final ErrorCodes errorCodes = new ErrorCodes();
    1905:  ^
    1906:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1907:  private final ErrorCodes errorCodes = new ErrorCodes();
    1908:  ^
    1909:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:55: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1910:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    1911:  ^
    1912:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:101: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1913:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    1914:  ^
    1915:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:103: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1916:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    1917:  ^
    1918:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:117: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1919:  response.setStatus(ErrorCodes.SUCCESS);
    1920:  ^
    1921:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:118: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1922:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    1923:  ^
    1924:  java/src/org/openqa/selenium/remote/codec/AbstractHttpResponseCodec.java:124: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1925:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    1926:  ^
    1927:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1928:  private final ErrorCodes errorCodes = new ErrorCodes();
    1929:  ^
    1930:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1931:  private final ErrorCodes errorCodes = new ErrorCodes();
    1932:  ^
    1933:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:93: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1934:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    1935:  ^
    1936:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:98: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1937:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    1938:  ^
    1939:  java/src/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodec.java:145: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    1940:  response.setStatus(ErrorCodes.SUCCESS);
    ...
    
    2039:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/click_submit_test.html -> javascript/atoms/test/click_submit_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2040:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/click_test.html -> javascript/atoms/test/click_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2041:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/clientrect_test.html -> javascript/atoms/test/clientrect_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2042:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/color_test.html -> javascript/atoms/test/color_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2043:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/dom_test.html -> javascript/atoms/test/dom_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2044:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/drag_test.html -> javascript/atoms/test/drag_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2045:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/enabled_test.html -> javascript/atoms/test/enabled_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2046:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/enter_submit_test.html -> javascript/atoms/test/enter_submit_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2047:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/error_test.html -> javascript/atoms/test/error_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    ...
    
    2122:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/type_test.html -> javascript/atoms/test/type_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2123:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/useragent_quirks_test.html -> javascript/atoms/test/useragent_quirks_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2124:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/useragent_test.html -> javascript/atoms/test/useragent_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2125:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/useragent_test.js -> javascript/atoms/test/useragent_test.js obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2126:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/window_scroll_into_view_test.html -> javascript/atoms/test/window_scroll_into_view_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2127:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/window_scroll_test.html -> javascript/atoms/test/window_scroll_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2128:  (13:37:40) �[35mWARNING: �[0m/home/runner/work/selenium/selenium/javascript/atoms/BUILD.bazel:398:19: runfiles symlink javascript/atoms/test/window_size_test.html -> javascript/atoms/test/window_size_test.html obscured by javascript/atoms/test -> bazel-out/k8-fastbuild/bin/javascript/atoms/test
    2129:  (13:37:44) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.jar (1 source file):
    2130:  java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.java:26: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2131:  import static org.openqa.selenium.remote.ErrorCodes.METHOD_NOT_ALLOWED;
    2132:  ^
    2133:  java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.java:55: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2134:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.SUCCESS);
    2135:  ^
    2136:  java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.java:81: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2137:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2138:  ^
    2139:  java/test/org/openqa/selenium/remote/codec/w3c/W3CHttpResponseCodecTest.java:107: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2140:  assertThat(decoded.getStatus()).isEqualTo(ErrorCodes.UNHANDLED_ERROR);
    2141:  ^
    2142:  (13:37:44) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/json/JsonTest.jar (1 source file):
    2143:  java/test/org/openqa/selenium/json/JsonTest.java:430: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2144:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    2145:  ^
    2146:  java/test/org/openqa/selenium/json/JsonTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2147:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(0));
    2148:  ^
    2149:  java/test/org/openqa/selenium/json/JsonTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2150:  assertThat(response.getState()).isEqualTo(new ErrorCodes().toState(32));
    2151:  ^
    2152:  (13:37:44) �[32mINFO: �[0mFrom Installing external/rules_ruby~~ruby~bundle/rb/vendor/cache/bundler-2.5.6.gem (@@rules_ruby~~ruby~bundle//:bundler-2.5.6):
    2153:  Successfully installed bundler-2.5.6
    2154:  1 gem installed
    2155:  (13:37:44) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/ErrorHandlerTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2156:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:79: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2157:  handler.throwIfResponseFailed(createResponse(ErrorCodes.SUCCESS), 100);
    2158:  ^
    2159:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:85: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2160:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2161:  ^
    2162:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:86: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2163:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2164:  ^
    2165:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:87: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2166:  assertThrowsCorrectExceptionType(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2167:  ^
    2168:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:88: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2169:  assertThrowsCorrectExceptionType(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2170:  ^
    2171:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:90: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2172:  ErrorCodes.METHOD_NOT_ALLOWED, UnsupportedCommandException.class);
    2173:  ^
    2174:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:92: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2175:  ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2176:  ^
    2177:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:94: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2178:  ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2179:  ^
    2180:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:95: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2181:  assertThrowsCorrectExceptionType(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2182:  ^
    2183:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:107: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2184:  Response response = createResponse(ErrorCodes.UNHANDLED_ERROR);
    2185:  ^
    2186:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:120: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2187:  createResponse(ErrorCodes.UNHANDLED_ERROR, "boom"), 123))
    2188:  ^
    2189:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:133: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2190:  createResponse(ErrorCodes.UNHANDLED_ERROR, ImmutableMap.of("message", "boom")),
    2191:  ^
    2192:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:147: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2193:  ErrorCodes.UNHANDLED_ERROR,
    2194:  ^
    2195:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:167: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2196:  ErrorCodes.UNHANDLED_ERROR,
    2197:  ^
    2198:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:193: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2199:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2200:  ^
    2201:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:214: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2202:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2203:  ^
    2204:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:248: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2205:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2206:  ^
    2207:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:280: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2208:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2209:  ^
    2210:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:308: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2211:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2212:  ^
    2213:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:327: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2214:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2215:  ^
    2216:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:355: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2217:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2218:  ^
    2219:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:394: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2220:  createResponse(ErrorCodes.UNHANDLED_ERROR, data), 123))
    2221:  ^
    2222:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:426: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2223:  createResponse(ErrorCodes.UNHANDLED_ERROR, toMap(serverError)), 123))
    2224:  ^
    2225:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:435: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2226:  exceptions.put(ErrorCodes.NO_SUCH_SESSION, NoSuchSessionException.class);
    2227:  ^
    2228:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:436: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2229:  exceptions.put(ErrorCodes.NO_SUCH_ELEMENT, NoSuchElementException.class);
    2230:  ^
    2231:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:437: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2232:  exceptions.put(ErrorCodes.NO_SUCH_FRAME, NoSuchFrameException.class);
    2233:  ^
    2234:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:438: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2235:  exceptions.put(ErrorCodes.UNKNOWN_COMMAND, UnsupportedCommandException.class);
    2236:  ^
    2237:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:439: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2238:  exceptions.put(ErrorCodes.STALE_ELEMENT_REFERENCE, StaleElementReferenceException.class);
    2239:  ^
    2240:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:440: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2241:  exceptions.put(ErrorCodes.INVALID_ELEMENT_STATE, InvalidElementStateException.class);
    2242:  ^
    2243:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:441: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2244:  exceptions.put(ErrorCodes.UNHANDLED_ERROR, WebDriverException.class);
    2245:  ^
    2246:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:442: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2247:  exceptions.put(ErrorCodes.JAVASCRIPT_ERROR, JavascriptException.class);
    2248:  ^
    2249:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:443: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2250:  exceptions.put(ErrorCodes.XPATH_LOOKUP_ERROR, InvalidSelectorException.class);
    2251:  ^
    2252:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:444: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2253:  exceptions.put(ErrorCodes.TIMEOUT, TimeoutException.class);
    2254:  ^
    2255:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:445: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2256:  exceptions.put(ErrorCodes.NO_SUCH_WINDOW, NoSuchWindowException.class);
    2257:  ^
    2258:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:446: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2259:  exceptions.put(ErrorCodes.INVALID_COOKIE_DOMAIN, InvalidCookieDomainException.class);
    2260:  ^
    2261:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:447: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2262:  exceptions.put(ErrorCodes.UNABLE_TO_SET_COOKIE, UnableToSetCookieException.class);
    2263:  ^
    2264:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:448: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2265:  exceptions.put(ErrorCodes.UNEXPECTED_ALERT_PRESENT, UnhandledAlertException.class);
    2266:  ^
    2267:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:449: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2268:  exceptions.put(ErrorCodes.NO_ALERT_PRESENT, NoAlertPresentException.class);
    2269:  ^
    2270:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:450: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2271:  exceptions.put(ErrorCodes.ASYNC_SCRIPT_TIMEOUT, ScriptTimeoutException.class);
    2272:  ^
    2273:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:451: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2274:  exceptions.put(ErrorCodes.INVALID_SELECTOR_ERROR, InvalidSelectorException.class);
    2275:  ^
    2276:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:452: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2277:  exceptions.put(ErrorCodes.SESSION_NOT_CREATED, SessionNotCreatedException.class);
    2278:  ^
    2279:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:453: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2280:  exceptions.put(ErrorCodes.MOVE_TARGET_OUT_OF_BOUNDS, MoveTargetOutOfBoundsException.class);
    2281:  ^
    2282:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:454: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2283:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR, InvalidSelectorException.class);
    2284:  ^
    2285:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:455: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2286:  exceptions.put(ErrorCodes.INVALID_XPATH_SELECTOR_RETURN_TYPER, InvalidSelectorException.class);
    2287:  ^
    2288:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:469: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2289:  ? ErrorCodes.INVALID_SELECTOR_ERROR
    2290:  ^
    2291:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:471: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2292:  assertThat(new ErrorCodes().toStatusCode(e)).isEqualTo(expected);
    2293:  ^
    2294:  java/test/org/openqa/selenium/remote/ErrorHandlerTest.java:483: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2295:  response.setState(new ErrorCodes().toState(status));
    2296:  ^
    2297:  (13:37:45) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/RemotableByTest.jar (1 source file) and running annotation processors (AutoServiceProcessor):
    2298:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2299:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2300:  ^
    2301:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2302:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2303:  ^
    2304:  java/test/org/openqa/selenium/remote/RemotableByTest.java:23: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2305:  import static org.openqa.selenium.remote.ErrorCodes.SUCCESS_STRING;
    2306:  ^
    2307:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2308:  private final ErrorCodes errorCodes = new ErrorCodes();
    2309:  ^
    2310:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2311:  private final ErrorCodes errorCodes = new ErrorCodes();
    2312:  ^
    2313:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2314:  private final ErrorCodes errorCodes = new ErrorCodes();
    2315:  ^
    2316:  java/test/org/openqa/selenium/remote/RemotableByTest.java:45: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2317:  private final ErrorCodes errorCodes = new ErrorCodes();
    ...
    
    2375:  See https://github.com/rubyzip/rubyzip for details. The Changelog also
    2376:  lists other enhancements and bugfixes that have been implemented since
    2377:  version 2.3.0.
    2378:  2 installed gems you directly depend on are looking for funding.
    2379:  Run `bundle fund` for details
    2380:  (13:37:45) �[32mAnalyzing:�[0m 2175 targets (1602 packages loaded, 51011 targets configured)
    2381:  �[32m[7,063 / 7,283]�[0m 259 / 905 tests;�[0m [Prepa] RunBinary rb/lib/selenium/devtools/v130.rb ... (38 actions, 22 running)
    2382:  (13:37:46) �[32mINFO: �[0mFrom Building java/test/org/openqa/selenium/remote/libsmall-tests-test-lib.jar (5 source files) and running annotation processors (AutoServiceProcessor):
    2383:  java/test/org/openqa/selenium/remote/WebDriverFixture.java:170: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    2384:  response.setStatus(new ErrorCodes().toStatus(state, Optional.of(400)));
    ...
    
    2413:  (13:38:46) �[32mINFO: �[0mAnalyzed 2175 targets (1632 packages loaded, 63324 targets configured).
    2414:  (13:38:50) �[32m[13,838 / 14,583]�[0m 1237 / 2175 tests;�[0m Testing //java/test/org/openqa/selenium/bidi/input:DragAndDropTest-spotbugs; 0s remote, remote-cache ... (50 actions, 1 running)
    2415:  (13:38:54) �[32mINFO: �[0mFrom Compiling webdriver-netstandard2.0:
    2416:  bazel-out/k8-fastbuild/bin/dotnet/src/webdriver/cdp/v129/Target/TargetInfo.cs(22,149): warning CS1570: XML comment has badly formed XML -- 'Reference to undefined entity 'q'.'
    2417:  bazel-out/k8-fastbuild/bin/dotnet/src/webdriver/cdp/v130/Target/TargetInfo.cs(22,149): warning CS1570: XML comment has badly formed XML -- 'Reference to undefined entity 'q'.'
    2418:  bazel-out/k8-fastbuild/bin/dotnet/src/webdriver/cdp/v131/Target/TargetInfo.cs(22,149): warning CS1570: XML comment has badly formed XML -- 'Reference to undefined entity 'q'.'
    2419:  dotnet/src/webdriver/BiDi/Modules/Script/RemoteValue.cs(252,35): warning CS8766: Nullability of reference types in return type of 'string? Node.SharedId.get' doesn't match implicitly implemented member 'string ISharedReference.SharedId.get' (possibly because of nullability attributes).
    2420:  dotnet/src/webdriver/VirtualAuth/Credential.cs(120,61): warning CS8604: Possible null reference argument for parameter 'rpId' in 'Credential.Credential(byte[] id, bool isResidentCredential, string rpId, string privateKey, byte[]? userHandle, int signCount)'.
    2421:  dotnet/src/webdriver/WebDriver.cs(765,30): warning CS0618: 'WebDriverResult.ElementNotDisplayed' is obsolete: 'This error status is no longer returned by the WebDriver Specification https://www.w3.org/TR/webdriver2/#errors. Will be removed in 4.30'
    2422:  dotnet/src/webdriver/WebDriver.cs(769,30): warning CS0618: 'WebDriverResult.ElementNotSelectable' is obsolete: 'This error status is no longer returned by the WebDriver Specification https://www.w3.org/TR/webdriver2/#errors. Will be removed in 4.30'
    2423:  dotnet/src/webdriver/WebDriver.cs(772,30): warning CS0618: 'WebDriverResult.NoSuchDocument' is obsolete: 'This error status is no longer returned by the WebDriver Specification https://www.w3.org/TR/webdriver2/#errors. Will be removed in 4.30'
    ...
    
    2428:  dotnet/src/webdriver/BiDi/Modules/Script/RemoteValue.cs(252,35): warning CS8766: Nullability of reference types in return type of 'string? Node.SharedId.get' doesn't match implicitly implemented member 'string ISharedReference.SharedId.get' (possibly because of nullability attributes).
    2429:  (13:39:00) �[32m[14,315 / 15,035]�[0m 1406 / 2175 tests;�[0m Building java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome.jar (1 source file); 9s remote, remote-cache ... (47 actions, 8 running)
    2430:  (13:39:04) �[32mINFO: �[0mFrom Compiling webdriver-net8.0:
    2431:  bazel-out/k8-fastbuild/bin/dotnet/src/webdriver/cdp/v131/Target/TargetInfo.cs(22,149): warning CS1570: XML comment has badly formed XML -- 'Reference to undefined entity 'q'.'
    2432:  bazel-out/k8-fastbuild/bin/dotnet/src/webdriver/cdp/v129/Target/TargetInfo.cs(22,149): warning CS1570: XML comment has badly formed XML -- 'Reference to undefined entity 'q'.'
    2433:  bazel-out/k8-fastbuild/bin/dotnet/src/webdriver/cdp/v130/Target/TargetInfo.cs(22,149): warning CS1570: XML comment has badly formed XML -- 'Reference to undefined entity 'q'.'
    2434:  dotnet/src/webdriver/BiDi/Modules/Script/RemoteValue.cs(252,35): warning CS8766: Nullability of reference types in return type of 'string? Node.SharedId.get' doesn't match implicitly implemented member 'string ISharedReference.SharedId.get' (possibly because of nullability attributes).
    2435:  dotnet/src/webdriver/VirtualAuth/Credential.cs(120,61): warning CS8604: Possible null reference argument for parameter 'rpId' in 'Credential.Credential(byte[] id, bool isResidentCredential, string rpId, string privateKey, byte[]? userHandle, int signCount)'.
    2436:  dotnet/src/webdriver/WebDriver.cs(765,30): warning CS0618: 'WebDriverResult.ElementNotDisplayed' is obsolete: 'This error status is no longer returned by the WebDriver Specification https://www.w3.org/TR/webdriver2/#errors. Will be removed in 4.30'
    2437:  dotnet/src/webdriver/WebDriver.cs(769,30): warning CS0618: 'WebDriverResult.ElementNotSelectable' is obsolete: 'This error status is no longer returned by the WebDriver Specification https://www.w3.org/TR/webdriver2/#errors. Will be removed in 4.30'
    2438:  dotnet/src/webdriver/WebDriver.cs(772,30): warning CS0618: 'WebDriverResult.NoSuchDocument' is obsolete: 'This error status is no longer returned by the WebDriver Specification https://www.w3.org/TR/webdriver2/#errors. Will be removed in 4.30'
    ...
    
    2463:  (13:43:43) �[32m[15,535 / 15,541]�[0m 2169 / 2175 tests;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 270s remote, remote-cache ... (6 actions running)
    2464:  (13:43:58) �[32m[15,535 / 15,541]�[0m 2169 / 2175 tests;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 285s remote, remote-cache ... (6 actions running)
    2465:  (13:44:16) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-edge (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge/test_attempts/attempt_1.log)
    2466:  (13:44:16) �[32m[15,535 / 15,541]�[0m 2169 / 2175 tests;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 303s remote, remote-cache ... (6 actions running)
    2467:  (13:44:23) �[32m[15,535 / 15,541]�[0m 2169 / 2175 tests;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 310s remote, remote-cache ... (6 actions running)
    2468:  (13:44:58) �[32m[15,535 / 15,541]�[0m 2169 / 2175 tests;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 345s remote, remote-cache ... (6 actions running)
    2469:  (13:45:53) �[32m[15,535 / 15,541]�[0m 2169 / 2175 tests;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 400s remote, remote-cache ... (6 actions running)
    2470:  (13:45:53) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-chrome (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome/test.log)
    2471:  �[31m�[1mFAILED: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-chrome (Summary)
    2472:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome/test.log
    2473:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome/test_attempts/attempt_1.log
    2474:  (13:45:53) �[32mINFO: �[0mFrom Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest-chrome:
    2475:  stdout (/home/runner/.bazel/execroot/_main/bazel-out/_tmp/actions/stdout-14496) 72776514 exceeds maximum size of --experimental_ui_max_stdouterr_bytes=1048576 bytes; skipping
    2476:  (13:45:58) �[32m[15,536 / 15,541]�[0m 2170 / 2175 tests, �[31m�[1m1 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 405s remote, remote-cache ... (5 actions running)
    2477:  (13:46:03) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-chrome-remote (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome-remote/test.log)
    2478:  �[31m�[1mFAILED: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-chrome-remote (Summary)
    2479:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome-remote/test.log
    2480:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome-remote/test_attempts/attempt_1.log
    2481:  (13:46:03) �[32mINFO: �[0mFrom Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest-chrome-remote:
    2482:  stdout (/home/runner/.bazel/execroot/_main/bazel-out/_tmp/actions/stdout-14655) 57370325 exceeds maximum size of --experimental_ui_max_stdouterr_bytes=1048576 bytes; skipping
    2483:  (13:46:08) �[32m[15,537 / 15,541]�[0m 2171 / 2175 tests, �[31m�[1m2 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 415s remote, remote-cache ... (4 actions running)
    2484:  (13:46:09) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest/test_attempts/attempt_1.log)
    2485:  (13:46:13) �[32m[15,537 / 15,541]�[0m 2171 / 2175 tests, �[31m�[1m2 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 420s remote, remote-cache ... (4 actions running)
    2486:  (13:46:23) �[32m[15,537 / 15,541]�[0m 2171 / 2175 tests, �[31m�[1m2 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 430s remote, remote-cache ... (4 actions running)
    2487:  (13:46:31) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-remote (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-remote/test_attempts/attempt_1.log)
    2488:  (13:46:31) �[32m[15,537 / 15,541]�[0m 2171 / 2175 tests, �[31m�[1m2 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 438s remote, remote-cache ... (4 actions running)
    2489:  (13:46:38) �[32m[15,537 / 15,541]�[0m 2171 / 2175 tests, �[31m�[1m2 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 445s remote, remote-cache ... (4 actions running)
    2490:  (13:46:44) �[32m[15,537 / 15,541]�[0m 2171 / 2175 tests, �[31m�[1m2 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 451s remote, remote-cache ... (4 actions running)
    2491:  (13:47:40) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-edge (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge/test.log)
    2492:  �[31m�[1mFAILED: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-edge (Summary)
    2493:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge/test.log
    2494:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge/test_attempts/attempt_1.log
    2495:  (13:47:40) �[32mINFO: �[0mFrom Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest-edge:
    2496:  stdout (/home/runner/.bazel/execroot/_main/bazel-out/_tmp/actions/stdout-14809) 80099516 exceeds maximum size of --experimental_ui_max_stdouterr_bytes=1048576 bytes; skipping
    2497:  (13:47:43) �[32m[15,538 / 15,541]�[0m 2172 / 2175 tests, �[31m�[1m3 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 510s remote, remote-cache ... (3 actions running)
    2498:  (13:47:51) �[32m[15,538 / 15,541]�[0m 2172 / 2175 tests, �[31m�[1m3 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 518s remote, remote-cache ... (3 actions running)
    2499:  (13:47:59) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-edge-remote (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge-remote/test.log)
    2500:  �[31m�[1mFAILED: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-edge-remote (Summary)
    2501:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge-remote/test.log
    2502:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge-remote/test_attempts/attempt_1.log
    2503:  (13:47:59) �[32mINFO: �[0mFrom Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest-edge-remote:
    2504:  stdout (/home/runner/.bazel/execroot/_main/bazel-out/_tmp/actions/stdout-14769) 102449555 exceeds maximum size of --experimental_ui_max_stdouterr_bytes=1048576 bytes; skipping
    2505:  (13:48:03) �[32m[15,539 / 15,541]�[0m 2173 / 2175 tests, �[31m�[1m4 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 530s remote, remote-cache ... (2 actions running)
    2506:  (13:48:10) �[32m[15,539 / 15,541]�[0m 2173 / 2175 tests, �[31m�[1m4 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 537s remote, remote-cache ... (2 actions running)
    2507:  (13:48:40) �[32m[15,539 / 15,541]�[0m 2173 / 2175 tests, �[31m�[1m4 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 567s remote, remote-cache ... (2 actions running)
    2508:  (13:49:40) �[32m[15,539 / 15,541]�[0m 2173 / 2175 tests, �[31m�[1m4 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 627s remote, remote-cache ... (2 actions running)
    2509:  (13:50:31) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-remote (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-remote/test.log)
    2510:  �[31m�[1mFAILED: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest-remote (Summary)
    2511:  stdout (/home/runner/.bazel/execroot/_main/bazel-out/_tmp/actions/stdout-14482) 199851226 exceeds maximum size of --experimental_ui_max_stdouterr_bytes=1048576 bytes; skipping
    2512:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-remote/test.log
    2513:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-remote/test_attempts/attempt_1.log
    2514:  (13:50:31) �[32mINFO: �[0mFrom Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest-remote:
    2515:  (13:50:33) �[32m[15,540 / 15,541]�[0m 2174 / 2175 tests, �[31m�[1m5 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 680s remote, remote-cache
    2516:  (13:50:42) �[32m[15,540 / 15,541]�[0m 2174 / 2175 tests, �[31m�[1m5 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 689s remote, remote-cache
    2517:  (13:51:12) �[32m[15,540 / 15,541]�[0m 2174 / 2175 tests, �[31m�[1m5 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 719s remote, remote-cache
    2518:  (13:52:12) �[32m[15,540 / 15,541]�[0m 2174 / 2175 tests, �[31m�[1m5 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 779s remote, remote-cache
    2519:  (13:52:18) �[32m[15,540 / 15,541]�[0m 2174 / 2175 tests, �[31m�[1m5 failed�[0m;�[0m Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest; 785s remote, remote-cache
    2520:  (13:52:18) �[31m�[1mFAIL: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest/test.log)
    2521:  �[31m�[1mFAILED: �[0m//java/test/org/openqa/selenium/grid/distributor:DrainTest (Summary)
    2522:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest/test.log
    2523:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest/test_attempts/attempt_1.log
    2524:  stdout (/home/runner/.bazel/execroot/_main/bazel-out/_tmp/actions/stdout-14468) 230142797 exceeds maximum size of --experimental_ui_max_stdouterr_bytes=1048576 bytes; skipping
    2525:  (13:52:18) �[32mINFO: �[0mFrom Testing //java/test/org/openqa/selenium/grid/distributor:DrainTest:
    2526:  (13:52:18) �[32mINFO: �[0mFound 2175 test targets...
    2527:  (13:52:19) �[32mINFO: �[0mElapsed time: 998.600s, Critical Path: 820.92s
    2528:  (13:52:19) �[32mINFO: �[0m14782 processes: 7380 remote cache hit, 7333 internal, 49 local, 20 remote.
    2529:  (13:52:19) �[32mINFO: �[0mBuild completed, 6 tests FAILED, 14782 total actions
    ...
    
    2643:  //dotnet/test/common:ElementFindingTest-edge                    �[0m�[32m(cached) PASSED�[0m in 31.6s
    2644:  //dotnet/test/common:ElementFindingTest-firefox                 �[0m�[32m(cached) PASSED�[0m in 45.8s
    2645:  //dotnet/test/common:ElementPropertyTest-chrome                 �[0m�[32m(cached) PASSED�[0m in 7.4s
    2646:  //dotnet/test/common:ElementPropertyTest-edge                   �[0m�[32m(cached) PASSED�[0m in 6.9s
    2647:  //dotnet/test/common:ElementPropertyTest-firefox                �[0m�[32m(cached) PASSED�[0m in 9.9s
    2648:  //dotnet/test/common:ElementSelectingTest-chrome                �[0m�[32m(cached) PASSED�[0m in 10.9s
    2649:  //dotnet/test/common:ElementSelectingTest-edge                  �[0m�[32m(cached) PASSED�[0m in 15.4s
    2650:  //dotnet/test/common:ElementSelectingTest-firefox               �[0m�[32m(cached) PASSED�[0m in 22.8s
    2651:  //dotnet/test/common:ErrorsTest-chrome                          �[0m�[32m(cached) PASSED�[0m in 7.5s
    2652:  //dotnet/test/common:ErrorsTest-edge                            �[0m�[32m(cached) PASSED�[0m in 8.4s
    2653:  //dotnet/test/common:ErrorsTest-firefox                         �[0m�[32m(cached) PASSED�[0m in 9.2s
    ...
    
    3002:  //java/test/org/openqa/selenium:ElementFindingTest-edge         �[0m�[32m(cached) PASSED�[0m in 96.4s
    3003:  //java/test/org/openqa/selenium:ElementFindingTest-firefox-beta �[0m�[32m(cached) PASSED�[0m in 46.8s
    3004:  //java/test/org/openqa/selenium:ElementFindingTest-spotbugs     �[0m�[32m(cached) PASSED�[0m in 10.0s
    3005:  //java/test/org/openqa/selenium:ElementSelectingTest            �[0m�[32m(cached) PASSED�[0m in 23.4s
    3006:  //java/test/org/openqa/selenium:ElementSelectingTest-chrome     �[0m�[32m(cached) PASSED�[0m in 12.4s
    3007:  //java/test/org/openqa/selenium:ElementSelectingTest-edge       �[0m�[32m(cached) PASSED�[0m in 25.3s
    3008:  //java/test/org/openqa/selenium:ElementSelectingTest-firefox-beta �[0m�[32m(cached) PASSED�[0m in 28.2s
    3009:  //java/test/org/openqa/selenium:ElementSelectingTest-spotbugs   �[0m�[32m(cached) PASSED�[0m in 7.2s
    3010:  //java/test/org/openqa/selenium:ErrorsTest                      �[0m�[32m(cached) PASSED�[0m in 10.9s
    3011:  //java/test/org/openqa/selenium:ErrorsTest-chrome               �[0m�[32m(cached) PASSED�[0m in 7.1s
    3012:  //java/test/org/openqa/selenium:ErrorsTest-edge                 �[0m�[32m(cached) PASSED�[0m in 8.6s
    3013:  //java/test/org/openqa/selenium:ErrorsTest-firefox-beta         �[0m�[32m(cached) PASSED�[0m in 12.4s
    3014:  //java/test/org/openqa/selenium:ErrorsTest-spotbugs             �[0m�[32m(cached) PASSED�[0m in 6.5s
    ...
    
    3748:  //java/test/org/openqa/selenium/os:ExternalProcessTest          �[0m�[32m(cached) PASSED�[0m in 2.3s
    3749:  //java/test/org/openqa/selenium/os:ExternalProcessTest-spotbugs �[0m�[32m(cached) PASSED�[0m in 8.1s
    3750:  //java/test/org/openqa/selenium/os:OsProcessTest                �[0m�[32m(cached) PASSED�[0m in 5.2s
    3751:  //java/test/org/openqa/selenium/os:OsProcessTest-spotbugs       �[0m�[32m(cached) PASSED�[0m in 8.4s
    3752:  //java/test/org/openqa/selenium/remote:AugmenterTest            �[0m�[32m(cached) PASSED�[0m in 7.7s
    3753:  //java/test/org/openqa/selenium/remote:AugmenterTest-spotbugs   �[0m�[32m(cached) PASSED�[0m in 10.4s
    3754:  //java/test/org/openqa/selenium/remote:DesiredCapabilitiesTest  �[0m�[32m(cached) PASSED�[0m in 1.8s
    3755:  //java/test/org/openqa/selenium/remote:DesiredCapabilitiesTest-spotbugs �[0m�[32m(cached) PASSED�[0m in 8.4s
    3756:  //java/test/org/openqa/selenium/remote:ErrorCodecTest           �[0m�[32m(cached) PASSED�[0m in 2.9s
    3757:  //java/test/org/openqa/selenium/remote:ErrorCodecTest-spotbugs  �[0m�[32m(cached) PASSED�[0m in 7.6s
    3758:  //java/test/org/openqa/selenium/remote:ErrorHandlerTest         �[0m�[32m(cached) PASSED�[0m in 2.8s
    3759:  //java/test/org/openqa/selenium/remote:ErrorHandlerTest-spotbugs �[0m�[32m(cached) PASSED�[0m in 10.4s
    ...
    
    4344:  //py:unit-test/unit/selenium/webdriver/chrome/chrome_options_tests.py �[0m�[32m(cached) PASSED�[0m in 3.0s
    4345:  //py:unit-test/unit/selenium/webdriver/common/cdp_module_fallback_tests.py �[0m�[32m(cached) PASSED�[0m in 2.9s
    4346:  //py:unit-test/unit/selenium/webdriver/common/common_options_tests.py �[0m�[32m(cached) PASSED�[0m in 3.0s
    4347:  //py:unit-test/unit/selenium/webdriver/common/fedcm/account_tests.py �[0m�[32m(cached) PASSED�[0m in 2.9s
    4348:  //py:unit-test/unit/selenium/webdriver/common/fedcm/dialog_tests.py �[0m�[32m(cached) PASSED�[0m in 2.7s
    4349:  //py:unit-test/unit/selenium/webdriver/common/print_page_options_tests.py �[0m�[32m(cached) PASSED�[0m in 2.1s
    4350:  //py:unit-test/unit/selenium/webdriver/edge/edge_options_tests.py �[0m�[32m(cached) PASSED�[0m in 2.7s
    4351:  //py:unit-test/unit/selenium/webdriver/firefox/firefox_options_tests.py �[0m�[32m(cached) PASSED�[0m in 3.1s
    4352:  //py:unit-test/unit/selenium/webdriver/remote/error_handler_tests.py �[0m�[32m(cached) PASSED�[0m in 2.3s
    ...
    
    4387:  //rb/spec/integration/selenium/webdriver:element-edge-bidi      �[0m�[32m(cached) PASSED�[0m in 17.9s
    4388:  //rb/spec/integration/selenium/webdriver:element-edge-remote    �[0m�[32m(cached) PASSED�[0m in 52.7s
    4389:  //rb/spec/integration/selenium/webdriver:element-firefox        �[0m�[32m(cached) PASSED�[0m in 56.9s
    4390:  //rb/spec/integration/selenium/webdriver:element-firefox-beta   �[0m�[32m(cached) PASSED�[0m in 78.0s
    4391:  //rb/spec/integration/selenium/webdriver:element-firefox-beta-bidi �[0m�[32m(cached) PASSED�[0m in 17.5s
    4392:  //rb/spec/integration/selenium/webdriver:element-firefox-beta-remote �[0m�[32m(cached) PASSED�[0m in 61.2s
    4393:  //rb/spec/integration/selenium/webdriver:element-firefox-bidi   �[0m�[32m(cached) PASSED�[0m in 16.7s
    4394:  //rb/spec/integration/selenium/webdriver:element-firefox-remote �[0m�[32m(cached) PASSED�[0m in 71.6s
    4395:  //rb/spec/integration/selenium/webdriver:error-chrome           �[0m�[32m(cached) PASSED�[0m in 15.7s
    4396:  //rb/spec/integration/selenium/webdriver:error-chrome-bidi      �[0m�[32m(cached) PASSED�[0m in 14.5s
    4397:  //rb/spec/integration/selenium/webdriver:error-chrome-remote    �[0m�[32m(cached) PASSED�[0m in 22.5s
    4398:  //rb/spec/integration/selenium/webdriver:error-edge             �[0m�[32m(cached) PASSED�[0m in 18.1s
    4399:  //rb/spec/integration/selenium/webdriver:error-edge-bidi        �[0m�[32m(cached) PASSED�[0m in 17.6s
    4400:  //rb/spec/integration/selenium/webdriver:error-edge-remote      �[0m�[32m(cached) PASSED�[0m in 25.2s
    4401:  //rb/spec/integration/selenium/webdriver:error-firefox          �[0m�[32m(cached) PASSED�[0m in 23.2s
    4402:  //rb/spec/integration/selenium/webdriver:error-firefox-beta     �[0m�[32m(cached) PASSED�[0m in 29.3s
    4403:  //rb/spec/integration/selenium/webdriver:error-firefox-beta-bidi �[0m�[32m(cached) PASSED�[0m in 13.8s
    4404:  //rb/spec/integration/selenium/webdriver:error-firefox-beta-remote �[0m�[32m(cached) PASSED�[0m in 31.2s
    4405:  //rb/spec/integration/selenium/webdriver:error-firefox-bidi     �[0m�[32m(cached) PASSED�[0m in 21.8s
    4406:  //rb/spec/integration/selenium/webdriver:error-firefox-remote   �[0m�[32m(cached) PASSED�[0m in 30.6s
    ...
    
    4692:  //rb/spec/unit/selenium/webdriver/support:color                 �[0m�[32m(cached) PASSED�[0m in 16.8s
    4693:  //rb/spec/unit/selenium/webdriver/support:event_firing          �[0m�[32m(cached) PASSED�[0m in 20.0s
    4694:  //rb/spec/unit/selenium/webdriver/support:select                �[0m�[32m(cached) PASSED�[0m in 13.1s
    4695:  //rust:selenium-manager-fmt                                     �[0m�[32m(cached) PASSED�[0m in 0.2s
    4696:  //rust:selenium_manager-fmt                                     �[0m�[32m(cached) PASSED�[0m in 0.3s
    4697:  //rust:unit                                                     �[0m�[32m(cached) PASSED�[0m in 0.1s
    4698:  //rust:unit-fmt                                                 �[0m�[32m(cached) PASSED�[0m in 0.2s
    4699:  //java/test/org/openqa/selenium/grid/distributor:DrainTest-spotbugs      �[0m�[32mPASSED�[0m in 12.4s
    4700:  //java/test/org/openqa/selenium/grid/distributor:DrainTest               �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 403.4s
    4701:  Stats over 2 runs: max = 403.4s, min = 363.9s, avg = 383.6s, dev = 19.8s
    4702:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest/test.log
    4703:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest/test_attempts/attempt_1.log
    4704:  //java/test/org/openqa/selenium/grid/distributor:DrainTest-chrome        �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 201.7s
    4705:  Stats over 2 runs: max = 201.7s, min = 189.2s, avg = 195.5s, dev = 6.3s
    4706:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome/test.log
    4707:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome/test_attempts/attempt_1.log
    4708:  //java/test/org/openqa/selenium/grid/distributor:DrainTest-chrome-remote �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 162.9s
    4709:  Stats over 2 runs: max = 162.9s, min = 147.1s, avg = 155.0s, dev = 7.9s
    4710:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome-remote/test.log
    4711:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-chrome-remote/test_attempts/attempt_1.log
    4712:  //java/test/org/openqa/selenium/grid/distributor:DrainTest-edge          �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 204.6s
    4713:  Stats over 2 runs: max = 204.6s, min = 187.7s, avg = 196.2s, dev = 8.5s
    4714:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge/test.log
    4715:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge/test_attempts/attempt_1.log
    4716:  //java/test/org/openqa/selenium/grid/distributor:DrainTest-edge-remote   �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 257.3s
    4717:  Stats over 2 runs: max = 257.3s, min = 245.9s, avg = 251.6s, dev = 5.7s
    4718:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge-remote/test.log
    4719:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-edge-remote/test_attempts/attempt_1.log
    4720:  //java/test/org/openqa/selenium/grid/distributor:DrainTest-remote        �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 419.8s
    4721:  Stats over 2 runs: max = 419.8s, min = 237.2s, avg = 328.5s, dev = 91.3s
    4722:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-remote/test.log
    4723:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/java/test/org/openqa/selenium/grid/distributor/DrainTest-remote/test_attempts/attempt_1.log
    4724:  Executed 7 out of 2175 tests: 2169 tests pass and �[0m�[31m�[1m6 fail remotely�[0m.
    4725:  There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.
    4726:  (13:52:21) �[32mINFO: �[0mStreaming build results to: https://gypsum.cluster.engflow.com/invocation/19af3229-d615-4ba2-bb6a-7402c39bc288
    4727:  �[0m
    4728:  ##[error]Process completed with exit code 3.
    

    ✨ CI feedback usage guide:

    The CI feedback tool (/checks) automatically triggers when a PR has a failed check.
    The tool analyzes the failed checks and provides several feedbacks:

    • Failed stage
    • Failed test name
    • Failure summary
    • Relevant error logs

    In addition to being automatically triggered, the tool can also be invoked manually by commenting on a PR:

    /checks "https://github.com/{repo_name}/actions/runs/{run_number}/job/{job_number}"
    

    where {repo_name} is the name of the repository, {run_number} is the run number of the failed check, and {job_number} is the job number of the failed check.

    Configuration options

    • enable_auto_checks_feedback - if set to true, the tool will automatically provide feedback when a check is failed. Default is true.
    • excluded_checks_list - a list of checks to exclude from the feedback, for example: ["check1", "check2"]. Default is an empty list.
    • enable_help_text - if set to true, the tool will provide a help message with the feedback. Default is true.
    • persistent_comment - if set to true, the tool will overwrite a previous checks comment with the new feedback. Default is true.
    • final_update_message - if persistent_comment is true and updating a previous checks message, the tool will also create a new message: "Persistent checks updated to latest commit". Default is true.

    See more information about the checks tool in the docs.

    @VietND96
    Copy link
    Member

    @VietND96 is this a common case when using Kubernetes, when only one node is used?

    I can confirm --drain-after-session-count is a use case in K8s. In K8s, Node is deployed as Job or Deployment, with behavior as below.

    • Deployment: assume that --drain-after-session-count=1. In this type, it always go to the situation automatically restarted after shutdown, since there is restartPolicy: Always, which means the container will be restarted internally after the last run has exited (the distributor considers it is a shutdown). Whenever it is up and registered to Hub, the distributor probably considers it a NodeRestarted event since it has the same URL and different UUID.
    • Job: in this type, it could be often go to the situation automatically restarted after shutdown. Since after the container exited, the high-level Pod terminated. A new Node running in a new Pod will be spawned (which is assigned a new IP from pool, or sometime due to the IPs pool limits the same IP could be randomly assigned). It would be possibility of 50% node shutdown and 50% node restarted after shutdown.

    @VietND96
    Copy link
    Member

    For example, a node automatically restarted after shutdown which has no support Caps always, might it cause the infinite loop or long delays?

    @joerg1985
    Copy link
    Member Author

    For example, a node automatically restarted after shutdown which has no support Caps always, might it cause the infinite loop or long delays?

    The session request should be rejected after --session-request-timeout has reached, if no node matching the capabilities is found in time.

    Copy link
    Member

    @diemol diemol left a comment

    Choose a reason for hiding this comment

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

    Feel free to merge after CI is green.

    @joerg1985 joerg1985 merged commit 8d5ac53 into trunk Jan 1, 2025
    33 checks passed
    @joerg1985 joerg1985 deleted the retry-after-drain branch January 1, 2025 18:19
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    3 participants