Skip to content

Commit 304a031

Browse files
committed
optionally read rocksdb configfile
1 parent 9a6cf01 commit 304a031

File tree

4 files changed

+25
-8
lines changed

4 files changed

+25
-8
lines changed

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ libraryDependencies ++= Seq(
2525
"org.scalatest" % "scalatest_2.12" % "3.0.4" % "test",
2626
"io.grpc" % "grpc-netty" % com.trueaccord.scalapb.compiler.Version.grpcJavaVersion,
2727
"com.trueaccord.scalapb" %% "scalapb-runtime-grpc" % com.trueaccord.scalapb.compiler.Version.scalapbVersion,
28-
"org.rocksdb" % "rocksdbjni" % "5.1.2",
28+
"org.rocksdb" % "rocksdbjni" % "5.11.3",
2929
"com.github.scopt" %% "scopt" % "3.7.0"
3030
)
3131

src/main/scala/com/scalableminds/fossildb/FossilDB.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import fossildb.BuildInfo
88

99
import scala.concurrent.ExecutionContext
1010

11-
object ConfigDefaults {val port = 7155; val dataDir = "data"; val backupDir = "backup"; val columnFamilies = List()}
11+
object ConfigDefaults {val port = 7155; val dataDir = "data"; val backupDir = "backup"; val columnFamilies = List(); val rocksOptionsFile = None}
1212
case class Config(port: Int = ConfigDefaults.port, dataDir: String = ConfigDefaults.dataDir,
13-
backupDir: String = ConfigDefaults.backupDir, columnFamilies: List[String] = ConfigDefaults.columnFamilies)
13+
backupDir: String = ConfigDefaults.backupDir, columnFamilies: List[String] = ConfigDefaults.columnFamilies,
14+
rocksOptionsFile: Option[String] = ConfigDefaults.rocksOptionsFile)
1415

1516
object FossilDB extends LazyLogging {
1617
def main(args: Array[String]) = {
@@ -24,7 +25,7 @@ object FossilDB extends LazyLogging {
2425
logger.info("BuildInfo: (" + BuildInfo + ")")
2526
logger.info("Config: " + config)
2627

27-
val storeManager = new StoreManager(Paths.get(config.dataDir), Paths.get(config.backupDir), config.columnFamilies)
28+
val storeManager = new StoreManager(Paths.get(config.dataDir), Paths.get(config.backupDir), config.columnFamilies, config.rocksOptionsFile)
2829

2930
val server = new FossilDBServer(storeManager, config.port, ExecutionContext.global)
3031

@@ -51,6 +52,9 @@ object FossilDB extends LazyLogging {
5152

5253
opt[Seq[String]]('c', "columnFamilies").required.valueName("<cf1>,<cf2>...").action( (x, c) =>
5354
c.copy(columnFamilies = x.toList) ).text("column families of the database (created if there is no db yet)")
55+
56+
opt[String]('r', "rocksOptionsFile").valueName("<filepath>").action( (x, c) =>
57+
c.copy(rocksOptionsFile = Some(x)) ).text("rocksdb options file. Default: " + ConfigDefaults.rocksOptionsFile)
5458
}
5559

5660
parser.parse(args, Config())

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ import com.typesafe.scalalogging.LazyLogging
1010
import org.rocksdb._
1111

1212
import scala.collection.JavaConverters._
13+
import scala.collection.mutable
1314
import scala.concurrent.Future
1415

1516
case class BackupInfo(id: Int, timestamp: Long, size: Long)
1617

1718
case class KeyValuePair[T](key: String, value: T)
1819

19-
class RocksDBManager(dataDir: Path, columnFamilies: List[String]) extends LazyLogging {
20+
class RocksDBManager(dataDir: Path, columnFamilies: List[String], optionsFilePathOpt: Option[String]) extends LazyLogging {
2021

2122
val (db: RocksDB, columnFamilyHandles) = {
2223
RocksDB.loadLibrary()
@@ -28,9 +29,21 @@ class RocksDBManager(dataDir: Path, columnFamilies: List[String]) extends LazyLo
2829
new ColumnFamilyDescriptor(columnFamily, columnOptions)
2930
}
3031
val columnFamilyHandles = new util.ArrayList[ColumnFamilyHandle]
31-
val options = new DBOptions()
32+
var options = new DBOptions()
3233
.setCreateIfMissing(true)
3334
.setCreateMissingColumnFamilies(true)
35+
var cfListRef: mutable.Buffer[ColumnFamilyDescriptor] = mutable.Buffer()
36+
optionsFilePathOpt.map { optionsFilePath =>
37+
try {
38+
org.rocksdb.OptionsUtil.loadOptionsFromFile(optionsFilePath, Env.getDefault, options, cfListRef.asJava)
39+
logger.info("successfully loaded rocksdb options from " + optionsFilePath)
40+
} catch {
41+
case e: Exception => {
42+
logger.error("Failed to load rocksdb options from file " + optionsFilePath + ": " + e.getMessage)
43+
System.exit(1)
44+
}
45+
}
46+
}
3447
logger.info("Opening RocksDB at " + dataDir.toAbsolutePath)
3548
val db = RocksDB.open(
3649
options,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ package com.scalableminds.fossildb.db
66
import java.nio.file.Path
77
import java.util.concurrent.atomic.AtomicBoolean
88

9-
class StoreManager(dataDir: Path, backupDir: Path, columnFamilies: List[String]) {
9+
class StoreManager(dataDir: Path, backupDir: Path, columnFamilies: List[String], rocksdbOptions: Option[String]) {
1010

1111
var rocksDBManager: Option[RocksDBManager] = None
1212
var stores: Option[Map[String, VersionedKeyValueStore]] = None
@@ -15,7 +15,7 @@ class StoreManager(dataDir: Path, backupDir: Path, columnFamilies: List[String])
1515

1616
def reInitialize = {
1717
rocksDBManager.map(_.close)
18-
rocksDBManager = Some(new RocksDBManager(dataDir, columnFamilies))
18+
rocksDBManager = Some(new RocksDBManager(dataDir, columnFamilies, rocksdbOptions))
1919
stores = Some(columnFamilies.map { cf =>
2020
val store: VersionedKeyValueStore = new VersionedKeyValueStore(rocksDBManager.get.getStoreForColumnFamily(cf).get)
2121
(cf -> store)

0 commit comments

Comments
 (0)