libdb/test/java/rep/upgrades/v46/repmgrtests/V46impl.java
2011-09-13 13:44:24 -04:00

186 lines
6.4 KiB
Java

/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2010, 2011 Oracle and/or its affiliates. All rights reserved.
*
*/
package repmgrtests;
import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseConfig;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseType;
import com.sleepycat.db.Environment;
import com.sleepycat.db.EnvironmentConfig;
import com.sleepycat.db.EventHandlerAdapter;
import com.sleepycat.db.ReplicationHostAddress;
import com.sleepycat.db.ReplicationManagerAckPolicy;
import com.sleepycat.db.ReplicationManagerStartPolicy;
import com.sleepycat.db.ReplicationStats;
import com.sleepycat.db.ReplicationTimeoutType;
import com.sleepycat.db.StatsConfig;
import com.sleepycat.db.VerboseConfig;
import static org.junit.Assert.*;
import java.io.File;
public class V46impl implements TestMixedHeartbeats.Ops46, TestReverseConnect.Ops46 {
private Config config;
private Environment[] envs = new Environment[2];
class MyEventHandler extends EventHandlerAdapter {
private boolean done = false;
private boolean panic = false;
@Override
synchronized public void handlePanicEvent() {
done = true;
panic = true;
notifyAll();
}
@Override
synchronized public void handleRepStartupDoneEvent() {
done = true;
notifyAll();
}
synchronized void await() throws Exception {
while (!done) { wait(); }
if (panic)
throw new Exception("aborted by panic in DB");
}
}
public void setConfig(Config c) { config = c; }
public void createMaster(int site, boolean configureOther) throws Exception {
EnvironmentConfig ec = makeBasicConfig();
int p = config.getMyPort(site);
ec.setReplicationManagerLocalSite(new ReplicationHostAddress("localhost", p));
if (configureOther) {
p = config.getOtherPort(site);
ec.replicationManagerAddRemoteSite(new ReplicationHostAddress("localhost", p));
}
File masterDir = new File(config.getBaseDir(), "dir" + site);
masterDir.mkdir();
Environment master = new Environment(masterDir, ec);
envs[site] = master;
master.setReplicationTimeout(ReplicationTimeoutType.CONNECTION_RETRY,
1000000); // be impatient
master.replicationManagerStart(3, ReplicationManagerStartPolicy.REP_MASTER);
DatabaseConfig dc = new DatabaseConfig();
dc.setTransactional(true);
dc.setAllowCreate(true);
dc.setType(DatabaseType.BTREE);
Database db = master.openDatabase(null, "test.db", null, dc);
db.close();
}
public void establishClient(int site, boolean configureOther) throws Exception {
EnvironmentConfig ec = makeBasicConfig();
int p = config.getMyPort(site);
ec.setReplicationManagerLocalSite(new ReplicationHostAddress("localhost", p));
if (configureOther) {
p = config.getOtherPort(site);
ec.replicationManagerAddRemoteSite(new ReplicationHostAddress("localhost", p));
}
MyEventHandler monitor = new MyEventHandler();
ec.setEventHandler(monitor);
File clientDir = new File(config.getBaseDir(), "dir" + site);
clientDir.mkdir();
Environment client = new Environment(clientDir, ec);
client.replicationManagerStart(3, ReplicationManagerStartPolicy.REP_CLIENT);
monitor.await();
assertTrue(client.getReplicationStats(StatsConfig.DEFAULT).getStartupComplete() == 1);
client.close();
}
public void shutDown(int siteId) throws Exception {
envs[siteId].close();
envs[siteId] = null;
}
public void restart(int siteId) throws Exception {
EnvironmentConfig ec = makeBasicConfig();
int p = config.getMyPort(siteId);
ec.setReplicationManagerLocalSite(new ReplicationHostAddress("localhost", p));
p = config.getOtherPort(siteId);
ec.replicationManagerAddRemoteSite(new ReplicationHostAddress("localhost", p));
File dir = new File(config.getBaseDir(), "dir" + siteId);
Environment e = new Environment(dir, ec);
envs[siteId] = e;
e.setReplicationTimeout(ReplicationTimeoutType.CONNECTION_RETRY,
1000000); // be impatient
e.replicationManagerStart(3, ReplicationManagerStartPolicy.REP_MASTER);
}
public void remove(int site) throws Exception {
assertNull(envs[site]);
EnvironmentConfig ec = makeBasicConfig();
File dir = new File(config.getBaseDir(), "dir" + site);
assertTrue(dir.exists());
Environment.remove(dir, false, ec);
}
public boolean writeUpdates(int siteId, int txnCount) throws Exception {
DatabaseConfig dc = new DatabaseConfig();
dc.setTransactional(true);
Database db = envs[siteId].openDatabase(null, "test.db", null, dc);
DatabaseEntry key = new DatabaseEntry();
DatabaseEntry value = new DatabaseEntry();
value.setData("hello world".getBytes());
for (int i=0; i<txnCount; i++) {
String k = "The record number is: " + i;
key.setData(k.getBytes());
db.put(null, key, value);
}
db.close();
return true;
}
public void checkMaxVersion() throws Exception {
// For this test to make sense, we must be at version 4.5 or 4.6.
//
int major = Environment.getVersionMajor();
int minor = Environment.getVersionMinor();
assertTrue(major == 4 && (minor == 5 || minor == 6));
}
private EnvironmentConfig makeBasicConfig() {
EnvironmentConfig ec = new EnvironmentConfig();
ec.setAllowCreate(true);
ec.setInitializeCache(true);
ec.setInitializeLocking(true);
ec.setInitializeLogging(true);
ec.setInitializeReplication(true);
ec.setTransactional(true);
ec.setReplicationManagerAckPolicy(ReplicationManagerAckPolicy.ALL);
ec.setRunRecovery(true);
ec.setThreaded(true);
ec.setReplicationNumSites(2);
if (Boolean.getBoolean("VERB_REPLICATION"))
ec.setVerbose(VerboseConfig.REPLICATION, true);
return (ec);
}
public void restart(int siteId, File dir) throws Exception {
throw new Exception("Not implemented");
}
}