Skip to content

Commit

Permalink
Avoid using Guava Suppliers.memoize()
Browse files Browse the repository at this point in the history
  • Loading branch information
nvamelichev committed Apr 18, 2024
1 parent 77eeffe commit 92f99af
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -82,7 +81,7 @@ public YdbRepository(@NonNull YdbConfig config, @NonNull GrpcTransport transport
CloseableMemoizer<SessionManager> 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(
Expand Down
39 changes: 32 additions & 7 deletions util/src/main/java/tech/ydb/yoj/util/function/MoreSuppliers.java
Original file line number Diff line number Diff line change
@@ -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 <T> Memoizer<T> memoize(Supplier<T> supplier) {
return new Memoizer<>(supplier);
}

public static <T extends AutoCloseable> CloseableMemoizer<T> memoizeCloseable(Supplier<T> supplier) {
return new CloseableMemoizer<>(supplier);
}

@RequiredArgsConstructor
public static final class CloseableMemoizer<T extends AutoCloseable> implements Supplier<T>, AutoCloseable {
private final Supplier<T> delegate;
@RequiredArgsConstructor(access = PRIVATE)
public static class Memoizer<T> implements Supplier<T> {
protected final Supplier<T> delegate;
private volatile T value;

@Override
Expand All @@ -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<T extends AutoCloseable> extends Memoizer<T> implements AutoCloseable {
private CloseableMemoizer(Supplier<T> 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 ? "<supplier that returned " + value + ">" : delegate) + ")";
return "MoreSuppliers.memoizeCloseable(initialized=" + isInitialized() + ", delegate=" + delegate + ")";
}
}
}

0 comments on commit 92f99af

Please sign in to comment.