package me.brandonc.benchmark; import me.brandonc.benchmark.exception.OperationException; import me.brandonc.datastore.DataStore; public abstract class AbstractKeyValueAction<T> implements Action<T> { private String name; private boolean autoClean = false; public AbstractKeyValueAction(String name) { this.name = name; } @Override public void execute(Context<T> context, int id) { SampleResult result = new SampleResult(); result.sampleStart(); DataStore<T> dataStore = context.getDataStore(); T connection = dataStore.getConnection(); try { Workload workload = context.getWorkload(); String key = Integer.toString(id); String value = RandomStringUtil.getString(workload.getDataSize()); result.setResult(doAction(connection, key, value)); } catch (OperationException e) { // TODO flow-control e.printStackTrace(); } finally { dataStore.releaseConnection(connection); } if (!result.isResult()) { System.out.println("[" + this.getName() + "] key missing or blank result at key:" + id); } result.sampleEnd(); // TODO statistic } @Override public void setup(Context<T> context) { } @Override public void teardown(Context<T> context) { } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean isAutoClean() { return autoClean; } @Override public int getExecutions() { return 1; } public abstract boolean doAction(T connection, String key, String value); }