From 492a2b715e92211f95f77e033d027aad9eaec815 Mon Sep 17 00:00:00 2001 From: Jordan Halterman Date: Mon, 3 Jul 2017 01:18:27 -0700 Subject: [PATCH] Move Raft operation executor to service package. --- .../protocols/raft/service/AbstractRaftService.java | 11 +++++------ .../io/atomix/protocols/raft/service/RaftCommit.java | 3 +-- .../io/atomix/protocols/raft/service/RaftService.java | 9 ++++----- .../RaftServiceExecutor.java} | 7 +++++-- .../impl/DefaultRaftServiceExecutor.java} | 8 ++++---- .../test/java/io/atomix/protocols/raft/RaftTest.java | 4 ++-- .../io/atomix/protocols/raft/RaftPerformanceTest.java | 4 ++-- 7 files changed, 23 insertions(+), 23 deletions(-) rename protocols/raft/src/main/java/io/atomix/protocols/raft/{operation/RaftOperationExecutor.java => service/RaftServiceExecutor.java} (95%) rename protocols/raft/src/main/java/io/atomix/protocols/raft/{operation/impl/DefaultRaftOperationExecutor.java => service/impl/DefaultRaftServiceExecutor.java} (97%) diff --git a/protocols/raft/src/main/java/io/atomix/protocols/raft/service/AbstractRaftService.java b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/AbstractRaftService.java index f0f6e4c9d8..43db7211b9 100644 --- a/protocols/raft/src/main/java/io/atomix/protocols/raft/service/AbstractRaftService.java +++ b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/AbstractRaftService.java @@ -15,8 +15,7 @@ */ package io.atomix.protocols.raft.service; -import io.atomix.protocols.raft.operation.RaftOperationExecutor; -import io.atomix.protocols.raft.operation.impl.DefaultRaftOperationExecutor; +import io.atomix.protocols.raft.service.impl.DefaultRaftServiceExecutor; import io.atomix.protocols.raft.session.RaftSession; import io.atomix.protocols.raft.session.RaftSessions; import io.atomix.time.LogicalClock; @@ -28,12 +27,12 @@ */ public abstract class AbstractRaftService implements RaftService { private ServiceContext context; - private RaftOperationExecutor executor; + private RaftServiceExecutor executor; @Override public void init(ServiceContext context) { this.context = context; - this.executor = new DefaultRaftOperationExecutor(context); + this.executor = new DefaultRaftServiceExecutor(context); configure(executor); } @@ -47,11 +46,11 @@ public byte[] apply(RaftCommit commit) { *

* By default, this method will configure state machine operations by extracting public methods with * a single {@link RaftCommit} parameter via reflection. Override this method to explicitly register - * state machine operations via the provided {@link RaftOperationExecutor}. + * state machine operations via the provided {@link RaftServiceExecutor}. * * @param executor The state machine executor. */ - protected abstract void configure(RaftOperationExecutor executor); + protected abstract void configure(RaftServiceExecutor executor); /** * Returns the service context. diff --git a/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftCommit.java b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftCommit.java index a28ff375dc..10021c821e 100644 --- a/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftCommit.java +++ b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftCommit.java @@ -18,7 +18,6 @@ import io.atomix.protocols.raft.operation.OperationId; import io.atomix.protocols.raft.event.RaftEvent; import io.atomix.protocols.raft.operation.RaftOperation; -import io.atomix.protocols.raft.operation.RaftOperationExecutor; import io.atomix.protocols.raft.session.RaftSession; import io.atomix.time.LogicalTimestamp; import io.atomix.time.WallClockTimestamp; @@ -72,7 +71,7 @@ public interface RaftCommit { * commit times are guaranteed to progress monotonically, never going back in time. *

* Users should never use {@code System} time to control behavior in a state machine and should instead rely - * upon {@link RaftCommit} times or use the {@link RaftOperationExecutor} for time-based controls. + * upon {@link RaftCommit} times or use the {@link RaftServiceExecutor} for time-based controls. * * @return The commit time. */ diff --git a/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftService.java b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftService.java index cd4a1203d7..bb9e09fd32 100644 --- a/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftService.java +++ b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftService.java @@ -17,7 +17,6 @@ import io.atomix.protocols.raft.event.RaftEvent; import io.atomix.protocols.raft.operation.RaftOperation; -import io.atomix.protocols.raft.operation.RaftOperationExecutor; import io.atomix.protocols.raft.RaftServer; import io.atomix.protocols.raft.session.RaftSession; import io.atomix.protocols.raft.session.RaftSessionListener; @@ -41,7 +40,7 @@ *

*

State machine operations

* State machine operations are implemented as methods on the state machine. Operations can be automatically detected - * by the state machine during setup or can be explicitly registered by overriding the {@link #configure(RaftOperationExecutor)} + * by the state machine during setup or can be explicitly registered by overriding the {@link #configure(RaftServiceExecutor)} * method. Each operation method must take a single {@link RaftCommit} argument for a specific operation type. *
  *   {@code
@@ -85,11 +84,11 @@
  * that will be sent back to the client.
  * 

*

Deterministic scheduling

- * The {@link RaftOperationExecutor} is responsible for executing state machine operations sequentially and provides an + * The {@link RaftServiceExecutor} is responsible for executing state machine operations sequentially and provides an * interface similar to that of {@link java.util.concurrent.ScheduledExecutorService} to allow state machines to schedule * time-based callbacks. Because of the determinism requirement, scheduled callbacks are guaranteed to be executed * deterministically as well. The executor can be accessed via the {@link #executor} field. - * See the {@link RaftOperationExecutor} documentation for more information. + * See the {@link RaftServiceExecutor} documentation for more information. *
  *   {@code
  *   public void putWithTtl(Commit commit) {
@@ -154,7 +153,7 @@
  *
  * @see RaftCommit
  * @see ServiceContext
- * @see RaftOperationExecutor
+ * @see RaftServiceExecutor
  */
 public interface RaftService extends Snapshottable, RaftSessionListener {
 
diff --git a/protocols/raft/src/main/java/io/atomix/protocols/raft/operation/RaftOperationExecutor.java b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftServiceExecutor.java
similarity index 95%
rename from protocols/raft/src/main/java/io/atomix/protocols/raft/operation/RaftOperationExecutor.java
rename to protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftServiceExecutor.java
index e2f2840119..93d0d255e8 100644
--- a/protocols/raft/src/main/java/io/atomix/protocols/raft/operation/RaftOperationExecutor.java
+++ b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/RaftServiceExecutor.java
@@ -14,9 +14,12 @@
  * limitations under the License.
  */
 
-package io.atomix.protocols.raft.operation;
+package io.atomix.protocols.raft.service;
 
 import io.atomix.protocols.raft.ReadConsistency;
+import io.atomix.protocols.raft.operation.OperationId;
+import io.atomix.protocols.raft.operation.OperationType;
+import io.atomix.protocols.raft.operation.RaftOperation;
 import io.atomix.protocols.raft.service.RaftCommit;
 import io.atomix.protocols.raft.service.RaftService;
 import io.atomix.protocols.raft.service.ServiceContext;
@@ -65,7 +68,7 @@
  * @see RaftService
  * @see ServiceContext
  */
-public interface RaftOperationExecutor extends ThreadContext {
+public interface RaftServiceExecutor extends ThreadContext {
 
   /**
    * Applies the given commit to the executor.
diff --git a/protocols/raft/src/main/java/io/atomix/protocols/raft/operation/impl/DefaultRaftOperationExecutor.java b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/impl/DefaultRaftServiceExecutor.java
similarity index 97%
rename from protocols/raft/src/main/java/io/atomix/protocols/raft/operation/impl/DefaultRaftOperationExecutor.java
rename to protocols/raft/src/main/java/io/atomix/protocols/raft/service/impl/DefaultRaftServiceExecutor.java
index 609646bf6d..d28c7fbdf6 100644
--- a/protocols/raft/src/main/java/io/atomix/protocols/raft/operation/impl/DefaultRaftOperationExecutor.java
+++ b/protocols/raft/src/main/java/io/atomix/protocols/raft/service/impl/DefaultRaftServiceExecutor.java
@@ -13,13 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.atomix.protocols.raft.operation.impl;
+package io.atomix.protocols.raft.service.impl;
 
 import io.atomix.protocols.raft.operation.OperationId;
 import io.atomix.protocols.raft.operation.OperationType;
 import io.atomix.protocols.raft.service.RaftCommit;
 import io.atomix.protocols.raft.RaftException;
-import io.atomix.protocols.raft.operation.RaftOperationExecutor;
+import io.atomix.protocols.raft.service.RaftServiceExecutor;
 import io.atomix.protocols.raft.service.AbstractRaftService;
 import io.atomix.protocols.raft.service.ServiceContext;
 import io.atomix.utils.concurrent.Scheduled;
@@ -43,7 +43,7 @@
 /**
  * Default operation executor.
  */
-public class DefaultRaftOperationExecutor implements RaftOperationExecutor {
+public class DefaultRaftServiceExecutor implements RaftServiceExecutor {
   private final Logger log;
   private final Queue tasks = new LinkedList<>();
   private final List scheduledTasks = new ArrayList<>();
@@ -52,7 +52,7 @@ public class DefaultRaftOperationExecutor implements RaftOperationExecutor {
   private OperationType operationType;
   private long timestamp;
 
-  public DefaultRaftOperationExecutor(ServiceContext context) {
+  public DefaultRaftServiceExecutor(ServiceContext context) {
     this.log = ContextualLoggerFactory.getLogger(getClass(), LoggerContext.builder(AbstractRaftService.class)
         .addValue(context.serviceId())
         .add("type", context.serviceType())
diff --git a/protocols/raft/src/test/java/io/atomix/protocols/raft/RaftTest.java b/protocols/raft/src/test/java/io/atomix/protocols/raft/RaftTest.java
index a27f99a617..29badc8615 100644
--- a/protocols/raft/src/test/java/io/atomix/protocols/raft/RaftTest.java
+++ b/protocols/raft/src/test/java/io/atomix/protocols/raft/RaftTest.java
@@ -24,7 +24,7 @@
 import io.atomix.protocols.raft.operation.OperationId;
 import io.atomix.protocols.raft.operation.OperationType;
 import io.atomix.protocols.raft.operation.RaftOperation;
-import io.atomix.protocols.raft.operation.RaftOperationExecutor;
+import io.atomix.protocols.raft.service.RaftServiceExecutor;
 import io.atomix.protocols.raft.protocol.TestRaftProtocolFactory;
 import io.atomix.protocols.raft.proxy.RaftProxy;
 import io.atomix.protocols.raft.service.AbstractRaftService;
@@ -1326,7 +1326,7 @@ public static class TestStateMachine extends AbstractRaftService {
     private RaftCommit close;
 
     @Override
-    protected void configure(RaftOperationExecutor executor) {
+    protected void configure(RaftServiceExecutor executor) {
       executor.register(WRITE, this::write, clientSerializer::encode);
       executor.register(READ, this::read, clientSerializer::encode);
       executor.register(EVENT, clientSerializer::decode, this::event, clientSerializer::encode);
diff --git a/tests/src/main/java/io/atomix/protocols/raft/RaftPerformanceTest.java b/tests/src/main/java/io/atomix/protocols/raft/RaftPerformanceTest.java
index 620520f1fa..ed34e5de8c 100644
--- a/tests/src/main/java/io/atomix/protocols/raft/RaftPerformanceTest.java
+++ b/tests/src/main/java/io/atomix/protocols/raft/RaftPerformanceTest.java
@@ -25,7 +25,7 @@
 import io.atomix.protocols.raft.operation.OperationId;
 import io.atomix.protocols.raft.operation.OperationType;
 import io.atomix.protocols.raft.operation.RaftOperation;
-import io.atomix.protocols.raft.operation.RaftOperationExecutor;
+import io.atomix.protocols.raft.service.RaftServiceExecutor;
 import io.atomix.protocols.raft.protocol.AppendRequest;
 import io.atomix.protocols.raft.protocol.AppendResponse;
 import io.atomix.protocols.raft.protocol.CloseSessionRequest;
@@ -528,7 +528,7 @@ public class PerformanceStateMachine extends AbstractRaftService {
     private Map map = new HashMap<>();
 
     @Override
-    protected void configure(RaftOperationExecutor executor) {
+    protected void configure(RaftServiceExecutor executor) {
       executor.register(PUT, clientSerializer::decode, this::put, clientSerializer::encode);
       executor.register(GET, clientSerializer::decode, this::get, clientSerializer::encode);
       executor.register(REMOVE, clientSerializer::decode, this::remove, clientSerializer::encode);