1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2010, 2013 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");
}
}
|