@@ -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
101125class RocksDBKeyIterator (it : RocksIterator , prefix : Option [String ]) extends Iterator [String ] {
0 commit comments