You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by as...@apache.org on 2021/02/17 11:39:39 UTC

[ignite-3] branch ignite-14149 updated: IGNITE-14149 Raft group services.

This is an automated email from the ASF dual-hosted git repository.

ascherbakov pushed a commit to branch ignite-14149
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/ignite-14149 by this push:
     new 7ffe756  IGNITE-14149 Raft group services.
7ffe756 is described below

commit 7ffe7563b713c49ff101ccc23861ee00c6de6a8e
Author: Alexey Scherbakov <al...@gmail.com>
AuthorDate: Wed Feb 17 14:39:18 2021 +0300

    IGNITE-14149 Raft group services.
---
 .../raft/client/RaftClientCommonMessages.java      | 20 ++++++++++++++++++
 .../raft/client/{ => rpc}/RaftGroupRpcClient.java  |  4 ++--
 .../{ => rpc}/impl/RaftGroupRpcClientImpl.java     | 24 ++++++++++++----------
 .../client/service/RaftGroupClientService.java     |  8 ++++++++
 .../raft/client/service/RaftGroupMgmtService.java  |  5 +++++
 .../ignite/raft/client/RaftGroupRpcClientTest.java |  4 ++--
 6 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/modules/raft-client/src/main/java/org/apache/ignite/raft/client/RaftClientCommonMessages.java b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/RaftClientCommonMessages.java
index 39b9b90..30b1cb5 100644
--- a/modules/raft-client/src/main/java/org/apache/ignite/raft/client/RaftClientCommonMessages.java
+++ b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/RaftClientCommonMessages.java
@@ -256,4 +256,24 @@ public final class RaftClientCommonMessages {
             LearnersOpResponse build();
         }
     }
+
+    public interface UserRequest<T> extends Message {
+        T request();
+
+        public interface Builder<T> {
+            Builder setRequest(T request);
+
+            UserRequest<T> build();
+        }
+    }
+
+    public interface UserResponse<T> extends Message {
+        T response();
+
+        public interface Builder<T> {
+            Builder setResponse(T response);
+
+            UserResponse<T> build();
+        }
+    }
 }
diff --git a/modules/raft-client/src/main/java/org/apache/ignite/raft/client/RaftGroupRpcClient.java b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/rpc/RaftGroupRpcClient.java
similarity index 98%
rename from modules/raft-client/src/main/java/org/apache/ignite/raft/client/RaftGroupRpcClient.java
rename to modules/raft-client/src/main/java/org/apache/ignite/raft/client/rpc/RaftGroupRpcClient.java
index bccfded..acdac5b 100644
--- a/modules/raft-client/src/main/java/org/apache/ignite/raft/client/RaftGroupRpcClient.java
+++ b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/rpc/RaftGroupRpcClient.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.raft.client;
+package org.apache.ignite.raft.client.rpc;
 
 import java.util.concurrent.Future;
 import org.apache.ignite.raft.State;
@@ -38,7 +38,7 @@ import static org.apache.ignite.raft.client.RaftClientCommonMessages.StatusRespo
 import static org.apache.ignite.raft.client.RaftClientCommonMessages.TransferLeaderRequest;
 
 /**
- * Raft group RPC client.
+ * Low-level raft group RPC client.
  */
 public interface RaftGroupRpcClient {
     /**
diff --git a/modules/raft-client/src/main/java/org/apache/ignite/raft/client/impl/RaftGroupRpcClientImpl.java b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/rpc/impl/RaftGroupRpcClientImpl.java
similarity index 87%
rename from modules/raft-client/src/main/java/org/apache/ignite/raft/client/impl/RaftGroupRpcClientImpl.java
rename to modules/raft-client/src/main/java/org/apache/ignite/raft/client/rpc/impl/RaftGroupRpcClientImpl.java
index affa939..0a1fb69 100644
--- a/modules/raft-client/src/main/java/org/apache/ignite/raft/client/impl/RaftGroupRpcClientImpl.java
+++ b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/rpc/impl/RaftGroupRpcClientImpl.java
@@ -1,4 +1,4 @@
-package org.apache.ignite.raft.client.impl;
+package org.apache.ignite.raft.client.rpc.impl;
 
 import java.util.HashSet;
 import java.util.Map;
@@ -12,7 +12,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.ignite.raft.PeerId;
 import org.apache.ignite.raft.State;
 import org.apache.ignite.raft.client.RaftClientCommonMessages;
-import org.apache.ignite.raft.client.RaftGroupRpcClient;
+import org.apache.ignite.raft.client.rpc.RaftGroupRpcClient;
 import org.apache.ignite.raft.client.message.RaftClientCommonMessageBuilderFactory;
 import org.apache.ignite.raft.rpc.InvokeCallback;
 import org.apache.ignite.raft.rpc.Message;
@@ -114,18 +114,20 @@ public class RaftGroupRpcClientImpl implements RaftGroupRpcClient {
 
         if (state.getLeader() == null) {
             synchronized (state) {
-                CompletableFuture<RaftClientCommonMessages.GetLeaderResponse> fut0 =
-                    refreshLeader(initialCfgNodes.iterator().next(), request.getGroupId()); // TODO asch search all nodes.
+                PeerId leader = state.getLeader();
 
-                try {
-                    RaftClientCommonMessages.GetLeaderResponse resp = fut0.get(defaultTimeout, TimeUnit.MILLISECONDS);
+                if (leader == null) {
+                    CompletableFuture<RaftClientCommonMessages.GetLeaderResponse> fut0 =
+                        refreshLeader(initialCfgNodes.iterator().next(), request.getGroupId()); // TODO asch search all nodes.
 
-                    state.setLeader(resp.getLeaderId());
-                }
-                catch (Exception e) {
-                    fut.completeExceptionally(e);
+                    try {
+                        state.setLeader(fut0.get(defaultTimeout, TimeUnit.MILLISECONDS).getLeaderId());
+                    }
+                    catch (Exception e) {
+                        fut.completeExceptionally(e);
 
-                    return fut;
+                        return fut;
+                    }
                 }
             }
         }
diff --git a/modules/raft-client/src/main/java/org/apache/ignite/raft/client/service/RaftGroupClientService.java b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/service/RaftGroupClientService.java
new file mode 100644
index 0000000..82f71f7
--- /dev/null
+++ b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/service/RaftGroupClientService.java
@@ -0,0 +1,8 @@
+package org.apache.ignite.raft.client.service;
+
+/**
+ *
+ */
+public interface RaftGroupClientService {
+    <T, R> R submit(T request);
+}
diff --git a/modules/raft-client/src/main/java/org/apache/ignite/raft/client/service/RaftGroupMgmtService.java b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/service/RaftGroupMgmtService.java
new file mode 100644
index 0000000..ae86483
--- /dev/null
+++ b/modules/raft-client/src/main/java/org/apache/ignite/raft/client/service/RaftGroupMgmtService.java
@@ -0,0 +1,5 @@
+package org.apache.ignite.raft.client.service;
+
+/** */
+public interface RaftGroupMgmtService {
+}
diff --git a/modules/raft-client/src/test/java/org/apache/ignite/raft/client/RaftGroupRpcClientTest.java b/modules/raft-client/src/test/java/org/apache/ignite/raft/client/RaftGroupRpcClientTest.java
index bf1656a..5aa14b5 100644
--- a/modules/raft-client/src/test/java/org/apache/ignite/raft/client/RaftGroupRpcClientTest.java
+++ b/modules/raft-client/src/test/java/org/apache/ignite/raft/client/RaftGroupRpcClientTest.java
@@ -5,9 +5,9 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.Future;
 import org.apache.ignite.raft.PeerId;
 import org.apache.ignite.raft.State;
-import org.apache.ignite.raft.client.impl.RaftGroupRpcClientImpl;
-import org.apache.ignite.raft.client.message.GetLeaderResponseImpl;
+import org.apache.ignite.raft.client.rpc.impl.RaftGroupRpcClientImpl;
 import org.apache.ignite.raft.client.message.RaftClientCommonMessageBuilderFactory;
+import org.apache.ignite.raft.client.rpc.RaftGroupRpcClient;
 import org.apache.ignite.raft.rpc.InvokeCallback;
 import org.apache.ignite.raft.rpc.Message;
 import org.apache.ignite.raft.rpc.NodeImpl;