package com.alibaba.doris.dataserver.store.bdb;
import java.io.File;
import com.alibaba.doris.dataserver.store.Storage;
import com.alibaba.doris.dataserver.store.StorageConfig;
import com.alibaba.doris.dataserver.store.StorageDriver;
import com.alibaba.doris.dataserver.store.StorageType;
import com.alibaba.doris.dataserver.store.bdb.utils.BDBConfigUtil;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class BDBStorageDriver implements StorageDriver {
public Storage createStorage() {
return new BDBStorage(databaseFactory);
}
public void init(StorageConfig config) {
loadConfig(config);
initStorageDriver();
}
private void initStorageDriver() {
File dbDir = new File(bdbConfig.getDataDirectory());
if (!dbDir.exists()) {
// logger.info("Creating BDB data directory '" + bdbDir.getAbsolutePath() + ".");
dbDir.mkdirs();
}
databaseFactory = new BDBDataBaseFactory(environmentConfig, databaseConfig, bdbConfig);
databaseFactory.initFactory();
}
protected Environment getEnv() {
return env;
}
protected DatabaseConfig getDatabaseConfig() {
return databaseConfig;
}
protected BDBStorageConfig getBDBStorageConfig() {
return bdbConfig;
}
private void loadConfig(StorageConfig config) {
bdbConfig = BDBConfigUtil.loadBDBStorageConfigFromFile(config.getPropertiesFile());
String databasePath = config.getDatabasePath();
// 如果命令行里面设置了数据库文件路径,则覆盖配置文件中的路径设置。
if (null != databasePath) {
bdbConfig.setDataDirectory(databasePath);
}
environmentConfig = bdbConfig.getEnvironmentConfig();
databaseConfig = bdbConfig.getDatabaseConfig();
}
public StorageType getStorageType() {
return type;
}
private EnvironmentConfig environmentConfig;
private DatabaseConfig databaseConfig;
private BDBStorageConfig bdbConfig;
private BDBDataBaseFactory databaseFactory;
private volatile Environment env;
protected static final BDBStorageType type = new BDBStorageType();
}