From 93483c56aaf256c5f5a28a6f71e29d5d0e6df90b Mon Sep 17 00:00:00 2001 From: joerg1985 <16140691+joerg1985@users.noreply.github.com> Date: Mon, 30 Dec 2024 10:05:56 +0100 Subject: [PATCH 1/8] [grid] rework the retry of http requests #14917 (#14924) Co-authored-by: Diego Molina --- .../openqa/selenium/remote/http/BUILD.bazel | 2 - .../selenium/remote/http/RetryRequest.java | 114 +++++++----------- .../remote/http/RetryRequestTest.java | 102 ++++++++++++++-- 3 files changed, 135 insertions(+), 83 deletions(-) diff --git a/java/src/org/openqa/selenium/remote/http/BUILD.bazel b/java/src/org/openqa/selenium/remote/http/BUILD.bazel index 9cb037c5b2e5a..e3a780dbbbbec 100644 --- a/java/src/org/openqa/selenium/remote/http/BUILD.bazel +++ b/java/src/org/openqa/selenium/remote/http/BUILD.bazel @@ -1,4 +1,3 @@ -load("@rules_jvm_external//:defs.bzl", "artifact") load("//java:defs.bzl", "java_export") load("//java:version.bzl", "SE_VERSION") @@ -20,6 +19,5 @@ java_export( "//java:auto-service", "//java/src/org/openqa/selenium:core", "//java/src/org/openqa/selenium/json", - artifact("dev.failsafe:failsafe"), ], ) diff --git a/java/src/org/openqa/selenium/remote/http/RetryRequest.java b/java/src/org/openqa/selenium/remote/http/RetryRequest.java index c9cb8f8883dbd..3f8e2759a8405 100644 --- a/java/src/org/openqa/selenium/remote/http/RetryRequest.java +++ b/java/src/org/openqa/selenium/remote/http/RetryRequest.java @@ -17,89 +17,65 @@ package org.openqa.selenium.remote.http; -import static java.net.HttpURLConnection.HTTP_CLIENT_TIMEOUT; import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR; import static java.net.HttpURLConnection.HTTP_UNAVAILABLE; -import static org.openqa.selenium.internal.Debug.getDebugLogLevel; -import static org.openqa.selenium.remote.http.Contents.asJson; -import dev.failsafe.Failsafe; -import dev.failsafe.Fallback; -import dev.failsafe.RetryPolicy; -import dev.failsafe.event.ExecutionAttemptedEvent; -import dev.failsafe.function.CheckedFunction; import java.net.ConnectException; -import java.util.Map; +import java.util.logging.Level; import java.util.logging.Logger; +import org.openqa.selenium.internal.Debug; public class RetryRequest implements Filter { private static final Logger LOG = Logger.getLogger(RetryRequest.class.getName()); + private static final Level LOG_LEVEL = Debug.getDebugLogLevel(); - private static final Fallback fallback = - Fallback.of( - (CheckedFunction, ? extends HttpResponse>) - RetryRequest::getFallback); - - // Retry on connection error. - private static final RetryPolicy connectionFailurePolicy = - RetryPolicy.builder() - .handleIf(failure -> failure.getCause() instanceof ConnectException) - .withMaxRetries(3) - .onRetry( - e -> - LOG.log( - getDebugLogLevel(), - "Connection failure #{0}. Retrying.", - e.getAttemptCount())) - .build(); - - // Retry if server is unavailable or an internal server error occurs without response body. - private static final RetryPolicy serverErrorPolicy = - RetryPolicy.builder() - .handleResultIf( - response -> - response.getStatus() == HTTP_INTERNAL_ERROR - && Integer.parseInt((response).getHeader(HttpHeader.ContentLength.getName())) - == 0) - .handleResultIf(response -> (response).getStatus() == HTTP_UNAVAILABLE) - .withMaxRetries(2) - .onRetry( - e -> - LOG.log( - getDebugLogLevel(), - "Failure due to server error #{0}. Retrying.", - e.getAttemptCount())) - .build(); + private static final int RETRIES_ON_CONNECTION_FAILURE = 3; + private static final int RETRIES_ON_SERVER_ERROR = 2; + private static final int NEEDED_ATTEMPTS = + Math.max(RETRIES_ON_CONNECTION_FAILURE, RETRIES_ON_SERVER_ERROR) + 1; @Override public HttpHandler apply(HttpHandler next) { - return req -> - Failsafe.with(fallback) - .compose(serverErrorPolicy) - .compose(connectionFailurePolicy) - .get(() -> next.execute(req)); - } + return req -> { + // start to preform the request in a loop, to allow retries + for (int i = 0; i < NEEDED_ATTEMPTS; i++) { + HttpResponse response; + + try { + response = next.execute(req); + } catch (RuntimeException ex) { + // detect a connection failure we would like to retry + boolean isConnectionFailure = ex.getCause() instanceof ConnectException; + + // must be a connection failure and check whether we have retries left for this + if (isConnectionFailure && i < RETRIES_ON_CONNECTION_FAILURE) { + LOG.log(LOG_LEVEL, "Retry #" + (i + 1) + " on ConnectException", ex); + continue; + } - private static HttpResponse getFallback( - ExecutionAttemptedEvent executionAttemptedEvent) throws Exception { - if (executionAttemptedEvent.getLastException() != null) { - Exception exception = (Exception) executionAttemptedEvent.getLastException(); - if (exception.getCause() instanceof ConnectException) { - return new HttpResponse() - .setStatus(HTTP_CLIENT_TIMEOUT) - .setContent(asJson(Map.of("value", Map.of("message", "Connection failure")))); - } else throw exception; - } else if (executionAttemptedEvent.getLastResult() != null) { - HttpResponse response = executionAttemptedEvent.getLastResult(); - if ((response.getStatus() == HTTP_INTERNAL_ERROR - && Integer.parseInt(response.getHeader(HttpHeader.ContentLength.getName())) == 0) - || response.getStatus() == HTTP_UNAVAILABLE) { - return new HttpResponse() - .setStatus(response.getStatus()) - .setContent(asJson(Map.of("value", Map.of("message", "Internal server error")))); + // not a connection failure or retries exceeded, rethrow and let the caller handle this + throw ex; + } + + // detect a server error we would like to retry + boolean isServerError = + (response.getStatus() == HTTP_INTERNAL_ERROR && response.getContent().length() == 0) + || response.getStatus() == HTTP_UNAVAILABLE; + + // must be a server error and check whether we have retries left for this + if (isServerError && i < RETRIES_ON_SERVER_ERROR) { + LOG.log(LOG_LEVEL, "Retry #" + (i + 1) + " on ServerError: " + response.getStatus()); + continue; + } + + // not a server error or retries exceeded, return the result to the caller + return response; } - } - return executionAttemptedEvent.getLastResult(); + + // This should not be reachable, we either retry or fail before. The only way to get here + // is to set the static final int fields above to inconsistent values. + throw new IllegalStateException("Effective unreachable code reached, check constants."); + }; } } diff --git a/java/test/org/openqa/selenium/remote/http/RetryRequestTest.java b/java/test/org/openqa/selenium/remote/http/RetryRequestTest.java index de648f5301ce7..a2fd87ccb020e 100644 --- a/java/test/org/openqa/selenium/remote/http/RetryRequestTest.java +++ b/java/test/org/openqa/selenium/remote/http/RetryRequestTest.java @@ -17,7 +17,6 @@ package org.openqa.selenium.remote.http; -import static java.net.HttpURLConnection.HTTP_CLIENT_TIMEOUT; import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR; import static java.net.HttpURLConnection.HTTP_OK; import static java.net.HttpURLConnection.HTTP_UNAVAILABLE; @@ -26,6 +25,9 @@ import static org.openqa.selenium.remote.http.HttpMethod.GET; import com.google.common.collect.ImmutableMap; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.net.ConnectException; import java.net.MalformedURLException; import java.net.URI; import java.time.Duration; @@ -37,6 +39,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -73,6 +76,29 @@ void canThrowUnexpectedException() { UnsupportedOperationException.class, () -> handler.execute(new HttpRequest(GET, "/"))); } + @Test + void noUnexpectedRetry() { + AtomicInteger count = new AtomicInteger(); + HttpHandler handler = + new RetryRequest() + .andFinally( + (HttpRequest request) -> { + if (count.getAndIncrement() == 0) { + throw new StackOverflowError("Testing"); + } else { + throw new UncheckedIOException("More testing", new IOException()); + } + }); + + Assertions.assertThrows( + StackOverflowError.class, () -> handler.execute(new HttpRequest(GET, "/"))); + Assertions.assertEquals(1, count.get()); + + Assertions.assertThrows( + UncheckedIOException.class, () -> handler.execute(new HttpRequest(GET, "/"))); + Assertions.assertEquals(2, count.get()); + } + @Test void canReturnAppropriateFallbackResponse() { HttpHandler handler1 = @@ -106,17 +132,23 @@ void canReturnAppropriateFallbackResponseWithMultipleThreads() new RetryRequest() .andFinally((HttpRequest request) -> new HttpResponse().setStatus(HTTP_UNAVAILABLE)); - ExecutorService executorService = Executors.newFixedThreadPool(2); + ExecutorService executorService = Executors.newFixedThreadPool(3); List> tasks = new ArrayList<>(); - tasks.add(() -> client.execute(connectionTimeoutRequest)); - tasks.add(() -> handler2.execute(new HttpRequest(GET, "/"))); + for (int i = 0; i < 1024; i++) { + tasks.add(() -> client.execute(connectionTimeoutRequest)); + tasks.add(() -> handler2.execute(new HttpRequest(GET, "/"))); + } List> results = executorService.invokeAll(tasks); - Assertions.assertEquals(HTTP_CLIENT_TIMEOUT, results.get(0).get().getStatus()); + for (int i = 0; i < 1024; i++) { + int offset = i * 2; + Assertions.assertThrows(ExecutionException.class, () -> results.get(offset).get()); + Assertions.assertEquals(HTTP_UNAVAILABLE, results.get(offset + 1).get().getStatus()); + } - Assertions.assertEquals(HTTP_UNAVAILABLE, results.get(1).get().getStatus()); + executorService.shutdown(); } @Test @@ -266,13 +298,59 @@ void shouldGetTheErrorResponseOnServerUnavailableError() { @Test void shouldBeAbleToRetryARequestOnConnectionFailure() { - AppServer server = new NettyAppServer(req -> new HttpResponse()); + AtomicInteger count = new AtomicInteger(0); + HttpHandler handler = + new RetryRequest() + .andFinally( + (HttpRequest request) -> { + if (count.getAndIncrement() < 2) { + throw new UncheckedIOException(new ConnectException()); + } else { + return new HttpResponse(); + } + }); - URI uri = URI.create(server.whereIs("/")); - HttpRequest request = - new HttpRequest(GET, String.format(REQUEST_PATH, uri.getHost(), uri.getPort())); + HttpRequest request = new HttpRequest(GET, "/"); + HttpResponse response = handler.execute(request); - HttpResponse response = client.execute(request); - assertThat(response).extracting(HttpResponse::getStatus).isEqualTo(HTTP_CLIENT_TIMEOUT); + assertThat(response).extracting(HttpResponse::getStatus).isEqualTo(HTTP_OK); + assertThat(count.get()).isEqualTo(3); + } + + @Test + void shouldRethrowOnConnectFailure() { + AtomicInteger count = new AtomicInteger(0); + AtomicReference lastThrown = new AtomicReference<>(); + HttpHandler handler = + new RetryRequest() + .andFinally( + (HttpRequest request) -> { + count.getAndIncrement(); + lastThrown.set(new UncheckedIOException(new ConnectException())); + throw lastThrown.get(); + }); + + UncheckedIOException thrown = + Assertions.assertThrows( + UncheckedIOException.class, () -> handler.execute(new HttpRequest(GET, "/"))); + assertThat(thrown).isSameAs(lastThrown.get()); + assertThat(count.get()).isEqualTo(4); + } + + @Test + void shouldDeliverUnmodifiedServerErrors() { + AtomicInteger count = new AtomicInteger(0); + AtomicReference lastResponse = new AtomicReference<>(); + HttpHandler handler = + new RetryRequest() + .andFinally( + (HttpRequest request) -> { + count.getAndIncrement(); + lastResponse.set(new HttpResponse().setStatus(500)); + return lastResponse.get(); + }); + + assertThat(handler.execute(new HttpRequest(GET, "/"))).isSameAs(lastResponse.get()); + assertThat(count.get()).isEqualTo(3); } } From d84fb38ab85e1770d7fc7499109379051e836329 Mon Sep 17 00:00:00 2001 From: Diego Molina Date: Mon, 30 Dec 2024 10:15:24 +0100 Subject: [PATCH 2/8] [ci] Reducing the days for a stale issue 6 months is enough --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 987c0e6d171b8..82150e43bc059 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -21,7 +21,7 @@ jobs: stale-issue-message: 'This issue is stale because it has been open 280 days with no activity. Remove stale label or comment or this will be closed in 14 days.' close-issue-message: 'This issue was closed because it has been stalled for 14 days with no activity.' stale-issue-label: 'I-stale' - days-before-stale: 280 + days-before-stale: 180 days-before-close: 14 - uses: actions/stale@v9 with: From 95d67c3204b963ef5946255c38e01f71e35f2a90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Sautter?= Date: Mon, 30 Dec 2024 11:34:50 +0100 Subject: [PATCH 3/8] [grid] added missing locks related to health checks --- .../distributor/local/LocalDistributor.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java b/java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java index 926dceb864c03..9bf2f880a56ad 100644 --- a/java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java +++ b/java/src/org/openqa/selenium/grid/distributor/local/LocalDistributor.java @@ -355,6 +355,7 @@ public LocalDistributor add(Node node) { // An exception occurs if Node heartbeat has started but the server is not ready. // Unhandled exception blocks the event-bus thread from processing any event henceforth. NodeStatus initialNodeStatus; + Runnable healthCheck; try { initialNodeStatus = node.getStatus(); if (initialNodeStatus.getAvailability() != UP) { @@ -363,8 +364,17 @@ public LocalDistributor add(Node node) { // We do not need to add this Node for now. return this; } - model.add(initialNodeStatus); - nodes.put(node.getId(), node); + // Extract the health check + healthCheck = asRunnableHealthCheck(node); + Lock writeLock = lock.writeLock(); + writeLock.lock(); + try { + nodes.put(node.getId(), node); + model.add(initialNodeStatus); + allChecks.put(node.getId(), healthCheck); + } finally { + writeLock.unlock(); + } } catch (Exception e) { LOG.log( Debug.getDebugLogLevel(), @@ -373,10 +383,6 @@ public LocalDistributor add(Node node) { return this; } - // Extract the health check - Runnable healthCheck = asRunnableHealthCheck(node); - allChecks.put(node.getId(), healthCheck); - updateNodeStatus(initialNodeStatus, healthCheck); LOG.info( @@ -415,7 +421,15 @@ private void updateNodeStatus(NodeStatus status, Runnable healthCheck) { private Runnable runNodeHealthChecks() { return () -> { - ImmutableMap nodeHealthChecks = ImmutableMap.copyOf(allChecks); + ImmutableMap nodeHealthChecks; + Lock readLock = this.lock.readLock(); + readLock.lock(); + try { + nodeHealthChecks = ImmutableMap.copyOf(allChecks); + } finally { + readLock.unlock(); + } + for (Runnable nodeHealthCheck : nodeHealthChecks.values()) { GuardedRunnable.guard(nodeHealthCheck).run(); } From 18087e259fd9e0c02dbb7826b250a73502dc32c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Sautter?= Date: Mon, 30 Dec 2024 11:46:24 +0100 Subject: [PATCH 4/8] [grid] removed a misleading lock from the grid model --- .../selenium/grid/distributor/GridModel.java | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/java/src/org/openqa/selenium/grid/distributor/GridModel.java b/java/src/org/openqa/selenium/grid/distributor/GridModel.java index 3aa27085e1f81..c187de3a2ab4a 100644 --- a/java/src/org/openqa/selenium/grid/distributor/GridModel.java +++ b/java/src/org/openqa/selenium/grid/distributor/GridModel.java @@ -400,7 +400,12 @@ public void release(SessionId id) { } } - public void reserve(NodeStatus status, Slot slot) { + /** + * A helper to reserve a slot of a node. The writeLock must be acquired outside to ensure the view + * of the NodeStatus is the current state, otherwise concurrent calls to amend will work with an + * outdated view of slots. + */ + private void reserve(NodeStatus status, Slot slot) { Instant now = Instant.now(); Slot reserved = @@ -490,6 +495,11 @@ public void updateHealthCheckCount(NodeId id, Availability availability) { } } + /** + * A helper to replace the availability and a slot of a node. The writeLock must be acquired + * outside to ensure the view of the NodeStatus is the current state, otherwise concurrent calls + * to amend will work with an outdated view of slots. + */ private void amend(Availability availability, NodeStatus status, Slot slot) { Set newSlots = new HashSet<>(status.getSlots()); newSlots.removeIf(s -> s.getId().equals(slot.getId())); @@ -497,23 +507,17 @@ private void amend(Availability availability, NodeStatus status, Slot slot) { NodeStatus node = getNode(status.getNodeId()); - Lock writeLock = lock.writeLock(); - writeLock.lock(); - try { - nodes.remove(node); - nodes.add( - new NodeStatus( - status.getNodeId(), - status.getExternalUri(), - status.getMaxSessionCount(), - newSlots, - availability, - status.getHeartbeatPeriod(), - status.getSessionTimeout(), - status.getVersion(), - status.getOsInfo())); - } finally { - writeLock.unlock(); - } + nodes.remove(node); + nodes.add( + new NodeStatus( + status.getNodeId(), + status.getExternalUri(), + status.getMaxSessionCount(), + newSlots, + availability, + status.getHeartbeatPeriod(), + status.getSessionTimeout(), + status.getVersion(), + status.getOsInfo())); } } From 9c9cd274eb0078923ff2a5c4a6793f63825f7c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Sautter?= Date: Mon, 30 Dec 2024 11:56:06 +0100 Subject: [PATCH 5/8] [grid] ensure the current session count is correct --- .../src/org/openqa/selenium/grid/node/local/LocalNode.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/java/src/org/openqa/selenium/grid/node/local/LocalNode.java b/java/src/org/openqa/selenium/grid/node/local/LocalNode.java index 49d5af6dfa184..fc5ab455f0439 100644 --- a/java/src/org/openqa/selenium/grid/node/local/LocalNode.java +++ b/java/src/org/openqa/selenium/grid/node/local/LocalNode.java @@ -377,8 +377,10 @@ public boolean isReady() { @VisibleForTesting @ManagedAttribute(name = "CurrentSessions") public int getCurrentSessionCount() { + // we need the exact size, see javadoc of Cache.size + long n = currentSessions.asMap().values().stream().count(); // It seems wildly unlikely we'll overflow an int - return Math.toIntExact(currentSessions.size()); + return Math.toIntExact(n); } @VisibleForTesting @@ -1005,6 +1007,9 @@ public HealthCheck getHealthCheck() { public void drain() { bus.fire(new NodeDrainStarted(getId())); draining = true; + // Ensure the pendingSessions counter will not be decremented by timed out sessions not included + // in the currentSessionCount and the NodeDrainComplete will be raised to early. + currentSessions.cleanUp(); int currentSessionCount = getCurrentSessionCount(); if (currentSessionCount == 0) { LOG.info("Firing node drain complete message"); From c6da9f791cadf53e7f2a1f7df62578514031359b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:18:58 +0100 Subject: [PATCH 6/8] [dotnet][java][js][py][rb][rust] Update dependency bazel to v7.4.1 (#14973) * [dotnet][java][js][py][rb][rust] Update dependency bazel to v7.4.1 * Repin dependencies --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Selenium CI Bot Co-authored-by: Diego Molina --- .bazelversion | 2 +- rust/Cargo.Bazel.lock | 75 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 70 insertions(+), 7 deletions(-) diff --git a/.bazelversion b/.bazelversion index 643916c03f1f6..815da58b7a9ed 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.3.1 +7.4.1 diff --git a/rust/Cargo.Bazel.lock b/rust/Cargo.Bazel.lock index cc1f5e566bf25..f1c7f097d2839 100644 --- a/rust/Cargo.Bazel.lock +++ b/rust/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "d9285b63a8ce42183b3092dd0140c47d4711a9fa8b5016eaeaa0be37ec80b44b", + "checksum": "87f471e3241881a49b45fd55d0a4e812b38e0ee58bf72dfbc091df4f5fe87ef5", "crates": { "addr2line 0.21.0": { "name": "addr2line", @@ -2039,16 +2039,79 @@ "id": "jobserver 0.1.31", "target": "jobserver" }, - { - "id": "libc 0.2.168", - "target": "libc" - }, { "id": "shlex 1.3.0", "target": "shlex" } ], - "selects": {} + "selects": { + "aarch64-apple-darwin": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "aarch64-unknown-linux-gnu": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "aarch64-unknown-nixos-gnu": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "arm-unknown-linux-gnueabi": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "i686-unknown-linux-gnu": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "powerpc-unknown-linux-gnu": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "s390x-unknown-linux-gnu": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "x86_64-apple-darwin": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "x86_64-unknown-freebsd": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "x86_64-unknown-linux-gnu": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ], + "x86_64-unknown-nixos-gnu": [ + { + "id": "libc 0.2.168", + "target": "libc" + } + ] + } }, "edition": "2018", "version": "1.1.30" From e7f55240a307d956e8ac502886541de38a525126 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:01:30 +0100 Subject: [PATCH 7/8] [dotnet][java][js][py][rb][rust] Update dependency protobuf to v29.2 (#14976) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index a0c3d8aead1bb..11488524b1e01 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -12,7 +12,7 @@ bazel_dep(name = "contrib_rules_jvm", version = "0.27.0") bazel_dep(name = "platforms", version = "0.0.10") # Required for the closure rules -bazel_dep(name = "protobuf", version = "29.1", dev_dependency = True, repo_name = "com_google_protobuf") +bazel_dep(name = "protobuf", version = "29.2", dev_dependency = True, repo_name = "com_google_protobuf") # Required for rules_rust to import the crates properly bazel_dep(name = "rules_cc", version = "0.0.9", dev_dependency = True) From 1884d3f0ad74f1d2d50163bd513a6d1523b85b7b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 13:19:02 +0530 Subject: [PATCH 8/8] [java] Update dependency com.google.googlejavaformat:google-java-format to v1.25.2 (#14978) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Selenium CI Bot Co-authored-by: Puja Jagani --- MODULE.bazel | 2 +- java/maven_install.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 11488524b1e01..48d22460488a4 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -177,7 +177,7 @@ maven.install( "com.google.auto:auto-common:1.2.2", "com.google.auto.service:auto-service:1.1.1", "com.google.auto.service:auto-service-annotations:1.1.1", - "com.google.googlejavaformat:google-java-format:jar:1.25.0", + "com.google.googlejavaformat:google-java-format:1.25.2:1.25.0", "com.graphql-java:graphql-java:22.3", "dev.failsafe:failsafe:3.3.2", "io.grpc:grpc-context:1.68.1", diff --git a/java/maven_install.json b/java/maven_install.json index 25b1acef66bdc..3b0014768889a 100644 --- a/java/maven_install.json +++ b/java/maven_install.json @@ -1,6 +1,6 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 818842380, + "__INPUT_ARTIFACTS_HASH": 509061279, "__RESOLVED_ARTIFACTS_HASH": 1188602649, "artifacts": { "com.beust:jcommander": {