Search in sources :

Example 1 with ValueCommand

use of com.alipay.sofa.jraft.test.atomic.command.ValueCommand in project sofa-jraft by sofastack.

the class AtomicClient method addAndGet.

public long addAndGet(PeerId peer, String key, long delta) throws InterruptedException {
    try {
        final IncrementAndGetCommand request = new IncrementAndGetCommand();
        request.setKey(key);
        request.setDetal(delta);
        final Object response = this.rpcClient.invokeSync(peer.getEndpoint(), request, cliOptions.getRpcDefaultTimeout());
        final BooleanCommand cmd = (BooleanCommand) response;
        if (cmd.isSuccess()) {
            return ((ValueCommand) cmd).getVlaue();
        } else {
            throw new IllegalStateException("Server error:" + cmd.getErrorMsg());
        }
    } catch (final Throwable t) {
        throw new IllegalStateException("Remoting error:" + t.getMessage());
    }
}
Also used : BooleanCommand(com.alipay.sofa.jraft.test.atomic.command.BooleanCommand) ValueCommand(com.alipay.sofa.jraft.test.atomic.command.ValueCommand) IncrementAndGetCommand(com.alipay.sofa.jraft.test.atomic.command.IncrementAndGetCommand)

Example 2 with ValueCommand

use of com.alipay.sofa.jraft.test.atomic.command.ValueCommand in project sofa-jraft by sofastack.

the class AtomicRangeGroup method readFromQuorum.

public void readFromQuorum(final String key, RpcContext asyncContext) {
    final byte[] reqContext = new byte[4];
    Bits.putInt(reqContext, 0, requestId.incrementAndGet());
    this.node.readIndex(reqContext, new ReadIndexClosure() {

        @Override
        public void run(Status status, long index, byte[] reqCtx) {
            if (status.isOk()) {
                try {
                    asyncContext.sendResponse(new ValueCommand(fsm.getValue(key)));
                } catch (final KeyNotFoundException e) {
                    asyncContext.sendResponse(GetCommandProcessor.createKeyNotFoundResponse());
                }
            } else {
                asyncContext.sendResponse(new BooleanCommand(false, status.getErrorMsg()));
            }
        }
    });
}
Also used : Status(com.alipay.sofa.jraft.Status) ReadIndexClosure(com.alipay.sofa.jraft.closure.ReadIndexClosure) BooleanCommand(com.alipay.sofa.jraft.test.atomic.command.BooleanCommand) ValueCommand(com.alipay.sofa.jraft.test.atomic.command.ValueCommand) KeyNotFoundException(com.alipay.sofa.jraft.test.atomic.KeyNotFoundException)

Example 3 with ValueCommand

use of com.alipay.sofa.jraft.test.atomic.command.ValueCommand in project sofa-jraft by sofastack.

the class AtomicStateMachine method onApply.

@Override
public void onApply(final Iterator iter) {
    while (iter.hasNext()) {
        final Closure done = iter.done();
        CommandType cmdType;
        final ByteBuffer data = iter.getData();
        Object cmd = null;
        LeaderTaskClosure closure = null;
        if (done != null) {
            closure = (LeaderTaskClosure) done;
            cmdType = closure.getCmdType();
            cmd = closure.getCmd();
        } else {
            final byte b = data.get();
            final byte[] cmdBytes = new byte[data.remaining()];
            data.get(cmdBytes);
            cmdType = CommandType.parseByte(b);
            switch(cmdType) {
                case GET:
                    cmd = CommandCodec.decodeCommand(cmdBytes, GetCommand.class);
                    break;
                case SET:
                    cmd = CommandCodec.decodeCommand(cmdBytes, SetCommand.class);
                    break;
                case CAS:
                    cmd = CommandCodec.decodeCommand(cmdBytes, CompareAndSetCommand.class);
                    break;
                case INC:
                    cmd = CommandCodec.decodeCommand(cmdBytes, IncrementAndGetCommand.class);
                    break;
            }
        }
        final String key = ((BaseRequestCommand) cmd).getKey();
        final AtomicLong counter = getCounter(key, true);
        Object response = null;
        switch(cmdType) {
            case GET:
                response = new ValueCommand(counter.get());
                break;
            case SET:
                final SetCommand setCmd = (SetCommand) cmd;
                counter.set(setCmd.getValue());
                response = new BooleanCommand(true);
                break;
            case CAS:
                final CompareAndSetCommand casCmd = (CompareAndSetCommand) cmd;
                response = new BooleanCommand(counter.compareAndSet(casCmd.getExpect(), casCmd.getNewValue()));
                break;
            case INC:
                final IncrementAndGetCommand incCmd = (IncrementAndGetCommand) cmd;
                final long ret = counter.addAndGet(incCmd.getDetal());
                response = new ValueCommand(ret);
                break;
        }
        if (closure != null) {
            closure.setResponse(response);
            closure.run(Status.OK());
        }
        iter.next();
    }
}
Also used : Closure(com.alipay.sofa.jraft.Closure) BooleanCommand(com.alipay.sofa.jraft.test.atomic.command.BooleanCommand) IncrementAndGetCommand(com.alipay.sofa.jraft.test.atomic.command.IncrementAndGetCommand) ByteBuffer(java.nio.ByteBuffer) IncrementAndGetCommand(com.alipay.sofa.jraft.test.atomic.command.IncrementAndGetCommand) GetCommand(com.alipay.sofa.jraft.test.atomic.command.GetCommand) CompareAndSetCommand(com.alipay.sofa.jraft.test.atomic.command.CompareAndSetCommand) AtomicLong(java.util.concurrent.atomic.AtomicLong) BaseRequestCommand(com.alipay.sofa.jraft.test.atomic.command.BaseRequestCommand) ValueCommand(com.alipay.sofa.jraft.test.atomic.command.ValueCommand) CompareAndSetCommand(com.alipay.sofa.jraft.test.atomic.command.CompareAndSetCommand) SetCommand(com.alipay.sofa.jraft.test.atomic.command.SetCommand)

Example 4 with ValueCommand

use of com.alipay.sofa.jraft.test.atomic.command.ValueCommand in project sofa-jraft by sofastack.

the class AtomicClient method get.

public long get(PeerId peer, String key, boolean readFromQuorum, boolean readByStateMachine) throws KeyNotFoundException, InterruptedException {
    try {
        final GetCommand request = new GetCommand(key);
        request.setReadFromQuorum(readFromQuorum);
        request.setReadByStateMachine(readByStateMachine);
        final Object response = this.rpcClient.invokeSync(peer.getEndpoint(), request, cliOptions.getRpcDefaultTimeout());
        final BooleanCommand cmd = (BooleanCommand) response;
        if (cmd.isSuccess()) {
            return ((ValueCommand) cmd).getVlaue();
        } else {
            if (cmd.getErrorMsg().equals("key not found")) {
                throw new KeyNotFoundException();
            } else {
                throw new IllegalStateException("Server error:" + cmd.getErrorMsg());
            }
        }
    } catch (final Throwable t) {
        t.printStackTrace();
        throw new IllegalStateException("Remoting error:" + t.getMessage());
    }
}
Also used : IncrementAndGetCommand(com.alipay.sofa.jraft.test.atomic.command.IncrementAndGetCommand) GetCommand(com.alipay.sofa.jraft.test.atomic.command.GetCommand) BooleanCommand(com.alipay.sofa.jraft.test.atomic.command.BooleanCommand) ValueCommand(com.alipay.sofa.jraft.test.atomic.command.ValueCommand) KeyNotFoundException(com.alipay.sofa.jraft.test.atomic.KeyNotFoundException)

Aggregations

BooleanCommand (com.alipay.sofa.jraft.test.atomic.command.BooleanCommand)4 ValueCommand (com.alipay.sofa.jraft.test.atomic.command.ValueCommand)4 IncrementAndGetCommand (com.alipay.sofa.jraft.test.atomic.command.IncrementAndGetCommand)3 KeyNotFoundException (com.alipay.sofa.jraft.test.atomic.KeyNotFoundException)2 GetCommand (com.alipay.sofa.jraft.test.atomic.command.GetCommand)2 Closure (com.alipay.sofa.jraft.Closure)1 Status (com.alipay.sofa.jraft.Status)1 ReadIndexClosure (com.alipay.sofa.jraft.closure.ReadIndexClosure)1 BaseRequestCommand (com.alipay.sofa.jraft.test.atomic.command.BaseRequestCommand)1 CompareAndSetCommand (com.alipay.sofa.jraft.test.atomic.command.CompareAndSetCommand)1 SetCommand (com.alipay.sofa.jraft.test.atomic.command.SetCommand)1 ByteBuffer (java.nio.ByteBuffer)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1