From 0d3df69817e6be7dfb79282a5aa3524247ef824a Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Sat, 22 Feb 2025 10:27:10 +0200 Subject: [PATCH] [improve][ci] Upgrade Gradle Develocity Maven Extension to 1.23.1 (#24004) (cherry picked from commit 35c9fec78917cc2e03247f9a447d8464c91e7878) (cherry picked from commit 49ca5d6dcaac8d804602388809d516354ad41554) --- .mvn/extensions.xml | 2 +- .../metadata/BaseMetadataStoreTest.java | 36 +++++++++++++------ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml index 8ceede33b9cdc..22eaa6a1779f4 100644 --- a/.mvn/extensions.xml +++ b/.mvn/extensions.xml @@ -24,7 +24,7 @@ com.gradle develocity-maven-extension - 1.22.2 + 1.23.1 com.gradle diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java index c4bd1959accf8..5282507d5c4bc 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java @@ -25,6 +25,7 @@ import java.io.File; import java.net.URI; import java.util.Arrays; +import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletionException; @@ -128,11 +129,11 @@ private Object[][] allImplementations() { // The new connection string won't be available to the test method unless a // Supplier lambda is used for providing the value. return new Object[][]{ - {"ZooKeeper", stringSupplier(() -> zksConnectionString)}, - {"Memory", stringSupplier(() -> memoryConnectionString)}, - {"RocksDB", stringSupplier(() -> rocksdbConnectionString)}, - {"Etcd", stringSupplier(() -> "etcd:" + getEtcdClusterConnectString())}, - {"MockZooKeeper", stringSupplier(() -> mockZkUrl)}, + {"ZooKeeper", providerUrlSupplier(() -> zksConnectionString)}, + {"Memory", providerUrlSupplier(() -> memoryConnectionString)}, + {"RocksDB", providerUrlSupplier(() -> rocksdbConnectionString)}, + {"Etcd", providerUrlSupplier(() -> "etcd:" + getEtcdClusterConnectString(), "etcd:...")}, + {"MockZooKeeper", providerUrlSupplier(() -> mockZkUrl)}, }; } @@ -165,16 +166,29 @@ private synchronized String getEtcdClusterConnectString() { return etcdCluster.clientEndpoints().stream().map(URI::toString).collect(Collectors.joining(",")); } - public static Supplier stringSupplier(Supplier supplier) { - return new StringSupplier(supplier); + private static Supplier providerUrlSupplier(Supplier supplier) { + return new ProviderUrlSupplier(supplier); + } + + // Use this method to provide a custom toString value for the Supplier. Use this when Testcontainers is used + // so that a toString call doesn't eagerly trigger container initialization which could cause a deadlock + // with Gradle Develocity Maven Extension. + private static Supplier providerUrlSupplier(Supplier supplier, String toStringValue) { + return new ProviderUrlSupplier(supplier, Optional.ofNullable(toStringValue)); } // Implements toString() so that the test name is more descriptive - private static class StringSupplier implements Supplier { + private static class ProviderUrlSupplier implements Supplier { private final Supplier supplier; + private final Optional toStringValue; + + ProviderUrlSupplier(Supplier supplier) { + this(supplier, Optional.empty()); + } - public StringSupplier(Supplier supplier) { + ProviderUrlSupplier(Supplier supplier, Optional toStringValue) { this.supplier = supplier; + this.toStringValue = toStringValue; } @Override @@ -184,7 +198,9 @@ public String get() { @Override public String toString() { - return get(); + // toStringValue is used to prevent deadlocks which could occur if toString method call eagerly triggers + // Testcontainers initialization. This is the case when Gradle Develocity Maven Extension is used. + return toStringValue.orElseGet(this::get); } }