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] Update for node shutdown gracefully #14628

Open
wants to merge 2 commits into
base: trunk
Choose a base branch
from
Open

Conversation

VietND96
Copy link
Member

@VietND96 VietND96 commented Oct 21, 2024

Thanks for contributing to Selenium!
A PR well described will help maintainers to quickly review and merge it

Before submitting your PR, please check our contributing guidelines.
Avoid large PRs, help reviewers by making them as simple and short as possible.

Description

Motivation and Context

checkSessionCount() - to check and drain node after sessions are reached. Steps in order, so in logs, we saw something like

09:51:06.344 INFO [LocalNode.checkSessionCount] - Draining Node, configured sessions value (1) has been reached.
09:51:06.533 INFO [LocalNode.newSession] - Session created by the Node. Id: b47edd11098edb876c805745161ea67c, Caps:

It might confuse that the session created in a draining node.
So, moving it to block finally { }
The trade-off is the session count will include both success and unsuccess. When the session comes, the remaining count decreases.
It could be suitable for autoscaling. For example, if a faulty Node (for unknown reasons), the session cannot be created, and the node will be drained to signal the scaler to scale a new one. Instead of keeping Node running, it biases the scaler already had enough nodes running.
Also, there was a request #13865 - Automatically drain node after n-failed session attempts. By moving that check to finally blocks, it would be best for both.


Add the drain() method to the shutdown hook. Node will send drain event to remove Node immediately once Runtime stopped.


Fixes #13769 - Exception NoSuchSessionException should throw out when command is routed to Node that session just timed out.

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.

Copy link
Contributor

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

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

Potential Race Condition
The checkSessionCount() method is now called in the finally block of the newSession method. This could potentially lead to a race condition if multiple threads are creating sessions simultaneously. The reviewer should verify if this change affects the accuracy of session counting and draining behavior.

Resource Management
The sessionToDownloadsDir.invalidate(id) call has been moved from the stopTimedOutSession method to the stop method. The reviewer should ensure that this change doesn't lead to any resource leaks or inconsistencies in managing download directories for sessions.

Shutdown Behavior
A new shutdown hook has been added that calls stopAllSessions() and drain(). The reviewer should verify if this change properly handles the node shutdown process and if there are any potential issues with the order of operations during shutdown.

Copy link
Contributor

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Score
Enhancement
Add error handling in shutdown hook for improved reliability

Consider adding error handling and logging in the shutdown hook to ensure that any
exceptions during the shutdown process are properly caught and logged, preventing
silent failures.

java/src/org/openqa/selenium/grid/node/local/LocalNode.java [300-306]

 Runtime.getRuntime()
     .addShutdownHook(
         new Thread(
             () -> {
-              stopAllSessions();
-              drain();
+              try {
+                stopAllSessions();
+                drain();
+              } catch (Exception e) {
+                LOG.log(Level.SEVERE, "Error during node shutdown", e);
+              }
             }));
  • Apply this suggestion
Suggestion importance[1-10]: 8

Why: Adding error handling in the shutdown hook is a significant improvement, as it prevents silent failures during shutdown and ensures that exceptions are logged, enhancing reliability and maintainability.

8
Performance
Optimize cache key presence check for better performance

Consider using sessionToDownloadsDir.asMap().containsKey(id) instead of
sessionToDownloadsDir.getIfPresent(id) != null to check for the presence of a key in
the cache, as it's more efficient and doesn't risk triggering a load operation.

java/src/org/openqa/selenium/grid/node/local/LocalNode.java [773-775]

-if (sessionToDownloadsDir.getIfPresent(id) != null) {
+if (sessionToDownloadsDir.asMap().containsKey(id)) {
   sessionToDownloadsDir.invalidate(id);
 }
  • Apply this suggestion
Suggestion importance[1-10]: 7

Why: The suggestion to use asMap().containsKey(id) instead of getIfPresent(id) != null is a valid optimization that can improve performance by avoiding unnecessary load operations, though the impact may be minor.

7
Best practice
Improve thread naming for better identification and debugging

Consider using a more descriptive name for the shutdown hook thread, such as
"NodeShutdownHook", to improve code readability and make it easier to identify the
purpose of this thread in thread dumps or debugging scenarios.

java/src/org/openqa/selenium/grid/node/local/LocalNode.java [300-306]

 Runtime.getRuntime()
     .addShutdownHook(
         new Thread(
             () -> {
               stopAllSessions();
               drain();
-            }));
+            }, "NodeShutdownHook"));
  • Apply this suggestion
Suggestion importance[1-10]: 5

Why: The suggestion to name the shutdown hook thread improves code readability and debugging, but it is not critical to functionality. It is a good practice for better thread management.

5

💡 Need additional feedback ? start a PR chat

Copy link
Contributor

codiumai-pr-agent-pro bot commented Oct 21, 2024

CI Failure Feedback 🧐

(Checks updated until commit b0f3cd9)

Action: Ruby / Remote Tests (edge, windows) / Remote Tests (edge, windows)

Failed stage: Run Bazel [❌]

Failed test name: Selenium::WebDriver::Remote::Driver errors when not set

Failure summary:

The action failed because the test Selenium::WebDriver::Remote::Driver errors when not set did not
pass. The test expected a Selenium::WebDriver::Error::WebDriverError to be raised with the message
"You must enable downloads in order to work with downloadable files." However, it received a
Selenium::WebDriver::Error::UnknownError instead, indicating that the downloads file system could
not be found for the session id.

Relevant error logs:
1:  ##[group]Operating System
2:  Microsoft Windows Server 2022
...

656:  �[32m[1 / 1]�[0m checking cached actions
657:  �[32mAnalyzing:�[0m 29 targets (708 packages loaded, 49953 targets configured)
658:  �[32m[1 / 17]�[0m [Prepa] Writing repo mapping manifest for //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote
659:  �[32mAnalyzing:�[0m 29 targets (708 packages loaded, 49954 targets configured)
660:  �[32m[4 / 23]�[0m Creating source manifest for //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote; 0s local ... (2 actions, 1 running)
661:  �[32mINFO: �[0mAnalyzed 29 targets (708 packages loaded, 49954 targets configured).
662:  �[32m[7 / 29]�[0m [Prepa] Creating source manifest for //rb/spec/integration/selenium/webdriver:element-edge-remote ... (4 actions, 3 running)
663:  �[32m[16 / 42]�[0m Creating source manifest for //rb/spec/integration/selenium/webdriver:driver-edge-remote; 0s local ... (4 actions running)
664:  �[32m[24 / 51]�[0m [Prepa] Writing repo mapping manifest for //rb/spec/integration/selenium/webdriver:error-edge-remote
...

675:  �[32m[1,997 / 3,139]�[0m Extracting npm package @mui/[email protected]_724305784; 0s disk-cache ... (4 actions, 0 running)
676:  �[32mINFO: �[0mFrom Building external/protobuf~/java/core/liblite_runtime_only.jar (91 source files) [for tool]:
677:  external\protobuf~\java\core\src\main\java\com\google\protobuf\UnsafeUtil.java:293: warning: [removal] AccessController in java.security has been deprecated and marked for removal
678:  AccessController.doPrivileged(
679:  ^
680:  �[32m[2,088 / 3,139]�[0m Extracting npm package @mui/[email protected]_796748879; 0s disk-cache ... (2 actions, 0 running)
681:  �[32m[2,282 / 3,139]�[0m Extracting npm package @mui/[email protected]_796748879; 2s disk-cache ... (4 actions, 0 running)
682:  �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (71 source files):
683:  java\src\org\openqa\selenium\remote\ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
684:  private final ErrorCodes errorCodes;
685:  ^
686:  java\src\org\openqa\selenium\remote\ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
687:  this.errorCodes = new ErrorCodes();
688:  ^
689:  java\src\org\openqa\selenium\remote\ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
690:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
691:  ^
692:  java\src\org\openqa\selenium\remote\Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
693:  ErrorCodes errorCodes = new ErrorCodes();
694:  ^
695:  java\src\org\openqa\selenium\remote\Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
696:  ErrorCodes errorCodes = new ErrorCodes();
697:  ^
698:  java\src\org\openqa\selenium\remote\ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
699:  response.setStatus(ErrorCodes.SUCCESS);
700:  ^
701:  java\src\org\openqa\selenium\remote\ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
702:  response.setState(ErrorCodes.SUCCESS_STRING);
703:  ^
704:  java\src\org\openqa\selenium\remote\W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
705:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
706:  ^
707:  java\src\org\openqa\selenium\remote\W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
708:  new ErrorCodes().getExceptionType((String) rawError);
709:  ^
710:  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
711:  private final ErrorCodes errorCodes = new ErrorCodes();
712:  ^
713:  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
714:  private final ErrorCodes errorCodes = new ErrorCodes();
715:  ^
716:  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
717:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
718:  ^
719:  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
720:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
721:  ^
722:  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
723:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
724:  ^
725:  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
726:  response.setStatus(ErrorCodes.SUCCESS);
727:  ^
728:  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
729:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
730:  ^
731:  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
732:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
733:  ^
734:  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
735:  private final ErrorCodes errorCodes = new ErrorCodes();
736:  ^
737:  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
738:  private final ErrorCodes errorCodes = new ErrorCodes();
739:  ^
740:  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
741:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
742:  ^
743:  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
744:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
745:  ^
746:  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
747:  response.setStatus(ErrorCodes.SUCCESS);
...

942:  �[32m[3,150 / 3,163]�[0m 11 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 182s local, disk-cache ... (4 actions, 2 running)
943:  �[32m[3,150 / 3,163]�[0m 11 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 186s local, disk-cache ... (4 actions, 2 running)
944:  �[32m[3,150 / 3,163]�[0m 11 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 188s local, disk-cache ... (4 actions, 2 running)
945:  �[32m[3,151 / 3,163]�[0m 12 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 189s local, disk-cache ... (4 actions, 1 running)
946:  �[32m[3,151 / 3,163]�[0m 12 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 199s local, disk-cache ... (4 actions, 1 running)
947:  �[32m[3,151 / 3,163]�[0m 12 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 204s local, disk-cache ... (4 actions, 1 running)
948:  �[32m[3,151 / 3,163]�[0m 12 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 217s local, disk-cache ... (4 actions, 2 running)
949:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver/remote:driver-edge-remote (see D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/remote/driver-edge-remote/test.log)
950:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver/remote:driver-edge-remote (Summary)
...

965:  Selenium::WebDriver::Remote::Driver
966:  exposes session_id
967:  exposes remote status
968:  Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead
969:  uses a default file detector
970:  lists downloads
971:  downloads a file
972:  deletes downloadable files
973:  errors when not set (FAILED - 1)
974:  Failures:
975:  1) Selenium::WebDriver::Remote::Driver errors when not set
976:  Failure/Error:
977:  expect {
978:  driver.downloadable_files
979:  }.to raise_exception(Error::WebDriverError,
980:  'You must enable downloads in order to work with downloadable files.')
981:  expected Selenium::WebDriver::Error::WebDriverError with "You must enable downloads in order to work with downloadable files.", got #<Selenium::WebDriver::Error::UnknownError: Cannot find downloads file system for session id: de9a600... os.arch: 'amd64', os.version: '10.0', java.version: '17.0.11'
982:  Driver info: driver.version: unknown> with backtrace:
983:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
984:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
...

990:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:67:in `call'
991:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
992:  # ./rb/lib/selenium/webdriver/remote/features.rb:62:in `downloadable_files'
993:  # ./rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb:27:in `downloadable_files'
994:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:87:in `block (3 levels) in <module:Remote>'
995:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
996:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
997:  Finished in 23.1 seconds (files took 0.68491 seconds to load)
998:  7 examples, 1 failure
999:  Failed examples:
1000:  rspec ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:84 # Selenium::WebDriver::Remote::Driver errors when not set
...

1012:  Selenium::WebDriver::Remote::Driver
1013:  exposes session_id
1014:  exposes remote status
1015:  Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead
1016:  uses a default file detector
1017:  lists downloads
1018:  downloads a file
1019:  deletes downloadable files
1020:  errors when not set (FAILED - 1)
1021:  Failures:
1022:  1) Selenium::WebDriver::Remote::Driver errors when not set
1023:  Failure/Error:
1024:  expect {
1025:  driver.downloadable_files
1026:  }.to raise_exception(Error::WebDriverError,
1027:  'You must enable downloads in order to work with downloadable files.')
1028:  expected Selenium::WebDriver::Error::WebDriverError with "You must enable downloads in order to work with downloadable files.", got #<Selenium::WebDriver::Error::UnknownError: Cannot find downloads file system for session id: 9fee79d... os.arch: 'amd64', os.version: '10.0', java.version: '17.0.11'
1029:  Driver info: driver.version: unknown> with backtrace:
1030:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
1031:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
...

1037:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:67:in `call'
1038:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
1039:  # ./rb/lib/selenium/webdriver/remote/features.rb:62:in `downloadable_files'
1040:  # ./rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb:27:in `downloadable_files'
1041:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:87:in `block (3 levels) in <module:Remote>'
1042:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
1043:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
1044:  Finished in 22.48 seconds (files took 0.67059 seconds to load)
1045:  7 examples, 1 failure
1046:  Failed examples:
1047:  rspec ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:84 # Selenium::WebDriver::Remote::Driver errors when not set
...

1059:  Selenium::WebDriver::Remote::Driver
1060:  exposes session_id
1061:  exposes remote status
1062:  Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead
1063:  uses a default file detector
1064:  lists downloads
1065:  downloads a file
1066:  deletes downloadable files
1067:  errors when not set (FAILED - 1)
1068:  Failures:
1069:  1) Selenium::WebDriver::Remote::Driver errors when not set
1070:  Failure/Error:
1071:  expect {
1072:  driver.downloadable_files
1073:  }.to raise_exception(Error::WebDriverError,
1074:  'You must enable downloads in order to work with downloadable files.')
1075:  expected Selenium::WebDriver::Error::WebDriverError with "You must enable downloads in order to work with downloadable files.", got #<Selenium::WebDriver::Error::UnknownError: Cannot find downloads file system for session id: cba7ebb... os.arch: 'amd64', os.version: '10.0', java.version: '17.0.11'
1076:  Driver info: driver.version: unknown> with backtrace:
1077:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
1078:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
...

1084:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:67:in `call'
1085:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
1086:  # ./rb/lib/selenium/webdriver/remote/features.rb:62:in `downloadable_files'
1087:  # ./rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb:27:in `downloadable_files'
1088:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:87:in `block (3 levels) in <module:Remote>'
1089:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
1090:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
1091:  Finished in 21.81 seconds (files took 0.70805 seconds to load)
1092:  7 examples, 1 failure
1093:  Failed examples:
1094:  rspec ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:84 # Selenium::WebDriver::Remote::Driver errors when not set
1095:  ================================================================================
1096:  �[32m[3,152 / 3,163]�[0m 13 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 31s ... (4 actions, 1 running)
1097:  �[32m[3,152 / 3,163]�[0m 13 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 42s ... (4 actions, 1 running)
1098:  �[32m[3,152 / 3,163]�[0m 13 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 46s ... (4 actions, 1 running)
1099:  �[32m[3,152 / 3,163]�[0m 13 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 34s ... (4 actions, 2 running)
1100:  �[32m[3,153 / 3,163]�[0m 14 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 36s ... (4 actions, 1 running)
1101:  �[32m[3,153 / 3,163]�[0m 14 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 46s ... (4 actions, 1 running)
1102:  �[32m[3,153 / 3,163]�[0m 14 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:service-edge-remote; 48s ... (4 actions, 1 running)
1103:  �[32m[3,154 / 3,163]�[0m 15 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:error-edge-remote; 21s ... (4 actions, 1 running)
1104:  �[32m[3,154 / 3,163]�[0m 15 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:error-edge-remote; 22s ... (4 actions, 1 running)
1105:  �[32m[3,154 / 3,163]�[0m 15 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:error-edge-remote; 32s ... (4 actions, 1 running)
1106:  �[32m[3,154 / 3,163]�[0m 15 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:error-edge-remote; 35s ... (4 actions, 1 running)
1107:  �[32m[3,154 / 3,163]�[0m 15 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 22s ... (4 actions, 2 running)
1108:  �[32m[3,155 / 3,163]�[0m 16 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 23s ... (4 actions, 1 running)
1109:  �[32m[3,155 / 3,163]�[0m 16 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 33s ... (4 actions, 1 running)
1110:  �[32m[3,155 / 3,163]�[0m 16 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 36s ... (4 actions, 1 running)
1111:  �[32m[3,156 / 3,163]�[0m 17 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/remote:element-edge-remote; 22s ... (4 actions, 1 running)
1112:  �[32m[3,156 / 3,163]�[0m 17 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/remote:element-edge-remote; 23s ... (4 actions, 1 running)
1113:  �[32m[3,156 / 3,163]�[0m 17 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/remote:element-edge-remote; 33s ... (4 actions, 1 running)
1114:  �[32m[3,156 / 3,163]�[0m 17 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/remote:element-edge-remote; 36s ... (4 actions, 1 running)
1115:  �[32m[3,156 / 3,163]�[0m 17 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:shadow_root-edge-remote; 16s ... (4 actions, 2 running)
1116:  �[32m[3,157 / 3,163]�[0m 18 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:shadow_root-edge-remote; 18s ... (4 actions, 1 running)
1117:  �[32m[3,157 / 3,163]�[0m 18 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:shadow_root-edge-remote; 28s ... (4 actions, 1 running)
1118:  �[32m[3,157 / 3,163]�[0m 18 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:shadow_root-edge-remote; 31s ... (4 actions, 1 running)
1119:  �[32m[3,157 / 3,163]�[0m 18 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 17s ... (4 actions, 2 running)
1120:  �[32m[3,158 / 3,163]�[0m 19 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 19s ... (4 actions, 1 running)
1121:  �[32m[3,158 / 3,163]�[0m 19 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 29s ... (4 actions, 1 running)
1122:  �[32m[3,158 / 3,163]�[0m 19 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 32s ... (4 actions, 1 running)
1123:  �[32m[3,158 / 3,163]�[0m 19 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 30s ... (4 actions, 2 running)
1124:  �[32m[3,159 / 3,163]�[0m 20 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 32s ... (4 actions, 1 running)
1125:  �[32m[3,159 / 3,163]�[0m 20 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 33s ... (4 actions, 1 running)
1126:  �[32m[3,159 / 3,163]�[0m 20 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 42s ... (4 actions, 1 running)
1127:  �[32m[3,159 / 3,163]�[0m 20 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 46s ... (4 actions, 1 running)
1128:  �[32m[3,159 / 3,163]�[0m 20 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:select-edge-remote; 42s ... (4 actions, 2 running)
1129:  �[32m[3,160 / 3,163]�[0m 21 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:select-edge-remote; 44s ... (3 actions, 1 running)
1130:  �[32m[3,160 / 3,163]�[0m 21 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:select-edge-remote; 54s ... (3 actions, 1 running)
1131:  �[32m[3,160 / 3,163]�[0m 21 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 46s ... (3 actions, 2 running)
1132:  �[32m[3,161 / 3,163]�[0m 22 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 47s ... (2 actions, 1 running)
1133:  �[32m[3,161 / 3,163]�[0m 22 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 57s ... (2 actions, 1 running)
1134:  �[32m[3,161 / 3,163]�[0m 22 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:select-edge-remote; 25s local, disk-cache ... (2 actions running)
1135:  �[32m[3,162 / 3,163]�[0m 23 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 1s local, disk-cache
1136:  �[32m[3,162 / 3,163]�[0m 23 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 11s local, disk-cache
1137:  �[32m[3,162 / 3,163]�[0m 23 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 16s local, disk-cache
1138:  �[32m[3,163 / 3,164]�[0m 24 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 0s disk-cache
1139:  �[32m[3,163 / 3,164]�[0m 24 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote
1140:  �[32m[3,163 / 3,164]�[0m 24 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 1s local, disk-cache
1141:  �[32m[3,163 / 3,164]�[0m 24 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 14s local, disk-cache
1142:  �[32m[3,164 / 3,165]�[0m 25 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 0s disk-cache
1143:  �[32m[3,164 / 3,165]�[0m 25 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote
1144:  �[32m[3,164 / 3,165]�[0m 25 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 1s local, disk-cache
1145:  �[32m[3,164 / 3,165]�[0m 25 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 87s local, disk-cache
1146:  �[32m[3,165 / 3,166]�[0m 26 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 0s disk-cache
1147:  �[32m[3,165 / 3,166]�[0m 26 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote
1148:  �[32m[3,165 / 3,166]�[0m 26 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 1s local, disk-cache
1149:  �[32m[3,165 / 3,166]�[0m 26 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 14s local, disk-cache
1150:  �[32m[3,166 / 3,167]�[0m 27 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 0s disk-cache
1151:  �[32m[3,166 / 3,167]�[0m 27 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote
1152:  �[32m[3,166 / 3,167]�[0m 27 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 1s local, disk-cache
1153:  �[32m[3,166 / 3,167]�[0m 27 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 14s local, disk-cache
1154:  �[32m[3,167 / 3,168]�[0m 28 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 0s disk-cache
1155:  �[32m[3,167 / 3,168]�[0m 28 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote
1156:  �[32m[3,167 / 3,168]�[0m 28 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 1s local, disk-cache
1157:  �[32m[3,167 / 3,168]�[0m 28 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 14s local, disk-cache
1158:  �[32mINFO: �[0mFound 29 test targets...
1159:  �[32mINFO: �[0mElapsed time: 1507.916s, Critical Path: 792.57s
1160:  �[32mINFO: �[0m2889 processes: 1593 disk cache hit, 1180 internal, 98 local, 18 worker.
1161:  �[32mINFO: �[0mBuild completed, 1 test FAILED, 2889 total actions
1162:  //rb/spec/integration/selenium/webdriver:action_builder-edge-remote      �[0m�[32mPASSED�[0m in 28.9s
1163:  //rb/spec/integration/selenium/webdriver:bidi-edge-remote                �[0m�[32mPASSED�[0m in 14.5s
1164:  //rb/spec/integration/selenium/webdriver:devtools-edge-remote            �[0m�[32mPASSED�[0m in 87.8s
1165:  //rb/spec/integration/selenium/webdriver:driver-edge-remote              �[0m�[32mPASSED�[0m in 33.5s
1166:  //rb/spec/integration/selenium/webdriver:element-edge-remote             �[0m�[32mPASSED�[0m in 57.8s
1167:  //rb/spec/integration/selenium/webdriver:error-edge-remote               �[0m�[32mPASSED�[0m in 14.6s
...

1182:  //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote �[0m�[32mPASSED�[0m in 14.5s
1183:  //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote  �[0m�[32mPASSED�[0m in 14.5s
1184:  //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote         �[0m�[32mPASSED�[0m in 14.5s
1185:  //rb/spec/integration/selenium/webdriver/edge:driver-edge-remote         �[0m�[32mPASSED�[0m in 34.0s
1186:  //rb/spec/integration/selenium/webdriver/edge:options-edge-remote        �[0m�[32mPASSED�[0m in 21.7s
1187:  //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote        �[0m�[32mPASSED�[0m in 15.1s
1188:  //rb/spec/integration/selenium/webdriver/edge:service-edge-remote        �[0m�[32mPASSED�[0m in 21.8s
1189:  //rb/spec/integration/selenium/webdriver/remote:element-edge-remote      �[0m�[32mPASSED�[0m in 16.6s
1190:  //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote       �[0m�[31m�[1mFAILED�[0m in 3 out of 3 in 30.2s
1191:  Stats over 3 runs: max = 30.2s, min = 28.9s, avg = 29.5s, dev = 0.5s
1192:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/remote/driver-edge-remote/test.log
1193:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/remote/driver-edge-remote/test_attempts/attempt_1.log
1194:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/remote/driver-edge-remote/test_attempts/attempt_2.log
1195:  Executed 29 out of 29 tests: 28 tests pass and �[0m�[31m�[1m1 fails locally�[0m.
1196:  There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.
1197:  �[0m
1198:  ##[error]Process completed with exit code 1.

✨ 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.

Copy link

codecov bot commented Oct 21, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 57.78%. Comparing base (57f8398) to head (b684f60).
Report is 824 commits behind head on trunk.

Additional details and impacted files
@@            Coverage Diff             @@
##            trunk   #14628      +/-   ##
==========================================
- Coverage   58.48%   57.78%   -0.70%     
==========================================
  Files          86       89       +3     
  Lines        5270     5614     +344     
  Branches      220      245      +25     
==========================================
+ Hits         3082     3244     +162     
- Misses       1968     2125     +157     
- Partials      220      245      +25     

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

@VietND96 VietND96 force-pushed the node-shutdown branch 3 times, most recently from d066ac7 to 0af907e Compare October 21, 2024 12:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants