package com.alibaba.doris.dataserver.store.bdb;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import junit.framework.TestCase;
import com.alibaba.doris.common.data.Key;
import com.alibaba.doris.common.data.Value;
import com.alibaba.doris.common.data.impl.KeyImpl;
import com.alibaba.doris.common.data.impl.ValueImpl;
import com.alibaba.doris.common.data.util.ByteUtils;
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.bdb.utils.BDBConfigUtil;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class StorageDriverTest extends TestCase {
@Override
protected void setUp() throws Exception {
try {
driver = (StorageDriver) BDBStorageDriver.class.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
StorageConfig config = getStorageConfig();
driver.init(config);
}
public StorageConfig getStorageConfig() {
StorageConfig config = new StorageConfig();
config.setPropertiesFile("bdb_storage_test_mock.properties");
config.setSize(5000);
config.setStorageDriverClass("com.alibaba.doris.dataserver.store.bdb.BDBStorageDriver");
config.setStorageTypeClass("");
return config;
}
protected StorageDriver getStorageDriver() {
return driver;
}
protected Key createKey(String key) {
return new KeyImpl(100, key, 0);
}
protected Value createValue(String value) {
return new ValueImpl(ByteUtils.stringToByte(value), (new Date()).getTime());
}
protected void clear() {
String path = this.getClass().getClassLoader().getResource("").getPath();
File f = new File(path);
for (File file : f.listFiles()) {
if (file.getName().contains(".jdb")) {
file.delete();
} else if (file.getName().contains("je.")) {
file.delete();
}
}
}
private StorageDriver driver;
public void testLoadDriver() throws InstantiationException, IllegalAccessException {
StorageDriver driver = getStorageDriver();
Storage storage = driver.createStorage();
assertNotNull(storage);
StringBuilder sb = new StringBuilder(1024);
for (int i = 0; i < 100; i++) {
sb.append("1234567890");
}
Value value = new ValueImpl(ByteUtils.stringToByte(sb.toString()), (new Date()).getTime());
int loopTimes = 100;
try {
storage.open();
startRecordTime();
Random r = new Random();
for (int i = 0; i < loopTimes; i++) {
Key key = new KeyImpl(100, "key" + r.nextInt(loopTimes), 1);
storage.set(key, value);
Value v = storage.get(key);
assertNotNull(v);
assertNotNull(v.getValueBytes());
}
endRecordTime();
printStatisticInformation(loopTimes);
} catch (Exception e) {
e.printStackTrace();
} finally {
storage.close();
}
}
public void testCreateBDBDataBase() throws IOException {
String dbPath = BDBConfigUtil.getDataBaseDirectory();
File f = new File(dbPath);
if (f.exists()) {
// FileUtils.deleteDirectory(f);
}
BDBStorage storage = null;
try {
StorageDriver driver = getStorageDriver();
storage = (BDBStorage) driver.createStorage();
startRecordTime();
List<BDBDataBase> dbList = new ArrayList<BDBDataBase>(DB_NUMBER);
for (int i = 0; i < DB_NUMBER; i++) {
BDBDataBase db = storage.getDataBase(String.valueOf(i));
dbList.add(db);
}
endRecordTime();
printStatisticInformation(DB_NUMBER);
startRecordTime();
Value value = new ValueImpl(ByteUtils.stringToByte("valueissijejrer"), (new Date()).getTime());
for (BDBDataBase db : dbList) {
for (int i = 0; i < 10; i++) {
Key key = new KeyImpl(100, "key" + i, 1);
db.set(key, value);
}
}
endRecordTime();
printStatisticInformation(DB_NUMBER);
} finally {
if (null != storage) {
storage.close();
}
}
}
private void startRecordTime() {
startTime = System.currentTimeMillis();
}
private void endRecordTime() {
endTime = System.currentTimeMillis();
}
private void printStatisticInformation(int num) {
System.out.println("Create " + num + " db, total time(ms):" + (endTime - startTime) + ", everage time(ms):"
+ ((endTime - startTime) / num));
}
private long endTime;
private long startTime;
private static final int DB_NUMBER = 10;
}