mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-17 01:26:25 +00:00
191 lines
6 KiB
Java
191 lines
6 KiB
Java
/*-
|
|
* See the file LICENSE for redistribution information.
|
|
*
|
|
* Copyright (c) 2010, 2011 Oracle and/or its affiliates. All rights reserved.
|
|
*
|
|
*/
|
|
|
|
package repmgrtests;
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import junit.framework.TestCase;
|
|
|
|
import org.junit.After;
|
|
import org.junit.Before;
|
|
|
|
import com.sleepycat.db.BtreeStats;
|
|
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.ReplicationManagerSiteConfig;
|
|
import com.sleepycat.db.ReplicationManagerStartPolicy;
|
|
import com.sleepycat.db.VerboseConfig;
|
|
|
|
/**
|
|
* Regression test for #15788. No fiddler funny-business, just a
|
|
* straightforward test of internal init with a healthy amount of data
|
|
* (enough to flood the outgoing TCP queue, so that we're force to
|
|
* invoke our new waiting feature).
|
|
*/
|
|
public class TestRepmgr extends TestCase {
|
|
private static final String TEST_DIR_NAME = "TESTDIR";
|
|
|
|
private File testdir;
|
|
class MyEventHandler extends EventHandlerAdapter {
|
|
private boolean done = false;
|
|
private boolean panic = false;
|
|
|
|
@Override
|
|
synchronized public void handleRepStartupDoneEvent() {
|
|
done = true;
|
|
notifyAll();
|
|
}
|
|
|
|
@Override
|
|
synchronized public void handlePanicEvent() {
|
|
done = true;
|
|
panic = true;
|
|
notifyAll();
|
|
}
|
|
|
|
synchronized void await() throws Exception {
|
|
while (!done) { wait(); }
|
|
if (panic)
|
|
throw new Exception("aborted by panic in DB");
|
|
}
|
|
}
|
|
|
|
@Before
|
|
public void setUp() throws Exception {
|
|
testdir = new File(TEST_DIR_NAME);
|
|
Util.rm_rf(testdir);
|
|
testdir.mkdir();
|
|
}
|
|
|
|
@After
|
|
public void tearDown() throws Exception {
|
|
// Hmm, this kind of interesting. What we really want
|
|
// is to clean up the env directories *only* if the
|
|
// test passed. If it failed, it may be useful to
|
|
// keep it around for analysis.
|
|
//
|
|
// if (completed)
|
|
// Util.rm_rf(testdir);
|
|
}
|
|
|
|
public void testSanity() {
|
|
int x = 1;
|
|
int y = 2;
|
|
assertTrue(x + y == 3);
|
|
}
|
|
|
|
public void testEnvCreate() throws Exception {
|
|
boolean junk = false;
|
|
// TODO: move this to a test runner.
|
|
if (Boolean.getBoolean("debug.pause")) {
|
|
// force DB to be loaded first (is this necessary?)
|
|
Environment.getVersionString();
|
|
System.out.println(".> ");
|
|
System.in.read();
|
|
}
|
|
|
|
int[] testPorts = Util.findAvailablePorts(2);
|
|
int masterPort = testPorts[0];
|
|
int clientPort = testPorts[1];
|
|
|
|
EnvironmentConfig ec = makeBasicConfig();
|
|
ec.setReplicationLimit(100000000);
|
|
ReplicationManagerSiteConfig dbsite =
|
|
new ReplicationManagerSiteConfig("localhost", masterPort);
|
|
dbsite.setLocalSite(true);
|
|
ec.addReplicationManagerSite(dbsite);
|
|
Environment master = new Environment(mkdir("master"), ec);
|
|
master.replicationManagerStart(3, ReplicationManagerStartPolicy.REP_MASTER);
|
|
|
|
if (junk) {
|
|
DatabaseConfig dc = new DatabaseConfig();
|
|
dc.setTransactional(true);
|
|
dc.setAllowCreate(true);
|
|
dc.setType(DatabaseType.BTREE);
|
|
Database db = master.openDatabase(null, "test.db", null, dc);
|
|
System.err.println("created database");
|
|
|
|
|
|
DatabaseEntry key = new DatabaseEntry();
|
|
DatabaseEntry value = new DatabaseEntry();
|
|
value.setData("This is a reasonably long string. The controller is responsible for maintaining the view, and for interpreting UI events and turning them into operations on the model.".getBytes());
|
|
int i = 0;
|
|
BtreeStats stats = (BtreeStats)db.getStats(null, null);
|
|
while (stats.getPageCount() < 4) {
|
|
String k = "The record number is: " + ++i;
|
|
key.setData(k.getBytes());
|
|
db.put(null, key, value);
|
|
stats = (BtreeStats)db.getStats(null, null);
|
|
}
|
|
db.close();
|
|
System.err.println("closed database");
|
|
}
|
|
|
|
ec = makeBasicConfig();
|
|
// ec.setReplicationRequestMin(200);
|
|
// ec.setReplicationRequestMax(1000);
|
|
dbsite = new ReplicationManagerSiteConfig("localhost", clientPort);
|
|
dbsite.setLocalSite(true);
|
|
ec.addReplicationManagerSite(dbsite);
|
|
dbsite = new ReplicationManagerSiteConfig("localhost", masterPort);
|
|
dbsite.setBootstrapHelper(true);
|
|
ec.addReplicationManagerSite(dbsite);
|
|
MyEventHandler mon = new MyEventHandler();
|
|
ec.setEventHandler(mon);
|
|
Environment client = new Environment(mkdir("client"), ec);
|
|
client.replicationManagerStart(2, ReplicationManagerStartPolicy.REP_CLIENT);
|
|
|
|
// ReplicationHostAddress[] sites = client.getReplicationManagerSiteList();
|
|
// assertEquals(1, sites.length);
|
|
// assertEquals("localhost", sites[0].host);
|
|
// assertEquals(masterSpoofPort, sites[0].port);
|
|
|
|
System.err.println("started client");
|
|
mon.await();
|
|
System.err.println("completed await()");
|
|
|
|
// sites = master.getReplicationManagerSiteList();
|
|
// assertEquals(1, sites.length);
|
|
// assertEquals("localhost", sites[0].host);
|
|
// assertEquals(clientPort, sites[0].port);
|
|
|
|
// ec.setReplicationRequestMax(128);
|
|
// ec.setReplicationRequestMin(4);
|
|
// client.setConfig(ec);
|
|
// System.out.println(client.getReplicationStats(StatsConfig.DEFAULT));
|
|
|
|
client.close();
|
|
master.close();
|
|
}
|
|
|
|
public static 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.setThreaded(true);
|
|
if (Boolean.getBoolean("VERB_REPLICATION"))
|
|
ec.setVerbose(VerboseConfig.REPLICATION, true);
|
|
return (ec);
|
|
}
|
|
|
|
public File mkdir(String dname) {
|
|
File f = new File(testdir, dname);
|
|
f.mkdir();
|
|
return f;
|
|
}
|
|
}
|