package be.bagofwords.db.experimental.rocksdb;
import be.bagofwords.application.ApplicationContext;
import be.bagofwords.db.DataInterface;
import be.bagofwords.db.DataInterfaceFactory;
import be.bagofwords.db.combinator.Combinator;
import be.bagofwords.util.Utils;
import org.rocksdb.RocksDB;
import java.io.File;
/**
* Created by Koen Deschacht (koendeschacht@gmail.com) on 9/17/14.
*/
public class RocksDBDataInterfaceFactory extends DataInterfaceFactory {
private final String directory;
private final boolean usePatch;
public RocksDBDataInterfaceFactory(ApplicationContext applicationContext, boolean usePatch) {
super(applicationContext);
this.directory = applicationContext.getConfig("data_directory");
this.usePatch = usePatch;
File libFile = findLibFile();
if (libFile == null) {
throw new RuntimeException("Could not find librocksdbjni.so");
}
Utils.addLibraryPath(libFile.getParentFile().getAbsolutePath());
RocksDB.loadLibrary();
}
private File findLibFile() {
File libFile = new File("./lib/rocksdb/linux-x86_64/librocksdbjni.so");
if (libFile.exists()) {
return libFile;
}
libFile = new File("./count-db/lib/rocksdb/linux-x86_64/librocksdbjni.so");
if (libFile.exists()) {
return libFile;
}
return null;
}
@Override
public <T> DataInterface<T> createBaseDataInterface(String nameOfSubset, Class<T> objectClass, Combinator<T> combinator, boolean isTemporaryDataInterface) {
return new RocksDBDataInterface<>(nameOfSubset, objectClass, combinator, directory, usePatch, isTemporaryDataInterface);
}
}