private void testMultipleOperationsRoll(long txPerNormalPhase,
long txPerRollPhase, long txCount) throws Exception {
File editsDir = createEditsDir();
DummyServerCore core = new DummyServerCore();
EditLogFileOutputStream out = initEdits(editsDir);
ServerLogReaderPreTransactional logReader = new ServerLogReaderPreTransactional(core,
Util.stringAsURI(editsDir.getAbsolutePath()));
core.logReader = logReader;
Thread coreThread, logReaderThread;
boolean rollPhase = false;
coreThread = new Thread(core);
logReaderThread = new Thread(logReader);
logReaderThread.start();
coreThread.start();
Thread.sleep(1000);
long count = 0;
for (long txId = 0; txId < txCount; txId ++) {
if (rollPhase) {
count --;
if (count == 0) {
rollPhase = false;
count = txPerNormalPhase;
endRoll(editsDir);
}
} else {
count --;
if (count == 0) {
rollPhase = true;
count = txPerRollPhase;
beginRoll(editsDir, out);
}
}
writeOperation(out, txId, false);
if (txId % 10 == 0) {
Thread.sleep(1);
}
}
// flush
out.setReadyToFlush();
out.flush();
Thread.sleep(1000);
core.shutdown();
logReaderThread.join();
coreThread.join();