CavalliumDBEngine/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDatabaseConnection.java

126 lines
3.5 KiB
Java
Raw Normal View History

2020-12-07 22:15:18 +01:00
package it.cavallium.dbengine.database.disk;
import io.micrometer.core.instrument.MeterRegistry;
import it.cavallium.dbengine.database.LLDatabaseConnection;
import it.cavallium.dbengine.database.LLLuceneIndex;
import it.cavallium.dbengine.lucene.LuceneHacks;
2022-03-02 12:34:30 +01:00
import it.cavallium.dbengine.rpc.current.data.Column;
import it.cavallium.dbengine.rpc.current.data.DatabaseOptions;
2022-03-05 15:46:40 +01:00
import it.cavallium.dbengine.rpc.current.data.IndicizerAnalyzers;
import it.cavallium.dbengine.rpc.current.data.IndicizerSimilarities;
import it.cavallium.dbengine.rpc.current.data.LuceneIndexStructure;
import it.cavallium.dbengine.rpc.current.data.LuceneOptions;
import it.cavallium.dbengine.utils.DBException;
import java.io.IOException;
2020-12-07 22:15:18 +01:00
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.LinkedList;
import java.util.List;
2023-03-27 22:00:32 +02:00
import java.util.StringJoiner;
import java.util.concurrent.atomic.AtomicBoolean;
import org.jetbrains.annotations.Nullable;
2020-12-07 22:15:18 +01:00
public class LLLocalDatabaseConnection implements LLDatabaseConnection {
private final AtomicBoolean connected = new AtomicBoolean();
private final MeterRegistry meterRegistry;
2020-12-07 22:15:18 +01:00
private final Path basePath;
2022-03-02 12:34:30 +01:00
private final boolean inMemory;
2020-12-07 22:15:18 +01:00
public LLLocalDatabaseConnection(
2022-03-02 12:34:30 +01:00
MeterRegistry meterRegistry,
Path basePath,
boolean inMemory) {
this.meterRegistry = meterRegistry;
2020-12-07 22:15:18 +01:00
this.basePath = basePath;
2022-03-02 12:34:30 +01:00
this.inMemory = inMemory;
2021-05-03 21:41:51 +02:00
}
public MeterRegistry getMeterRegistry() {
return meterRegistry;
}
2020-12-07 22:15:18 +01:00
@Override
public LLDatabaseConnection connect() {
if (!connected.compareAndSet(false, true)) {
throw new IllegalStateException("Already connected");
}
if (Files.notExists(basePath)) {
try {
Files.createDirectories(basePath);
} catch (IOException e) {
throw new DBException(e);
}
}
return this;
2020-12-07 22:15:18 +01:00
}
@Override
public LLLocalKeyValueDatabase getDatabase(String name, List<Column> columns, DatabaseOptions databaseOptions) {
return new LLLocalKeyValueDatabase(meterRegistry,
name,
inMemory,
getDatabasePath(name),
columns,
new LinkedList<>(),
databaseOptions
);
2020-12-07 22:15:18 +01:00
}
public Path getDatabasePath(String databaseName) {
return getDatabasePath(basePath, databaseName);
}
public static Path getDatabasePath(Path basePath, String databaseName) {
return basePath.resolve("database_" + databaseName);
}
2020-12-07 22:15:18 +01:00
@Override
public LLLuceneIndex getLuceneIndex(String clusterName,
2022-03-05 15:46:40 +01:00
LuceneIndexStructure indexStructure,
2021-05-28 16:04:59 +02:00
IndicizerAnalyzers indicizerAnalyzers,
IndicizerSimilarities indicizerSimilarities,
LuceneOptions luceneOptions,
@Nullable LuceneHacks luceneHacks) {
if (clusterName == null) {
throw new IllegalArgumentException("Cluster name must be set");
}
if (indexStructure.activeShards().size() != 1) {
return new LLLocalMultiLuceneIndex(meterRegistry,
clusterName,
indexStructure.activeShards(),
indexStructure.totalShards(),
indicizerAnalyzers,
indicizerSimilarities,
luceneOptions,
luceneHacks
);
} else {
return new LLLocalLuceneIndex(meterRegistry,
clusterName,
indexStructure.activeShards().getInt(0),
indicizerAnalyzers,
indicizerSimilarities,
luceneOptions,
luceneHacks
);
}
2020-12-07 22:15:18 +01:00
}
@Override
public void disconnect() {
if (connected.compareAndSet(true, false)) {
}
2020-12-07 22:15:18 +01:00
}
2023-03-27 22:00:32 +02:00
@Override
public String toString() {
return new StringJoiner(", ", LLLocalDatabaseConnection.class.getSimpleName() + "[", "]")
.add("connected=" + connected)
.add("meterRegistry=" + meterRegistry)
.add("basePath=" + basePath)
.add("inMemory=" + inMemory)
.toString();
}
2020-12-07 22:15:18 +01:00
}