Compare commits

...

3 Commits

Author SHA1 Message Date
Andrea Cavalli 34e8eb0259 Update dependencies, improve rocksdb loader 2024-03-26 21:49:45 +01:00
Andrea Cavalli 6cbaad6ebd Update RocksDB, fix loader 2024-03-26 21:18:44 +01:00
Andrea Cavalli e3944dc3be Fix gestalt 2023-12-12 22:28:43 +01:00
4 changed files with 48 additions and 19 deletions

View File

@ -12,8 +12,8 @@
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<native.maven.plugin.version>0.9.28</native.maven.plugin.version>
<gestalt.version>0.24.1</gestalt.version>
<rocksdb.version>8.8.1</rocksdb.version>
<gestalt.version>0.24.2</gestalt.version>
<rocksdb.version>9.0.0</rocksdb.version>
<imageName>rockserver-core</imageName>
<mainClass>it.cavallium.rockserver.core.Main</mainClass>
</properties>
@ -37,7 +37,7 @@
<dependency>
<groupId>com.github.seancfoley</groupId>
<artifactId>ipaddress</artifactId>
<version>5.4.0</version>
<version>5.5.0</version>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>

View File

@ -7,6 +7,7 @@ import it.cavallium.rockserver.core.impl.DbCompressionDecoder;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.github.gestalt.config.builder.GestaltBuilder;
import org.github.gestalt.config.builder.SourceBuilder;
import org.github.gestalt.config.exceptions.GestaltException;
@ -22,7 +23,6 @@ public class ConfigParser {
gsb = new GestaltBuilder();
gsb
.setTreatMissingArrayIndexAsError(false)
.setTreatEmptyCollectionAsErrors(false)
.setTreatNullValuesInClassAsErrors(false)
.setTreatMissingValuesAsErrors(false)
.addDecoder(new DataSizeDecoder())

View File

@ -42,15 +42,7 @@ public class ConfigPrinter {
}
public static List<VolumeConfig> getVolumeConfigs(GlobalDatabaseConfig g) throws GestaltException {
try {
return List.of(g.volumes());
} catch (GestaltException ex) {
if (ex.getMessage().startsWith("Failed to get cached object from proxy config while calling method:")) {
return List.of();
} else {
throw ex;
}
}
return List.of(g.volumes());
}
public static String stringifyGlobalDatabase(GlobalDatabaseConfig o) throws GestaltException {

View File

@ -2,10 +2,14 @@ package it.cavallium.rockserver.core.impl.rocksdb;
import it.cavallium.rockserver.core.common.RocksDBException.RocksDBErrorType;
import it.cavallium.rockserver.core.config.*;
import java.io.File;
import java.io.InputStream;
import java.nio.file.StandardCopyOption;
import org.github.gestalt.config.exceptions.GestaltException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.rocksdb.*;
import org.rocksdb.util.Environment;
import org.rocksdb.util.SizeUnit;
import java.io.IOException;
@ -30,20 +34,53 @@ public class RocksDBLoader {
private static final boolean USE_CLOCK_CACHE
= Boolean.parseBoolean(System.getProperty("it.cavallium.dbengine.clockcache.enable", "false"));
private static final CacheFactory CACHE_FACTORY = USE_CLOCK_CACHE ? new ClockCacheFactory() : new LRUCacheFactory();
private static final String bugJniLibraryFileName = Environment.getJniLibraryFileName("rocksdbjni");
private static final String jniLibraryFileName = Environment.getJniLibraryFileName("rocksdb");
@Nullable
private static final String fallbackJniLibraryFileName = Environment.getFallbackJniLibraryFileName("rocksdb");
@Nullable
private static final String bugFallbackJniLibraryFileName = Environment.getFallbackJniLibraryFileName("rocksdbjni");
public static void loadLibrary() {
RocksDB.loadLibrary();
/* todo: rocksdb does not support loading the library outside of the default mechanism
try {
var jniPath = Path.of(".").resolve("jni").resolve(RocksDBMetadata.getRocksDBVersionHash());
String currentUsersHomeDir = System.getProperty("user.home");
var jniPath = Path.of(currentUsersHomeDir).resolve(".jni").resolve("rocksdb").resolve(RocksDBMetadata.getRocksDBVersionHash());
if (Files.notExists(jniPath)) {
Files.createDirectories(jniPath);
}
// todo:
loadLibraryFromJarToTemp(jniPath);
RocksDB.loadLibrary(List.of(jniPath.toAbsolutePath().toString()));
} catch (IOException e) {
RocksDB.loadLibrary();
}
*/
}
private static Path loadLibraryFromJarToTemp(final Path tmpDir) throws IOException {
var temp1 = tmpDir.resolve(bugJniLibraryFileName);
if (Files.exists(temp1)) {
return temp1;
}
try (InputStream is = RocksDB.class.getClassLoader().getResourceAsStream(jniLibraryFileName)) {
if (is != null) {
Files.copy(is, temp1, StandardCopyOption.REPLACE_EXISTING);
return temp1;
}
}
if (bugFallbackJniLibraryFileName == null) {
throw new RuntimeException("rocksdb was not found inside JAR.");
}
var temp2 = tmpDir.resolve(bugFallbackJniLibraryFileName);
try (InputStream is = RocksDB.class.getClassLoader().getResourceAsStream(fallbackJniLibraryFileName)) {
if (is != null) {
Files.copy(is, temp2, StandardCopyOption.REPLACE_EXISTING);
return temp2;
}
}
throw new RuntimeException("rocksdb was not found inside JAR.");
}
@ -537,7 +574,7 @@ public class RocksDBLoader {
}
}
record DbPathRecord(Path path, long targetSize) {}
public record DbPathRecord(Path path, long targetSize) {}
public static boolean isDisableAutoCompactions() {
return parseBoolean(System.getProperty("it.cavallium.dbengine.compactions.auto.disable", "false"));