diff --git a/repository-test/src/main/java/tech/ydb/yoj/repository/test/RepositoryTestSupport.java b/repository-test/src/main/java/tech/ydb/yoj/repository/test/RepositoryTestSupport.java index 1421b6c0..6cbe33db 100644 --- a/repository-test/src/main/java/tech/ydb/yoj/repository/test/RepositoryTestSupport.java +++ b/repository-test/src/main/java/tech/ydb/yoj/repository/test/RepositoryTestSupport.java @@ -15,7 +15,10 @@ public abstract class RepositoryTestSupport { protected Repository repository; static { - Runtime.getRuntime().addShutdownHook(new Thread(() -> repositoryMap.values().forEach(Repository::dropDb))); + Runtime.getRuntime().addShutdownHook(new Thread(() -> repositoryMap.values().forEach(repo -> { + repo.dropDb(); + repo.shutdown(); + }))); } protected abstract Repository createRepository(); diff --git a/repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/YdbRepository.java b/repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/YdbRepository.java index 9a0a0659..869e9870 100644 --- a/repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/YdbRepository.java +++ b/repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/YdbRepository.java @@ -1,7 +1,6 @@ package tech.ydb.yoj.repository.ydb; import com.google.common.base.Strings; -import com.google.common.base.Suppliers; import io.grpc.ClientInterceptor; import io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder; import lombok.Getter; @@ -82,7 +81,7 @@ public YdbRepository(@NonNull YdbConfig config, @NonNull GrpcTransport transport CloseableMemoizer sessionManager = MoreSuppliers.memoizeCloseable(() -> new YdbSessionManager(config, transport)); this.sessionManager = sessionManager; - this.schemaOperations = Suppliers.memoize(() -> buildSchemaOperations(config.getTablespace(), transport, sessionManager.get())); + this.schemaOperations = MoreSuppliers.memoize(() -> buildSchemaOperations(config.getTablespace(), transport, sessionManager.get())); } private static GrpcTransport makeGrpcTransport( diff --git a/util/src/main/java/tech/ydb/yoj/util/function/MoreSuppliers.java b/util/src/main/java/tech/ydb/yoj/util/function/MoreSuppliers.java index 12e55ba2..18840a11 100644 --- a/util/src/main/java/tech/ydb/yoj/util/function/MoreSuppliers.java +++ b/util/src/main/java/tech/ydb/yoj/util/function/MoreSuppliers.java @@ -1,20 +1,28 @@ package tech.ydb.yoj.util.function; -import com.google.common.base.Supplier; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; +import javax.annotation.Nullable; +import java.util.function.Supplier; + +import static lombok.AccessLevel.PRIVATE; + public final class MoreSuppliers { private MoreSuppliers() { } + public static Memoizer memoize(Supplier supplier) { + return new Memoizer<>(supplier); + } + public static CloseableMemoizer memoizeCloseable(Supplier supplier) { return new CloseableMemoizer<>(supplier); } - @RequiredArgsConstructor - public static final class CloseableMemoizer implements Supplier, AutoCloseable { - private final Supplier delegate; + @RequiredArgsConstructor(access = PRIVATE) + public static class Memoizer implements Supplier { + protected final Supplier delegate; private volatile T value; @Override @@ -33,17 +41,34 @@ public boolean isInitialized() { return value != null; } + @Nullable + public T orElseNull() { + return value; + } + + @Override + public String toString() { + return "MoreSuppliers.memoize(initialized=" + isInitialized() + ", delegate=" + delegate + ")"; + } + } + + public static final class CloseableMemoizer extends Memoizer implements AutoCloseable { + private CloseableMemoizer(Supplier delegate) { + super(delegate); + } + @Override @SneakyThrows public void close() { - if (value != null) { - value.close(); + T t = orElseNull(); + if (t != null) { + t.close(); } } @Override public String toString() { - return "MoreSuppliers.memoizeCloseable(" + (value != null ? "" : delegate) + ")"; + return "MoreSuppliers.memoizeCloseable(initialized=" + isInitialized() + ", delegate=" + delegate + ")"; } } }