use of com.ctrip.xpipe.command.SequenceCommandChain in project x-pipe by ctripcorp.
the class DcMetaBuilder method doExecute.
@Override
protected void doExecute() throws Exception {
SequenceCommandChain sequenceCommandChain = new SequenceCommandChain(false);
ParallelCommandChain parallelCommandChain = new ParallelCommandChain(executors);
parallelCommandChain.add(retry3TimesUntilSuccess(new GetAllDcClusterShardDetailCommand(dcId)));
parallelCommandChain.add(retry3TimesUntilSuccess(new Cluster2DcClusterMapCommand()));
parallelCommandChain.add(retry3TimesUntilSuccess(new GetDcIdNameMapCommand()));
sequenceCommandChain.add(parallelCommandChain);
sequenceCommandChain.add(retry3TimesUntilSuccess(new BuildDcMetaCommand()));
logger.info("[doExecute] commands: {}", sequenceCommandChain);
sequenceCommandChain.future().addListener(commandFuture -> {
if (commandFuture.isSuccess()) {
future().setSuccess(dcMeta);
} else {
future().setFailure(commandFuture.cause());
}
});
sequenceCommandChain.execute(executors);
}
use of com.ctrip.xpipe.command.SequenceCommandChain in project x-pipe by ctripcorp.
the class DefaultSlaveOfCommand method doExecute.
@Override
protected void doExecute() throws CommandExecutionException {
SimpleObjectPool<NettyClient> clientPool = getClientPool();
UntilSuccess slaveOf = new UntilSuccess();
slaveOf.add(new XSlaveofCommand(clientPool, ip, port, scheduled));
slaveOf.add(new SlaveOfCommand(clientPool, ip, port, scheduled));
SequenceCommandChain chain = new SequenceCommandChain(false);
chain.add(slaveOf);
chain.add(new ConfigRewrite(clientPool, scheduled));
chain.execute().addListener(new CommandFutureListener<Object>() {
@Override
public void operationComplete(CommandFuture<Object> commandFuture) throws Exception {
if (commandFuture.isSuccess()) {
future().setSuccess(RedisClientProtocol.OK);
} else {
future().setFailure(commandFuture.cause());
}
}
});
}
use of com.ctrip.xpipe.command.SequenceCommandChain 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.command.SequenceCommandChain in project x-pipe by ctripcorp.
the class AbstractRedisMasterReplication method masterConnected.
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void masterConnected(Channel channel) {
connectedTime = System.currentTimeMillis();
this.masterChannel = channel;
clientPool = new FixedObjectPool<NettyClient>(new DefaultNettyClient(channel));
checkTimeout(channel);
checkKeeper();
SequenceCommandChain chain = new SequenceCommandChain(false);
chain.add(listeningPortCommand());
chain.add(new FailSafeCommandWrapper<>(new Replconf(clientPool, ReplConfType.CAPA, scheduled, CAPA.EOF.toString(), CAPA.PSYNC2.toString())));
try {
executeCommand(chain).addListener(new CommandFutureListener() {
@Override
public void operationComplete(CommandFuture commandFuture) throws Exception {
if (commandFuture.isSuccess()) {
sendReplicationCommand();
} else {
logger.error("[operationComplete][listeningPortCommand]", commandFuture.cause());
}
}
});
} catch (Exception e) {
logger.error("[masterConnected]" + channel, e);
}
}
use of com.ctrip.xpipe.command.SequenceCommandChain in project x-pipe by ctripcorp.
the class TransactionalCommand method doWork.
@SuppressWarnings("unchecked")
protected void doWork(final SimpleObjectPool<NettyClient> clientPool) {
SequenceCommandChain chain = new SequenceCommandChain(false);
for (RedisCommand currentCommand : commands) {
OneTranscationCommand oneTranscationCommand = new OneTranscationCommand(clientPool, currentCommand, scheduled);
chain.add(oneTranscationCommand);
}
chain.execute().addListener(new CommandFutureListener() {
@Override
public void operationComplete(CommandFuture commandFuture) throws Exception {
if (!commandFuture.isSuccess()) {
logger.error("[doWork][fail]", commandFuture.cause());
}
endTranscation(clientPool);
}
});
}
Aggregations