From fd8dafd5f9afe1ce86bea6934467dd46a9cb02c4 Mon Sep 17 00:00:00 2001 From: RongtongJin Date: Fri, 17 Jun 2022 15:50:20 +0800 Subject: [PATCH] ReplicasInfoManager use controller config instead of enableElectUncleanMaster so that it can be modified at run time --- .../org/apache/rocketmq/controller/Controller.java | 12 ++++++------ .../controller/impl/manager/ReplicasInfoManager.java | 8 ++++---- .../controller/impl/manager/SyncStateInfo.java | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/controller/src/main/java/org/apache/rocketmq/controller/Controller.java b/controller/src/main/java/org/apache/rocketmq/controller/Controller.java index cbd11f5915..3b28d24d9b 100644 --- a/controller/src/main/java/org/apache/rocketmq/controller/Controller.java +++ b/controller/src/main/java/org/apache/rocketmq/controller/Controller.java @@ -58,7 +58,7 @@ public interface Controller { boolean isLeaderState(); /** - * Alter ISR of broker replicas. + * Alter SyncStateSet of broker replicas. * * @param request AlterSyncStateSetRequestHeader * @return RemotingCommand(AlterSyncStateSetResponseHeader) @@ -90,11 +90,6 @@ public interface Controller { */ CompletableFuture getReplicaInfo(final GetReplicaInfoRequestHeader request); - /** - * Get inSyncStateData for target brokers, this api is used for admin tools. - */ - CompletableFuture getSyncStateData(final List brokerNames); - /** * Get Metadata of controller * @@ -102,6 +97,11 @@ public interface Controller { */ RemotingCommand getControllerMetadata(); + /** + * Get inSyncStateData for target brokers, this api is used for admin tools. + */ + CompletableFuture getSyncStateData(final List brokerNames); + /** * Get the remotingServer used by the controller, the upper layer will reuse this remotingServer. */ diff --git a/controller/src/main/java/org/apache/rocketmq/controller/impl/manager/ReplicasInfoManager.java b/controller/src/main/java/org/apache/rocketmq/controller/impl/manager/ReplicasInfoManager.java index ba350e5a3f..13fc60a8ad 100644 --- a/controller/src/main/java/org/apache/rocketmq/controller/impl/manager/ReplicasInfoManager.java +++ b/controller/src/main/java/org/apache/rocketmq/controller/impl/manager/ReplicasInfoManager.java @@ -56,12 +56,12 @@ import org.apache.rocketmq.logging.InternalLoggerFactory; */ public class ReplicasInfoManager { private static final InternalLogger log = InternalLoggerFactory.getLogger(LoggerName.CONTROLLER_LOGGER_NAME); - private final boolean enableElectUncleanMaster; + private final ControllerConfig controllerConfig; private final Map replicaInfoTable; private final Map syncStateSetInfoTable; public ReplicasInfoManager(final ControllerConfig config) { - this.enableElectUncleanMaster = config.isEnableElectUncleanMaster(); + this.controllerConfig = config; this.replicaInfoTable = new HashMap<>(); this.syncStateSetInfoTable = new HashMap<>(); } @@ -176,7 +176,7 @@ public class ReplicasInfoManager { } // Try elect a master in lagging replicas if enableElectUncleanMaster = true - if (enableElectUncleanMaster) { + if (controllerConfig.isEnableElectUncleanMaster()) { boolean electSuccess = tryElectMaster(result, brokerName, brokerInfo.getAllBroker(), (candidate) -> !candidate.equals(syncStateInfo.getMasterAddress()) && brokerAlivePredicate.test(brokerInfo.getClusterName(), candidate)); if (electSuccess) { @@ -267,7 +267,7 @@ public class ReplicasInfoManager { // If the master is not alive, we should elect a new master: // Case1: This replicas was in sync state set list // Case2: The option {EnableElectUncleanMaster} is true - canBeElectedAsMaster = syncStateInfo.getSyncStateSet().contains(brokerAddress) || this.enableElectUncleanMaster; + canBeElectedAsMaster = syncStateInfo.getSyncStateSet().contains(brokerAddress) || this.controllerConfig.isEnableElectUncleanMaster(); } } else { // If the broker's metadata does not exist in the state machine, the replicas can be elected as master directly. diff --git a/controller/src/main/java/org/apache/rocketmq/controller/impl/manager/SyncStateInfo.java b/controller/src/main/java/org/apache/rocketmq/controller/impl/manager/SyncStateInfo.java index c352e9faa2..346d4ccddc 100644 --- a/controller/src/main/java/org/apache/rocketmq/controller/impl/manager/SyncStateInfo.java +++ b/controller/src/main/java/org/apache/rocketmq/controller/impl/manager/SyncStateInfo.java @@ -20,7 +20,7 @@ import java.util.HashSet; import java.util.Set; /** - * In sync replicas info, manages the master and syncStateSet of a broker. + * Manages the syncStateSet of broker replicas. */ public class SyncStateInfo { private final String clusterName;