Skip to content

Commit 7266e3f

Browse files
[Fix-17232][master] handle the problem that master nodes gains the same slot id (#17233)
1 parent fad9d7d commit 7266e3f

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/cluster/MasterSlotManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
2121

2222
import java.util.List;
23+
import java.util.stream.Collectors;
2324

2425
import lombok.extern.slf4j.Slf4j;
2526

@@ -60,6 +61,9 @@ public boolean checkSlotValid() {
6061
@Override
6162
public void doReBalance(List<MasterServerMetadata> normalMasterServers) {
6263

64+
normalMasterServers =
65+
normalMasterServers.stream().sorted(MasterServerMetadata::compareTo).collect(Collectors.toList());
66+
6367
int tmpCurrentSlot = -1;
6468
for (int i = 0; i < normalMasterServers.size(); i++) {
6569
if (normalMasterServers.get(i).getAddress().equals(masterConfig.getMasterAddress())) {

dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/cluster/MasterSlotManagerTest.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
import org.apache.dolphinscheduler.common.enums.ServerStatus;
2323
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
2424

25+
import java.util.ArrayList;
26+
import java.util.List;
27+
2528
import org.junit.jupiter.api.BeforeEach;
2629
import org.junit.jupiter.api.Test;
2730

@@ -104,4 +107,62 @@ void doReBalance() {
104107
// After doReBalance, the total master slots should be 2
105108
assertThat(masterSlotManager.getTotalMasterSlots()).isEqualTo(2);
106109
}
110+
111+
@Test
112+
void doReBalanceWithAscendingOrderAddress() {
113+
final String IP_ORDER_1 = "127.0.0.1:8001";
114+
final String IP_ORDER_2 = "127.0.0.1:8002";
115+
116+
masterConfig = new MasterConfig();
117+
masterConfig.setMasterAddress(IP_ORDER_1);
118+
MasterSlotManager tMasterSlotManager = new MasterSlotManager(masterConfig);
119+
MasterServerMetadata normalMasterServerMetadata01 = MasterServerMetadata.builder()
120+
.address(IP_ORDER_1)
121+
.serverStatus(ServerStatus.NORMAL)
122+
.build();
123+
124+
MasterServerMetadata normalMasterServerMetadata02 = MasterServerMetadata.builder()
125+
.address(IP_ORDER_2)
126+
.serverStatus(ServerStatus.NORMAL)
127+
.build();
128+
129+
List<MasterServerMetadata> normalMasterServers = new ArrayList<>();
130+
// asc
131+
normalMasterServers.add(normalMasterServerMetadata01);
132+
normalMasterServers.add(normalMasterServerMetadata02);
133+
134+
tMasterSlotManager.doReBalance(normalMasterServers);
135+
136+
assertThat(tMasterSlotManager.getCurrentMasterSlot()).isEqualTo(0);
137+
assertThat(tMasterSlotManager.getTotalMasterSlots()).isEqualTo(2);
138+
}
139+
140+
@Test
141+
void getNormalServersInAscendingOrder() {
142+
final String IP_ORDER_1 = "127.0.0.1:8001";
143+
final String IP_ORDER_2 = "127.0.0.1:8002";
144+
145+
masterConfig = new MasterConfig();
146+
masterConfig.setMasterAddress(IP_ORDER_1);
147+
MasterSlotManager tMasterSlotManager = new MasterSlotManager(masterConfig);
148+
MasterServerMetadata normalMasterServerMetadata01 = MasterServerMetadata.builder()
149+
.address(IP_ORDER_1)
150+
.serverStatus(ServerStatus.NORMAL)
151+
.build();
152+
153+
MasterServerMetadata normalMasterServerMetadata02 = MasterServerMetadata.builder()
154+
.address(IP_ORDER_2)
155+
.serverStatus(ServerStatus.NORMAL)
156+
.build();
157+
158+
List<MasterServerMetadata> normalMasterServers = new ArrayList<>();
159+
// desc
160+
normalMasterServers.add(normalMasterServerMetadata02);
161+
normalMasterServers.add(normalMasterServerMetadata01);
162+
163+
tMasterSlotManager.doReBalance(normalMasterServers);
164+
165+
assertThat(tMasterSlotManager.getCurrentMasterSlot()).isEqualTo(0);
166+
assertThat(tMasterSlotManager.getTotalMasterSlots()).isEqualTo(2);
167+
}
107168
}

0 commit comments

Comments
 (0)