Skip to content

Commit 54fc8e7

Browse files
author
Youri K
committed
old options as default
1 parent a76eb09 commit 54fc8e7

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

src/main/scala/com/scalableminds/fossildb/db/RocksDBStore.scala

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ class RocksDBManager(dataDir: Path, columnFamilies: List[String], optionsFilePat
2121

2222
val (db: RocksDB, columnFamilyHandles) = {
2323
RocksDB.loadLibrary()
24+
val columnOptions = new ColumnFamilyOptions()
25+
.setArenaBlockSize(4 * 1024 * 1024) // 4MB
26+
.setTargetFileSizeBase(1024 * 1024 * 1024) // 1GB
27+
.setMaxBytesForLevelBase(10 * 1024 * 1024 * 1024) // 10GB
2428
val options = new DBOptions()
2529
val cfListRef: mutable.Buffer[ColumnFamilyDescriptor] = mutable.Buffer()
2630
optionsFilePathOpt.foreach { optionsFilePath =>
@@ -34,7 +38,7 @@ class RocksDBManager(dataDir: Path, columnFamilies: List[String], optionsFilePat
3438
}
3539
}
3640
options.setCreateIfMissing(true).setCreateMissingColumnFamilies(true)
37-
val defaultColumnFamilyOptions = cfListRef.find(_.getName sameElements RocksDB.DEFAULT_COLUMN_FAMILY).map(_.getOptions).getOrElse(new ColumnFamilyOptions())
41+
val defaultColumnFamilyOptions = cfListRef.find(_.getName sameElements RocksDB.DEFAULT_COLUMN_FAMILY).map(_.getOptions).getOrElse(columnOptions)
3842
val newColumnFamilyDescriptors = (columnFamilies.map(_.getBytes) :+ RocksDB.DEFAULT_COLUMN_FAMILY).diff(cfListRef.toList.map(_.getName)).map(new ColumnFamilyDescriptor(_, defaultColumnFamilyOptions))
3943
val columnFamilyDescriptors = cfListRef.toList ::: newColumnFamilyDescriptors
4044
logger.info("Opening RocksDB at " + dataDir.toAbsolutePath)
@@ -85,17 +89,37 @@ class RocksDBManager(dataDir: Path, columnFamilies: List[String], optionsFilePat
8589
}
8690

8791
def writeAllSSts() = {
88-
val dbOptions = new DBOptions().setCreateIfMissing(true)
89-
val envOptions = new EnvOptions()
90-
val options = new Options(dbOptions, new ColumnFamilyOptions())
91-
val writer = new SstFileWriter(envOptions, options)
92+
val (dbOptions, columnFamilyDescriptors) = loadOptions("config/newOptions.ini")
93+
val descriptor = columnFamilyDescriptors.find(_.getName sameElements "skeletons".getBytes)
94+
val options = new Options(dbOptions, descriptor.get.getOptions)
95+
val writer = new SstFileWriter(new EnvOptions(), options)
9296
writer.open("data/test.sst")
93-
val store = getStoreForColumnFamily(columnFamilies.head)
97+
val store = getStoreForColumnFamily("skeletons")
9498
val it = store.get.scan("", None)
9599
it.foreach(el => writer.put(el.key.getBytes, el.value))
96100
writer.finish()
97101
//db.ingestExternalFile()
98102
}
103+
104+
def loadOptions(optionFilepath: String) = {
105+
val options = new DBOptions()
106+
val cfListRef: mutable.Buffer[ColumnFamilyDescriptor] = mutable.Buffer()
107+
optionsFilePathOpt.foreach { optionsFilePath =>
108+
try {
109+
org.rocksdb.OptionsUtil.loadOptionsFromFile(optionsFilePath, Env.getDefault, options, cfListRef.asJava)
110+
logger.info("successfully loaded rocksdb options from " + optionsFilePath)
111+
} catch {
112+
case e: Exception => {
113+
throw new Exception("Failed to load rocksdb options from file " + optionsFilePath, e)
114+
}
115+
}
116+
}
117+
options.setCreateIfMissing(true).setCreateMissingColumnFamilies(true)
118+
val defaultColumnFamilyOptions = cfListRef.find(_.getName sameElements RocksDB.DEFAULT_COLUMN_FAMILY).map(_.getOptions).getOrElse(new ColumnFamilyOptions())
119+
val newColumnFamilyDescriptors = (columnFamilies.map(_.getBytes) :+ RocksDB.DEFAULT_COLUMN_FAMILY).diff(cfListRef.toList.map(_.getName)).map(new ColumnFamilyDescriptor(_, defaultColumnFamilyOptions))
120+
val columnFamilyDescriptors = cfListRef.toList ::: newColumnFamilyDescriptors
121+
(options, columnFamilyDescriptors)
122+
}
99123
}
100124

101125
class RocksDBKeyIterator(it: RocksIterator, prefix: Option[String]) extends Iterator[String] {

0 commit comments

Comments
 (0)