Search in sources :

Example 1 with CommandFuture

use of com.ctrip.xpipe.api.command.CommandFuture in project x-pipe by ctripcorp.

the class UntilSuccess method doExecute.

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
protected void doExecute() throws Exception {
    if (future().isCancelled()) {
        return;
    }
    CommandFuture<?> future = executeNext();
    if (future == null) {
        future().setFailure(new CommandChainException("until success fail", getResult()));
        return;
    }
    future.addListener(new CommandFutureListener() {

        @Override
        public void operationComplete(CommandFuture commandFuture) throws Exception {
            if (commandFuture.isSuccess()) {
                future().setSuccess(commandFuture.get());
            } else {
                logger.error("[doExecute]" + currentCommand(), commandFuture.cause());
                doExecute();
            }
        }
    });
}
Also used : CommandFuture(com.ctrip.xpipe.api.command.CommandFuture) CommandFutureListener(com.ctrip.xpipe.api.command.CommandFutureListener)

Example 2 with CommandFuture

use of com.ctrip.xpipe.api.command.CommandFuture in project x-pipe by ctripcorp.

the class SequenceCommandChain method executeChain.

@SuppressWarnings({ "rawtypes", "unchecked" })
public void executeChain() {
    if (future().isCancelled()) {
        return;
    }
    CommandFuture<?> currentFuture = executeNext();
    if (currentFuture == null) {
        future().setSuccess(getResult());
        return;
    }
    currentFuture.addListener(new CommandFutureListener() {

        @Override
        public void operationComplete(CommandFuture commandFuture) throws Exception {
            if (commandFuture.isSuccess()) {
                executeChain();
            } else {
                failExecuteNext(commandFuture);
            }
        }
    });
}
Also used : CommandFuture(com.ctrip.xpipe.api.command.CommandFuture) CommandFutureListener(com.ctrip.xpipe.api.command.CommandFutureListener)

Example 3 with CommandFuture

use of com.ctrip.xpipe.api.command.CommandFuture 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);
    }
}
Also used : NettyClient(com.ctrip.xpipe.netty.commands.NettyClient) DefaultNettyClient(com.ctrip.xpipe.netty.commands.DefaultNettyClient) CommandFuture(com.ctrip.xpipe.api.command.CommandFuture) Replconf(com.ctrip.xpipe.redis.core.protocal.cmd.Replconf) CommandFutureListener(com.ctrip.xpipe.api.command.CommandFutureListener) DefaultNettyClient(com.ctrip.xpipe.netty.commands.DefaultNettyClient) CommandExecutionException(com.ctrip.xpipe.command.CommandExecutionException) IOException(java.io.IOException) XpipeException(com.ctrip.xpipe.exception.XpipeException) SequenceCommandChain(com.ctrip.xpipe.command.SequenceCommandChain)

Example 4 with CommandFuture

use of com.ctrip.xpipe.api.command.CommandFuture in project x-pipe by ctripcorp.

the class AsyncSendEmailCommandTest method testAsyncSendEmailCommand4.

@Test
public void testAsyncSendEmailCommand4() throws Exception {
    SendEmailResponse response = new SendEmailResponse();
    response.setResultCode(0);
    response.setResultMsg("no recipient from email");
    when(client.sendEmail(any())).thenReturn(response);
    CtripPlatformEmailService.AsyncSendEmailCommand command = new CtripPlatformEmailService.AsyncSendEmailCommand(generateEmail());
    command.setClient(client);
    CommandFuture future = command.execute();
    Assert.assertFalse(future.isSuccess());
    Assert.assertEquals("no recipient from email", future.cause().getMessage());
}
Also used : SendEmailResponse(com.ctrip.soa.platform.basesystem.emailservice.v1.SendEmailResponse) CommandFuture(com.ctrip.xpipe.api.command.CommandFuture) Test(org.junit.Test) AbstractTest(com.ctrip.xpipe.AbstractTest)

Example 5 with CommandFuture

use of com.ctrip.xpipe.api.command.CommandFuture in project x-pipe by ctripcorp.

the class AsyncSendEmailCommandTest method testAsyncSendEmailCommand3.

@Test
public void testAsyncSendEmailCommand3() throws Exception {
    SendEmailResponse response = new SendEmailResponse();
    response.setResultCode(1);
    when(client.sendEmail(any())).thenReturn(response);
    GetEmailStatusResponse getResponse = new GetEmailStatusResponse();
    getResponse.setResultCode(0);
    getResponse.setResultMsg("test exception result could be caught");
    when(client.getEmailStatus(any())).thenReturn(getResponse);
    CtripPlatformEmailService.AsyncSendEmailCommand command = new CtripPlatformEmailService.AsyncSendEmailCommand(generateEmail());
    command.setClient(client);
    CommandFuture future = command.execute();
    future.addListener(commandFuture -> {
        Assert.assertFalse(future.isSuccess());
        Assert.assertEquals("test exception result could be caught", future.cause().getMessage());
    });
    waitConditionUntilTimeOut(() -> future.isDone(), 10 * 1000);
}
Also used : SendEmailResponse(com.ctrip.soa.platform.basesystem.emailservice.v1.SendEmailResponse) GetEmailStatusResponse(com.ctrip.soa.platform.basesystem.emailservice.v1.GetEmailStatusResponse) CommandFuture(com.ctrip.xpipe.api.command.CommandFuture) Test(org.junit.Test) AbstractTest(com.ctrip.xpipe.AbstractTest)

Aggregations

CommandFuture (com.ctrip.xpipe.api.command.CommandFuture)10 AbstractTest (com.ctrip.xpipe.AbstractTest)5 CommandFutureListener (com.ctrip.xpipe.api.command.CommandFutureListener)5 Test (org.junit.Test)5 SendEmailResponse (com.ctrip.soa.platform.basesystem.emailservice.v1.SendEmailResponse)3 CommandExecutionException (com.ctrip.xpipe.command.CommandExecutionException)3 GetEmailStatusResponse (com.ctrip.soa.platform.basesystem.emailservice.v1.GetEmailStatusResponse)2 SequenceCommandChain (com.ctrip.xpipe.command.SequenceCommandChain)2 XpipeException (com.ctrip.xpipe.exception.XpipeException)2 BorrowObjectException (com.ctrip.xpipe.pool.BorrowObjectException)2 IOException (java.io.IOException)2 CommandTimeoutException (com.ctrip.xpipe.command.CommandTimeoutException)1 AbstractExceptionLogTask (com.ctrip.xpipe.concurrent.AbstractExceptionLogTask)1 DefaultNettyClient (com.ctrip.xpipe.netty.commands.DefaultNettyClient)1 NettyClient (com.ctrip.xpipe.netty.commands.NettyClient)1 ReturnObjectException (com.ctrip.xpipe.pool.ReturnObjectException)1 RedisCommand (com.ctrip.xpipe.redis.core.protocal.RedisCommand)1 AbstractRedisCommand (com.ctrip.xpipe.redis.core.protocal.cmd.AbstractRedisCommand)1 Replconf (com.ctrip.xpipe.redis.core.protocal.cmd.Replconf)1 CountDownLatch (java.util.concurrent.CountDownLatch)1