[feature](alter backends)backend modify & drop & decommission by ids (#25444)

This commit is contained in:
Guangdong Liu
2023-10-25 14:32:30 +08:00
committed by GitHub
parent 49b73483fd
commit 4f17c2a8b1
17 changed files with 269 additions and 88 deletions

View File

@ -35,7 +35,7 @@ import java.util.List;
public class DecommissionBackendTest extends TestWithFeService {
@Override
protected int backendNum() {
return 3;
return 4;
}
@Override
@ -78,18 +78,18 @@ public class DecommissionBackendTest extends TestWithFeService {
// 5. execute decommission
Backend srcBackend = null;
for (Backend backend : idToBackendRef.values()) {
if (Env.getCurrentInvertedIndex().getTabletIdsByBackendId(backend.getId()).size() > 0) {
if (!Env.getCurrentInvertedIndex().getTabletIdsByBackendId(backend.getId()).isEmpty()) {
srcBackend = backend;
break;
}
}
Assertions.assertTrue(srcBackend != null);
Assertions.assertNotNull(srcBackend);
String decommissionStmtStr = "alter system decommission backend \"127.0.0.1:" + srcBackend.getHeartbeatPort() + "\"";
AlterSystemStmt decommissionStmt = (AlterSystemStmt) parseAndAnalyzeStmt(decommissionStmtStr);
Env.getCurrentEnv().getAlterInstance().processAlterCluster(decommissionStmt);
Assertions.assertEquals(true, srcBackend.isDecommissioned());
Assertions.assertTrue(srcBackend.isDecommissioned());
long startTimestamp = System.currentTimeMillis();
while (System.currentTimeMillis() - startTimestamp < 90000
&& Env.getCurrentSystemInfo().getIdToBackend().containsKey(srcBackend.getId())) {
@ -110,6 +110,34 @@ public class DecommissionBackendTest extends TestWithFeService {
}
@Test
public void testDecommissionBackendById() throws Exception {
ImmutableMap<Long, Backend> idToBackendRef = Env.getCurrentSystemInfo().getIdToBackend();
Backend srcBackend = idToBackendRef.values().asList().get(0);
Assertions.assertNotNull(srcBackend);
// decommission backend by id
String decommissionByIdStmtStr = "alter system decommission backend \"" + srcBackend.getId() + "\"";
AlterSystemStmt decommissionByIdStmt = (AlterSystemStmt) parseAndAnalyzeStmt(decommissionByIdStmtStr);
Env.getCurrentEnv().getAlterInstance().processAlterCluster(decommissionByIdStmt);
Assertions.assertTrue(srcBackend.isDecommissioned());
long startTimestamp = System.currentTimeMillis();
while (System.currentTimeMillis() - startTimestamp < 90000
&& Env.getCurrentSystemInfo().getIdToBackend().containsKey(srcBackend.getId())) {
Thread.sleep(1000);
}
Assertions.assertEquals(backendNum() - 1, Env.getCurrentSystemInfo().getIdToBackend().size());
// add backend
String addBackendStmtStr = "alter system add backend \"127.0.0.1:" + srcBackend.getHeartbeatPort() + "\"";
AlterSystemStmt addBackendStmt = (AlterSystemStmt) parseAndAnalyzeStmt(addBackendStmtStr);
Env.getCurrentEnv().getAlterInstance().processAlterCluster(addBackendStmt);
Assertions.assertEquals(backendNum(), Env.getCurrentSystemInfo().getIdToBackend().size());
}
@Test
public void testDecommissionBackendWithDropTable() throws Exception {
// 1. create connect context
@ -132,12 +160,12 @@ public class DecommissionBackendTest extends TestWithFeService {
Backend srcBackend = null;
for (Backend backend : idToBackendRef.values()) {
if (Env.getCurrentInvertedIndex().getTabletIdsByBackendId(backend.getId()).size() > 0) {
if (!Env.getCurrentInvertedIndex().getTabletIdsByBackendId(backend.getId()).isEmpty()) {
srcBackend = backend;
break;
}
}
Assertions.assertTrue(srcBackend != null);
Assertions.assertNotNull(srcBackend);
// 5. drop table tbl1
dropTable("db2.tbl1", false);
@ -146,7 +174,7 @@ public class DecommissionBackendTest extends TestWithFeService {
String decommissionStmtStr = "alter system decommission backend \"127.0.0.1:" + srcBackend.getHeartbeatPort() + "\"";
AlterSystemStmt decommissionStmt = (AlterSystemStmt) parseAndAnalyzeStmt(decommissionStmtStr);
Env.getCurrentEnv().getAlterInstance().processAlterCluster(decommissionStmt);
Assertions.assertEquals(true, srcBackend.isDecommissioned());
Assertions.assertTrue(srcBackend.isDecommissioned());
long startTimestamp = System.currentTimeMillis();
while (System.currentTimeMillis() - startTimestamp < 90000
@ -163,7 +191,7 @@ public class DecommissionBackendTest extends TestWithFeService {
// TabletInvertedIndex still holds these tablets of srcBackend, but they are all in recycled status
List<Long> tabletList = Env.getCurrentInvertedIndex().getTabletIdsByBackendId(srcBackend.getId());
Assertions.assertTrue(tabletList.size() > 0);
Assertions.assertFalse(tabletList.isEmpty());
Assertions.assertTrue(Env.getCurrentRecycleBin().allTabletsInRecycledStatus(tabletList));
// recover tbl1, because tbl1 has more than one replica, so it still can be recovered
@ -176,4 +204,6 @@ public class DecommissionBackendTest extends TestWithFeService {
Assertions.assertEquals(backendNum(), Env.getCurrentSystemInfo().getIdToBackend().size());
}
}

View File

@ -264,6 +264,33 @@ public class SystemInfoServiceTest {
}
}
@Test
public void removeBackendTestByBackendId() throws UserException {
clearAllBackend();
AddBackendClause stmt = new AddBackendClause(Lists.newArrayList("192.168.0.1:1234"));
stmt.analyze(analyzer);
try {
Env.getCurrentSystemInfo().addBackends(stmt.getHostInfos(), true);
} catch (DdlException e) {
e.printStackTrace();
}
DropBackendClause dropStmt = new DropBackendClause(Lists.newArrayList(String.valueOf(backendId)));
dropStmt.analyze(analyzer);
try {
Env.getCurrentSystemInfo().dropBackends(dropStmt.getHostInfos());
} catch (DdlException e) {
e.printStackTrace();
Assert.fail();
}
try {
Env.getCurrentSystemInfo().dropBackends(dropStmt.getHostInfos());
} catch (DdlException e) {
Assert.assertTrue(e.getMessage().contains("does not exist"));
}
}
@Test
public void testSaveLoadBackend() throws Exception {
clearAllBackend();