use of com.ctrip.xpipe.redis.core.protocal.cmd.InMemoryPsync in project x-pipe by ctripcorp.
the class AbstractFakeRedisTest method sendInmemoryPsync.
protected InMemoryPsync sendInmemoryPsync(String ip, int port, String runid, long offset) throws Exception {
SequenceCommandChain chain = new SequenceCommandChain(false);
SimpleObjectPool<NettyClient> pool = getXpipeNettyClientKeyedObjectPool().getKeyPool(new InetSocketAddress(ip, port));
NettyClient nettyClient = null;
try {
nettyClient = pool.borrowObject();
SimpleObjectPool<NettyClient> clientPool = new FixedObjectPool<NettyClient>(nettyClient);
chain.add(new Replconf(clientPool, ReplConfType.CAPA, scheduled, CAPA.EOF.toString()));
InMemoryPsync psync = new InMemoryPsync(clientPool, runid, offset, scheduled);
chain.add(psync);
psync.addPsyncObserver(new PsyncObserver() {
private long masterRdbOffset = 0;
@Override
public void reFullSync() {
}
@Override
public void onFullSync() {
}
@Override
public void onContinue(String requestReplId, String responseReplId) {
}
@Override
public void endWriteRdb() {
new Replconf(clientPool, ReplConfType.ACK, scheduled, String.valueOf(masterRdbOffset)).execute();
}
@Override
public void beginWriteRdb(EofType eofType, long masterRdbOffset) throws IOException {
this.masterRdbOffset = masterRdbOffset;
}
});
chain.execute();
return psync;
} finally {
if (nettyClient != null) {
pool.returnObject(nettyClient);
}
}
}
use of com.ctrip.xpipe.redis.core.protocal.cmd.InMemoryPsync in project x-pipe by ctripcorp.
the class ReplconfTest method test.
@Test
public void test() throws Exception {
for (int i = 0; i < 100; i++) {
FixedObjectPool<NettyClient> clientPool = null;
try {
clientPool = createClientPool(host, port);
Replconf replconf = new Replconf(clientPool, ReplConfType.LISTENING_PORT, scheduled, String.valueOf(1234));
replconf.execute().addListener(new CommandFutureListener<Object>() {
@Override
public void operationComplete(CommandFuture<Object> commandFuture) throws Exception {
logger.info("{}", commandFuture.get());
}
});
Psync psync = new InMemoryPsync(clientPool, "?", -1L, scheduled);
try {
psync.execute().get(100, TimeUnit.MILLISECONDS);
Assert.fail();
} catch (TimeoutException e) {
}
} finally {
if (clientPool != null) {
clientPool.getObject().channel().close();
}
}
}
}
use of com.ctrip.xpipe.redis.core.protocal.cmd.InMemoryPsync in project x-pipe by ctripcorp.
the class DefaultRedisKeeperServerConnectToFakeRedisTest method startKeeperServerAndTestReFullSync.
private void startKeeperServerAndTestReFullSync(int fileToKeep, int maxTransferCommnadsSize) throws Exception {
RedisKeeperServer redisKeeperServer = startRedisKeeperServerAndConnectToFakeRedis(fileToKeep, maxTransferCommnadsSize, 1000);
int keeperPort = redisKeeperServer.getListeningPort();
sleep(2000);
logger.info(remarkableMessage("send psync to redump rdb"));
int rdbDumpCount1 = ((DefaultReplicationStore) redisKeeperServer.getReplicationStore()).getRdbUpdateCount();
InMemoryPsync psync = sendInmemoryPsync("localhost", keeperPort);
sleep(3000);
int rdbDumpCount2 = ((DefaultReplicationStore) redisKeeperServer.getReplicationStore()).getRdbUpdateCount();
Assert.assertEquals(rdbDumpCount1 + 1, rdbDumpCount2);
assertPsyncResultEquals(psync);
}
use of com.ctrip.xpipe.redis.core.protocal.cmd.InMemoryPsync in project x-pipe by ctripcorp.
the class DefaultRedisKeeperServerConnectToFakeRedisTest method testDumpWhileWaitForRdb.
@Test
public void testDumpWhileWaitForRdb() throws Exception {
int sleepBeforeSendRdb = 2000;
fakeRedisServer.setSleepBeforeSendRdb(sleepBeforeSendRdb);
RedisKeeperServer redisKeeperServer = startRedisKeeperServerAndConnectToFakeRedis(100, allCommandsSize);
sleep(sleepBeforeSendRdb / 4);
int rdbDumpCount1 = ((DefaultRedisKeeperServer) redisKeeperServer).getRdbDumpTryCount();
Assert.assertEquals(1, rdbDumpCount1);
int keeperPort = redisKeeperServer.getListeningPort();
logger.info(remarkableMessage("send psync to keeper port:{}"), keeperPort);
InMemoryPsync psync = sendInmemoryPsync("localhost", keeperPort, "?", -1L);
sleep(1000);
int rdbDumpCount2 = ((DefaultRedisKeeperServer) redisKeeperServer).getRdbDumpTryCount();
Assert.assertEquals(1, rdbDumpCount2);
sleep(sleepBeforeSendRdb);
assertPsyncResultEquals(psync);
}
use of com.ctrip.xpipe.redis.core.protocal.cmd.InMemoryPsync in project x-pipe by ctripcorp.
the class FakeRedisHalfRdbServerFail method redisFailKeeperRestartDumpNewRdb.
@Test
public void redisFailKeeperRestartDumpNewRdb() throws Exception {
sleep(sleepBeforeSendFullSyncInfo + 1000);
redisKeeperServer.stop();
redisKeeperServer.dispose();
redisKeeperServer.initialize();
redisKeeperServer.start();
connectToFakeRedis(redisKeeperServer);
waitUntilRedisMasterConnected(redisKeeperServer);
sleep(1000);
InMemoryPsync inMemoryPsync = sendInmemoryPsync("localhost", redisKeeperServer.getListeningPort());
sleep(1500);
assertPsyncResultEquals(inMemoryPsync);
Assert.assertEquals(1, redisKeeperServer.getKeeperMonitor().getReplicationStoreStats().getReplicationStoreCreateCount());
}
Aggregations