diff --git a/src/main/java/it/cavallium/dbengine/client/DatabaseOptions.java b/src/main/java/it/cavallium/dbengine/client/DatabaseOptions.java index 4ed72f8..3a8b6a9 100644 --- a/src/main/java/it/cavallium/dbengine/client/DatabaseOptions.java +++ b/src/main/java/it/cavallium/dbengine/client/DatabaseOptions.java @@ -14,4 +14,5 @@ public record DatabaseOptions(Map extraFlags, boolean allowMemoryMapping, boolean allowNettyDirect, boolean useNettyDirect, - boolean enableDbAssertionsWhenUsingAssertions) {} + boolean enableDbAssertionsWhenUsingAssertions, + int maxOpenFiles) {} diff --git a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java index 9ef4b71..6bf34be 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java @@ -296,6 +296,7 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase { 600L * 1024L * 1024L * 1024L)); // 600GiB options.setDbPaths(paths); options.setCfPaths(paths); + options.setMaxOpenFiles(databaseOptions.maxOpenFiles()); // Direct I/O parameters. Removed because they use too much disk. //options.setUseDirectReads(true); //options.setUseDirectIoForFlushAndCompaction(true); @@ -309,7 +310,6 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase { .setBytesPerSync(0) // default .setWalBytesPerSync(0) // default .setIncreaseParallelism(1) - .setMaxOpenFiles(15) .optimizeLevelStyleCompaction(1024 * 1024) // 1MiB of ram will be used for level style compaction .setWriteBufferSize(1024 * 1024) // 1MB .setWalTtlSeconds(0) @@ -345,7 +345,6 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase { .setIncreaseParallelism(Runtime.getRuntime().availableProcessors()) .setBytesPerSync(1 * 1024 * 1024) // 1MiB .setWalBytesPerSync(10 * 1024 * 1024) - .setMaxOpenFiles(1500) .optimizeLevelStyleCompaction( 128 * 1024 * 1024) // 128MiB of ram will be used for level style compaction .setWriteBufferSize(64 * 1024 * 1024) // 64MB @@ -375,7 +374,6 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase { .setCompactionReadaheadSize(4 * 1024 * 1024) // recommend at least 2MB // Option to tune write buffer for direct writes .setWritableFileMaxBufferSize(4 * 1024 * 1024) - .setMaxOpenFiles(-1) ; } } diff --git a/src/test/java/it/cavallium/dbengine/DbTestUtils.java b/src/test/java/it/cavallium/dbengine/DbTestUtils.java index 911f2a9..a2c6228 100644 --- a/src/test/java/it/cavallium/dbengine/DbTestUtils.java +++ b/src/test/java/it/cavallium/dbengine/DbTestUtils.java @@ -58,7 +58,7 @@ public class DbTestUtils { .then(new LLLocalDatabaseConnection(DbTestUtils.ALLOCATOR, wrkspcPath).connect()) .flatMap(conn -> conn.getDatabase("testdb", List.of(Column.dictionary("testmap"), Column.special("ints"), Column.special("longs")), - new DatabaseOptions(Map.of(), true, false, true, false, true, true, true, true) + new DatabaseOptions(Map.of(), true, false, true, false, true, true, true, true, -1) )), action, db -> db.close().then(Mono.fromCallable(() -> { diff --git a/src/test/java/it/cavallium/dbengine/OldDatabaseTests.java b/src/test/java/it/cavallium/dbengine/OldDatabaseTests.java index b32759f..5fefdb5 100644 --- a/src/test/java/it/cavallium/dbengine/OldDatabaseTests.java +++ b/src/test/java/it/cavallium/dbengine/OldDatabaseTests.java @@ -135,7 +135,7 @@ public class OldDatabaseTests { .then(new LLLocalDatabaseConnection(PooledByteBufAllocator.DEFAULT, wrkspcPath).connect()) .flatMap(conn -> conn.getDatabase("testdb", List.of(Column.dictionary("testmap")), - new DatabaseOptions(Map.of(), true, false, true, false, true, true, true, true) + new DatabaseOptions(Map.of(), true, false, true, false, true, true, true, true, -1) )); }