sanpwc commented on code in PR #722:
URL: https://github.com/apache/ignite-3/pull/722#discussion_r849815767


##########
modules/cluster-management/src/main/java/org/apache/ignite/internal/cluster/management/ClusterManagementGroupManager.java:
##########
@@ -18,103 +18,114 @@
 package org.apache.ignite.internal.cluster.management;
 
 import static io.netty.handler.codec.http.HttpHeaderValues.APPLICATION_JSON;
+import static java.util.concurrent.CompletableFuture.completedFuture;
+import static java.util.stream.Collectors.toSet;
 import static org.apache.ignite.network.util.ClusterServiceUtils.resolveNodes;
 
 import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
-import 
org.apache.ignite.internal.cluster.management.messages.CancelInitMessage;
-import 
org.apache.ignite.internal.cluster.management.messages.ClusterStateMessage;
-import org.apache.ignite.internal.cluster.management.messages.CmgInitMessage;
-import org.apache.ignite.internal.cluster.management.messages.CmgMessageGroup;
-import 
org.apache.ignite.internal.cluster.management.messages.CmgMessagesFactory;
+import 
org.apache.ignite.internal.cluster.management.network.CmgMessageHandlerFactory;
+import 
org.apache.ignite.internal.cluster.management.network.messages.CancelInitMessage;
+import 
org.apache.ignite.internal.cluster.management.network.messages.ClusterStateMessage;
+import 
org.apache.ignite.internal.cluster.management.network.messages.CmgInitMessage;
+import 
org.apache.ignite.internal.cluster.management.network.messages.CmgMessageGroup;
+import 
org.apache.ignite.internal.cluster.management.network.messages.CmgMessagesFactory;
+import org.apache.ignite.internal.cluster.management.raft.ClusterState;
+import org.apache.ignite.internal.cluster.management.raft.CmgRaftGroupListener;
+import org.apache.ignite.internal.cluster.management.raft.CmgRaftService;
+import org.apache.ignite.internal.cluster.management.raft.RaftStorage;
 import org.apache.ignite.internal.cluster.management.rest.InitCommandHandler;
 import org.apache.ignite.internal.manager.IgniteComponent;
 import org.apache.ignite.internal.raft.Loza;
 import org.apache.ignite.internal.rest.RestComponent;
 import org.apache.ignite.internal.util.IgniteSpinBusyLock;
+import org.apache.ignite.internal.util.IgniteUtils;
+import org.apache.ignite.internal.vault.VaultManager;
 import org.apache.ignite.lang.IgniteInternalException;
 import org.apache.ignite.lang.IgniteLogger;
 import org.apache.ignite.lang.NodeStoppingException;
 import org.apache.ignite.network.ClusterNode;
 import org.apache.ignite.network.ClusterService;
-import org.apache.ignite.network.MessagingService;
 import org.apache.ignite.network.NetworkAddress;
 import org.apache.ignite.network.NetworkMessage;
-import org.apache.ignite.raft.client.Peer;
-import org.apache.ignite.raft.client.service.RaftGroupService;
+import org.apache.ignite.network.TopologyEventHandler;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Ignite component responsible for cluster initialization and managing the 
Cluster Management Raft Group.
+ *
+ * <p>Refer to
+ * <a 
href="https://cwiki.apache.org/confluence/display/IGNITE/IEP-77%3A+Node+Join+Protocol+and+Initialization+for+Ignite+3";>IEP-77</a>
+ * for the description of the Cluster Management Group and its 
responsibilities.
  */
 public class ClusterManagementGroupManager implements IgniteComponent {
+    // TODO: timeout should be configurable, see 
https://issues.apache.org/jira/browse/IGNITE-16785
+    private static final int NETWORK_INVOKE_TIMEOUT = 500;
+
     private static final IgniteLogger log = 
IgniteLogger.forClass(ClusterManagementGroupManager.class);
 
     /** CMG Raft group name. */
     private static final String CMG_RAFT_GROUP_NAME = "cmg_raft_group";
 
     /** Init REST endpoint path. */
-    public static final String REST_ENDPOINT = "/management/v1/cluster/init";
+    private static final String REST_ENDPOINT = "/management/v1/cluster/init";
 
     /** Busy lock to stop synchronously. */
     private final IgniteSpinBusyLock busyLock = new IgniteSpinBusyLock();
 
     /** Prevents double stopping the component. */
     private final AtomicBoolean stopGuard = new AtomicBoolean();
 
+    /** Future that resolves into a CMG Raft service. Can be {@code null} if 
the Raft service has not been started. */
+    @Nullable
+    private CompletableFuture<CmgRaftService> raftService;
+
+    /** Lock for the {@code raftService} field. */
+    private final Object raftServiceLock = new Object();
+
+    /** Future that resolves into a list of node names that host the Meta 
Storage. */
+    private final CompletableFuture<Collection<String>> metaStorageNodes = new 
CompletableFuture<>();
+
+    /** Message factory. */
+    private final CmgMessagesFactory msgFactory = new CmgMessagesFactory();
+
+    /** Delayed executor. */
+    private final ScheduledExecutorService scheduledExecutor = 
Executors.newSingleThreadScheduledExecutor();
+
     private final ClusterService clusterService;
 
     private final Loza raftManager;
 
-    private final RestComponent restModule;
+    private final RestComponent restComponent;
 
-    /** Handles cluster initialization flow. */
-    private final ClusterInitializer clusterInitializer;
+    private final RaftStorage raftStorage;

Review Comment:
   Because it's actually ClusterStateRaftStorage, which is explicitly denoted 
within its javadoc
   ```
   /**
    * Storage for the CMG Raft service.
    */
   public interface RaftStorage extends AutoCloseable {
   ```
   
   I mean that you should either consider it as general SimpleKeyValue storage 
and move it to some common place or consider it as ClusterState one.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to