Repository: incubator-ratis Updated Branches: refs/heads/master a5b84af2d -> 237be5d10
RATIS-8. Avoid using Optional for data fields in TransactionContext. Contributed by Hugo Louro. Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/237be5d1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/237be5d1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/237be5d1 Branch: refs/heads/master Commit: 237be5d10b389fd4f0b7829bb95e88ec94e8b72f Parents: a5b84af Author: Jing Zhao <[email protected]> Authored: Sat Jul 8 21:02:26 2017 -0700 Committer: Jing Zhao <[email protected]> Committed: Sat Jul 8 21:02:26 2017 -0700 ---------------------------------------------------------------------- .../arithmetic/ArithmeticStateMachine.java | 2 +- .../ratis/server/impl/RaftServerImpl.java | 5 +- .../apache/ratis/server/storage/RaftLog.java | 2 +- .../ratis/statemachine/BaseStateMachine.java | 2 +- .../ratis/statemachine/TransactionContext.java | 52 ++++++++++---------- .../SimpleStateMachine4Testing.java | 2 +- .../ratis/statemachine/TestStateMachine.java | 18 +++---- 7 files changed, 41 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/237be5d1/ratis-examples/src/main/java/org/apache/ratis/examples/arithmetic/ArithmeticStateMachine.java ---------------------------------------------------------------------- diff --git a/ratis-examples/src/main/java/org/apache/ratis/examples/arithmetic/ArithmeticStateMachine.java b/ratis-examples/src/main/java/org/apache/ratis/examples/arithmetic/ArithmeticStateMachine.java index 53e8ab7..a4199b6 100644 --- a/ratis-examples/src/main/java/org/apache/ratis/examples/arithmetic/ArithmeticStateMachine.java +++ b/ratis-examples/src/main/java/org/apache/ratis/examples/arithmetic/ArithmeticStateMachine.java @@ -156,7 +156,7 @@ public class ArithmeticStateMachine extends BaseStateMachine { @Override public CompletableFuture<Message> applyTransaction(TransactionContext trx) { - final LogEntryProto entry = trx.getLogEntry().get(); + final LogEntryProto entry = trx.getLogEntry(); final AssignmentMessage assignment = new AssignmentMessage( () -> entry.getSmLogEntry().getData()); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/237be5d1/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java index 88cf240..0f8e692 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java @@ -435,10 +435,9 @@ public class RaftServerImpl implements RaftServerProtocol, // later which means that any failure in between will leave partial state in // the state machine. We should call cancelTransaction() for failed requests TransactionContext context = stateMachine.startTransaction(request); - if (context.getException().isPresent()) { + if (context.getException() != null) { RaftClientReply exceptionReply = new RaftClientReply(request, - new StateMachineException(getId().toString(), - context.getException().get())); + new StateMachineException(getId().toString(), context.getException())); cacheEntry.failWithReply(exceptionReply); return CompletableFuture.completedFuture(exceptionReply); } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/237be5d1/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java index 8b60f2d..ee765c1 100644 --- a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java +++ b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java @@ -141,7 +141,7 @@ public abstract class RaftLog implements Closeable { // build the log entry after calling the StateMachine final LogEntryProto e = ProtoUtils.toLogEntryProto( - operation.getSMLogEntry().get(), term, nextIndex, clientId, callId); + operation.getSMLogEntry(), term, nextIndex, clientId, callId); appendEntry(e); operation.setLogEntry(e); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/237be5d1/ratis-server/src/main/java/org/apache/ratis/statemachine/BaseStateMachine.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/statemachine/BaseStateMachine.java b/ratis-server/src/main/java/org/apache/ratis/statemachine/BaseStateMachine.java index 9a0e999..d35dc88 100644 --- a/ratis-server/src/main/java/org/apache/ratis/statemachine/BaseStateMachine.java +++ b/ratis-server/src/main/java/org/apache/ratis/statemachine/BaseStateMachine.java @@ -93,7 +93,7 @@ public class BaseStateMachine implements StateMachine { @Override public CompletableFuture<Message> applyTransaction(TransactionContext trx) { // return the same message contained in the entry - Message msg = () -> trx.getLogEntry().get().getSmLogEntry().getData(); + Message msg = () -> trx.getLogEntry().getSmLogEntry().getData(); return CompletableFuture.completedFuture(msg); } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/237be5d1/ratis-server/src/main/java/org/apache/ratis/statemachine/TransactionContext.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/main/java/org/apache/ratis/statemachine/TransactionContext.java b/ratis-server/src/main/java/org/apache/ratis/statemachine/TransactionContext.java index 81bea45..3a6adfc 100644 --- a/ratis-server/src/main/java/org/apache/ratis/statemachine/TransactionContext.java +++ b/ratis-server/src/main/java/org/apache/ratis/statemachine/TransactionContext.java @@ -49,13 +49,13 @@ public class TransactionContext { private final StateMachine stateMachine; /** Original request from the client */ - private Optional<RaftClientRequest> clientRequest = Optional.empty(); + private RaftClientRequest clientRequest; /** Exception from the {@link StateMachine} or from the log */ - private Optional<Exception> exception = Optional.empty(); + private Exception exception; /** Data from the {@link StateMachine} */ - private Optional<SMLogEntryProto> smLogEntryProto = Optional.empty(); + private SMLogEntryProto smLogEntryProto; /** * Context specific to the state machine. @@ -63,7 +63,7 @@ public class TransactionContext { * {@link StateMachine#startTransaction(RaftClientRequest)} and * {@link StateMachine#applyTransaction(TransactionContext)}. */ - private Optional<Object> stateMachineContext = Optional.empty(); + private Object stateMachineContext; /** * Whether to commit the transaction to the RAFT Log. @@ -73,7 +73,7 @@ public class TransactionContext { private boolean shouldCommit = true; /** Committed LogEntry. */ - private Optional<LogEntryProto> logEntry = Optional.empty(); + private LogEntryProto logEntry; private TransactionContext(StateMachine stateMachine) { this.stateMachine = stateMachine; @@ -96,9 +96,9 @@ public class TransactionContext { StateMachine stateMachine, RaftClientRequest clientRequest, SMLogEntryProto smLogEntryProto, Object stateMachineContext) { this(stateMachine); - this.clientRequest = Optional.of(clientRequest); - this.smLogEntryProto = Optional.ofNullable(smLogEntryProto); - this.stateMachineContext = Optional.ofNullable(stateMachineContext); + this.clientRequest = clientRequest; + this.smLogEntryProto = smLogEntryProto; + this.stateMachineContext = stateMachineContext; } /** The same as this(stateMachine, clientRequest, exception, null). */ @@ -117,9 +117,9 @@ public class TransactionContext { StateMachine stateMachine, RaftClientRequest clientRequest, Exception exception, Object stateMachineContext) { this(stateMachine); - this.clientRequest = Optional.of(clientRequest); - this.exception = Optional.of(exception); - this.stateMachineContext = Optional.ofNullable(stateMachineContext); + this.clientRequest = clientRequest; + this.exception = exception; + this.stateMachineContext = stateMachineContext; } /** @@ -129,48 +129,48 @@ public class TransactionContext { */ public TransactionContext(StateMachine stateMachine, LogEntryProto logEntry) { this(stateMachine); - this.smLogEntryProto = Optional.of(logEntry.getSmLogEntry()); - this.logEntry = Optional.of(logEntry); + this.smLogEntryProto = logEntry.getSmLogEntry(); + this.logEntry = logEntry; } - public Optional<RaftClientRequest> getClientRequest() { - return this.clientRequest; + public RaftClientRequest getClientRequest() { + return clientRequest; } - public Optional<SMLogEntryProto> getSMLogEntry() { - return this.smLogEntryProto; + public SMLogEntryProto getSMLogEntry() { + return smLogEntryProto; } - public Optional<Exception> getException() { - return this.exception; + public Exception getException() { + return exception; } public TransactionContext setStateMachineContext(Object stateMachineContext) { - this.stateMachineContext = Optional.ofNullable(stateMachineContext); + this.stateMachineContext = stateMachineContext; return this; } - public Optional<Object> getStateMachineContext() { + public Object getStateMachineContext() { return stateMachineContext; } public TransactionContext setLogEntry(LogEntryProto logEntry) { - this.logEntry = Optional.of(logEntry); + this.logEntry = logEntry; return this; } public TransactionContext setSmLogEntryProto(SMLogEntryProto smLogEntryProto) { - this.smLogEntryProto = Optional.of(smLogEntryProto); + this.smLogEntryProto = smLogEntryProto; return this; } - public Optional<LogEntryProto> getLogEntry() { + public LogEntryProto getLogEntry() { return logEntry; } private TransactionContext setException(IOException ioe) { - assert !this.exception.isPresent(); - this.exception = Optional.of(ioe); + assert exception != null; + this.exception = ioe; return this; } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/237be5d1/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java b/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java index 4ecc282..a0c4f45 100644 --- a/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java +++ b/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java @@ -123,7 +123,7 @@ public class SimpleStateMachine4Testing extends BaseStateMachine { @Override public CompletableFuture<Message> applyTransaction(TransactionContext trx) { - LogEntryProto entry = Objects.requireNonNull(trx.getLogEntry().get()); + LogEntryProto entry = Objects.requireNonNull(trx.getLogEntry()); list.add(entry); termIndexTracker.update(ServerProtoUtils.toTermIndex(entry)); return CompletableFuture.completedFuture( http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/237be5d1/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java ---------------------------------------------------------------------- diff --git a/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java b/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java index cf4880c..a5f2c07 100644 --- a/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java +++ b/ratis-server/src/test/java/org/apache/ratis/statemachine/TestStateMachine.java @@ -121,19 +121,19 @@ public class TestStateMachine { @Override public CompletableFuture<Message> applyTransaction(TransactionContext trx) { try { - assertTrue(trx.getLogEntry().isPresent()); - assertTrue(trx.getSMLogEntry().isPresent()); - Optional<Object> context = trx.getStateMachineContext(); + assertNotNull(trx.getLogEntry()); + assertNotNull(trx.getSMLogEntry()); + Object context = trx.getStateMachineContext(); if (isLeader.get()) { - assertTrue(trx.getClientRequest().isPresent()); - assertTrue(context.isPresent()); - assertTrue(context.get() instanceof Long); - Long val = (Long)context.get(); + assertNotNull(trx.getClientRequest()); + assertNotNull(context); + assertTrue(context instanceof Long); + Long val = (Long)context; assertTrue(val <= transactions.get()); applied.add(val); } else { - assertFalse(trx.getClientRequest().isPresent()); - assertFalse(context.isPresent()); + assertNull(trx.getClientRequest()); + assertNull(context); } numApplied.incrementAndGet(); } catch (Throwable t) {
