package org.fi;
import java.io.*;
import java.nio.channels.*;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
public class ClientRebootWorkload implements Workload {
private Driver driver;
private Cass cass;
private Utility u;
private Experiment exp;
// workload specific
private String KEYSPACE = "Keyspace1";
private String COLUMNFAMILY = "Standard1";
private String COLUMNPATH = "experimentValue";
private String VALUE = "berkeley";
private static final String ENCODING = "UTF8";
// *******************************************
public ClientRebootWorkload(Driver driver, Experiment exp) {
this.driver = driver;
this.cass = driver.getCass();
this.u = driver.getUtility();
this.exp = exp;
}
// *******************************************
// the algorithm
// *******************************************
public void run() {
// 1. setup for this specific workloadClientRebootWorkload
preSetup();
// 3. the exact workload where we want to run with failure
runWithFailure();
// 5. run post setup
postSetup();
}
// *******************************************
public void runWithFailure() {
//experiment with the rebooting process in Cassandra
driver.restartDeadDataNodes();
u.sleep(500);
u.println("Check dead nodes after restarting nodes...");
driver.checkDeadNodes();
// Delete the experiment tag
u.deleteFile(Driver.EXPERIMENT_RUN_FLAG);
u.println("");
}
// *******************************************
public void preSetup() {
cass.setEncoding(ENCODING);
cass.setKeyspace(KEYSPACE);
cass.setColumnFamily(COLUMNFAMILY);
cass.setColumnPath(COLUMNPATH);
// 2. enable failures (and optimizer)
Driver.enableFailureManager();
Driver.enableClientOptimizer();
Driver.enableFrog();
Driver.enableCoverage();
// 3. let's make sure, we setup the connection before we go
// into the run with failure
cass.assertConnection();
//Jungmin added for a reboot workload
NodeProcess[] nps = driver.getNodeProcesses();
String key1 = String.format("key-%03d", exp.getExpNum());
String key2 = String.format("key-%03d", exp.getExpNum() + 1);
String key3 = String.format("key-%03d", exp.getExpNum() + 2);
String value2 = "EECS";
String value3 = "DEPARTMENT";
cass.insertEntry(key1, VALUE , exp);
cass.insertEntry(key2, value2 , exp);
cass.insertEntry(key3, value3 , exp);
u.println("");
u.println("Check dead nodes before killing nodes....");
driver.checkDeadNodes();
driver.killCass();
//driver.killNode("node1");
u.sleep(300);
u.println("Check dead nodes after killing nodes....");
driver.checkDeadNodes();
u.createNewFile(Driver.EXPERIMENT_RUN_FLAG);
u.println("");
}
// *******************************************
public void postSetup() {
// 4. stop the failure
Driver.disableCoverage();
Driver.disableFrog();
Driver.disableFailureManager();
Driver.disableClientOptimizer();
// get entry
//String key1 = String.format("key-%03d", exp.getExpNum());
//String key2 = String.format("key-%03d", exp.getExpNum() + 1);
//String key3 = String.format("key-%03d", exp.getExpNum() + 2);
//cass.getEntry(key1, exp);
//cass.getEntry(key2, exp);
//cass.getEntry(key3, exp);
// then delete the file
//cass.delete(key, exp);
}
}