This is an automated email from the ASF dual-hosted git repository.
wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git
The following commit(s) were added to refs/heads/main by this push:
new a97a4da5 BIGTOP-4317: Support host start/stop/restart commands (#139)
a97a4da5 is described below
commit a97a4da5892e31b06d9970ac76ff2de8c49bceb7
Author: Zhiguo Wu <[email protected]>
AuthorDate: Sat Jan 4 10:58:15 2025 +0800
BIGTOP-4317: Support host start/stop/restart commands (#139)
---
.../bigtop/manager/dao/query/ComponentQuery.java | 2 +
.../resources/mapper/mysql/ComponentMapper.xml | 6 +
.../mapper/postgresql/ComponentMapper.xml | 6 +
.../command/factory/host/HostAddJobFactory.java | 3 +-
...dJobFactory.java => HostRestartJobFactory.java} | 9 +-
...AddJobFactory.java => HostStartJobFactory.java} | 9 +-
...tAddJobFactory.java => HostStopJobFactory.java} | 9 +-
.../server/command/job/AbstractHostJob.java | 137 +++++++++++++++++++++
.../manager/server/command/job/HostRestartJob.java | 35 +++---
.../manager/server/command/job/HostStartJob.java | 35 ++----
.../manager/server/command/job/HostStopJob.java | 35 ++----
11 files changed, 204 insertions(+), 82 deletions(-)
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
index 5fda2fba..6fc5c529 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
@@ -39,6 +39,8 @@ public class ComponentQuery {
private String hostname;
+ private List<String> hostnames;
+
private Long serviceId;
private List<String> serviceNames;
diff --git
a/bigtop-manager-dao/src/main/resources/mapper/mysql/ComponentMapper.xml
b/bigtop-manager-dao/src/main/resources/mapper/mysql/ComponentMapper.xml
index 964295af..8a7f1fa0 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/mysql/ComponentMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/mysql/ComponentMapper.xml
@@ -59,6 +59,12 @@
<if test="query.hostname != null and query.hostname != ''">
and h.hostname = #{query.hostname}
</if>
+ <if test="query.hostnames != null and query.hostnames.size() > 0">
+ and h.hostname in
+ <foreach collection="query.hostnames" item="hostname"
index="index" open="(" close=")" separator=",">
+ #{hostname}
+ </foreach>
+ </if>
<if test="query.serviceId != null">
and comp.service_id = #{query.serviceId}
</if>
diff --git
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ComponentMapper.xml
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ComponentMapper.xml
index 964295af..8a7f1fa0 100644
---
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ComponentMapper.xml
+++
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ComponentMapper.xml
@@ -59,6 +59,12 @@
<if test="query.hostname != null and query.hostname != ''">
and h.hostname = #{query.hostname}
</if>
+ <if test="query.hostnames != null and query.hostnames.size() > 0">
+ and h.hostname in
+ <foreach collection="query.hostnames" item="hostname"
index="index" open="(" close=")" separator=",">
+ #{hostname}
+ </foreach>
+ </if>
<if test="query.serviceId != null">
and comp.service_id = #{query.serviceId}
</if>
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
index ecf9b911..98474d8d 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
@@ -20,7 +20,6 @@ package org.apache.bigtop.manager.server.command.factory.host;
import org.apache.bigtop.manager.common.enums.Command;
import org.apache.bigtop.manager.server.command.CommandIdentifier;
-import
org.apache.bigtop.manager.server.command.factory.cluster.AbstractClusterJobFactory;
import org.apache.bigtop.manager.server.command.job.HostAddJob;
import org.apache.bigtop.manager.server.command.job.Job;
import org.apache.bigtop.manager.server.command.job.JobContext;
@@ -35,7 +34,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class HostAddJobFactory extends AbstractClusterJobFactory {
+public class HostAddJobFactory extends AbstractHostJobFactory {
@Override
public CommandIdentifier getCommandIdentifier() {
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostRestartJobFactory.java
similarity index 86%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostRestartJobFactory.java
index ecf9b911..c0e25341 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostRestartJobFactory.java
@@ -20,8 +20,7 @@ package org.apache.bigtop.manager.server.command.factory.host;
import org.apache.bigtop.manager.common.enums.Command;
import org.apache.bigtop.manager.server.command.CommandIdentifier;
-import
org.apache.bigtop.manager.server.command.factory.cluster.AbstractClusterJobFactory;
-import org.apache.bigtop.manager.server.command.job.HostAddJob;
+import org.apache.bigtop.manager.server.command.job.HostRestartJob;
import org.apache.bigtop.manager.server.command.job.Job;
import org.apache.bigtop.manager.server.command.job.JobContext;
import org.apache.bigtop.manager.server.enums.CommandLevel;
@@ -35,15 +34,15 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class HostAddJobFactory extends AbstractClusterJobFactory {
+public class HostRestartJobFactory extends AbstractHostJobFactory {
@Override
public CommandIdentifier getCommandIdentifier() {
- return new CommandIdentifier(CommandLevel.HOST, Command.ADD);
+ return new CommandIdentifier(CommandLevel.HOST, Command.RESTART);
}
@Override
public Job createJob(JobContext jobContext) {
- return new HostAddJob(jobContext);
+ return new HostRestartJob(jobContext);
}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostStartJobFactory.java
similarity index 86%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostStartJobFactory.java
index ecf9b911..844f6518 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostStartJobFactory.java
@@ -20,8 +20,7 @@ package org.apache.bigtop.manager.server.command.factory.host;
import org.apache.bigtop.manager.common.enums.Command;
import org.apache.bigtop.manager.server.command.CommandIdentifier;
-import
org.apache.bigtop.manager.server.command.factory.cluster.AbstractClusterJobFactory;
-import org.apache.bigtop.manager.server.command.job.HostAddJob;
+import org.apache.bigtop.manager.server.command.job.HostStartJob;
import org.apache.bigtop.manager.server.command.job.Job;
import org.apache.bigtop.manager.server.command.job.JobContext;
import org.apache.bigtop.manager.server.enums.CommandLevel;
@@ -35,15 +34,15 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class HostAddJobFactory extends AbstractClusterJobFactory {
+public class HostStartJobFactory extends AbstractHostJobFactory {
@Override
public CommandIdentifier getCommandIdentifier() {
- return new CommandIdentifier(CommandLevel.HOST, Command.ADD);
+ return new CommandIdentifier(CommandLevel.HOST, Command.START);
}
@Override
public Job createJob(JobContext jobContext) {
- return new HostAddJob(jobContext);
+ return new HostStartJob(jobContext);
}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostStopJobFactory.java
similarity index 86%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostStopJobFactory.java
index ecf9b911..efa6e81f 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostAddJobFactory.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/factory/host/HostStopJobFactory.java
@@ -20,8 +20,7 @@ package org.apache.bigtop.manager.server.command.factory.host;
import org.apache.bigtop.manager.common.enums.Command;
import org.apache.bigtop.manager.server.command.CommandIdentifier;
-import
org.apache.bigtop.manager.server.command.factory.cluster.AbstractClusterJobFactory;
-import org.apache.bigtop.manager.server.command.job.HostAddJob;
+import org.apache.bigtop.manager.server.command.job.HostStopJob;
import org.apache.bigtop.manager.server.command.job.Job;
import org.apache.bigtop.manager.server.command.job.JobContext;
import org.apache.bigtop.manager.server.enums.CommandLevel;
@@ -35,15 +34,15 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
-public class HostAddJobFactory extends AbstractClusterJobFactory {
+public class HostStopJobFactory extends AbstractHostJobFactory {
@Override
public CommandIdentifier getCommandIdentifier() {
- return new CommandIdentifier(CommandLevel.HOST, Command.ADD);
+ return new CommandIdentifier(CommandLevel.HOST, Command.STOP);
}
@Override
public Job createJob(JobContext jobContext) {
- return new HostAddJob(jobContext);
+ return new HostStopJob(jobContext);
}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/AbstractHostJob.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/AbstractHostJob.java
new file mode 100644
index 00000000..952f6daa
--- /dev/null
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/AbstractHostJob.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.server.command.job;
+
+import org.apache.bigtop.manager.common.enums.Command;
+import org.apache.bigtop.manager.dao.po.ComponentPO;
+import org.apache.bigtop.manager.dao.query.ComponentQuery;
+import org.apache.bigtop.manager.dao.repository.ComponentDao;
+import org.apache.bigtop.manager.server.command.stage.ComponentStartStage;
+import org.apache.bigtop.manager.server.command.stage.ComponentStopStage;
+import org.apache.bigtop.manager.server.command.stage.StageContext;
+import org.apache.bigtop.manager.server.holder.SpringContextHolder;
+import org.apache.bigtop.manager.server.model.dto.ComponentDTO;
+import org.apache.bigtop.manager.server.model.dto.ServiceDTO;
+import org.apache.bigtop.manager.server.utils.StackDAGUtils;
+import org.apache.bigtop.manager.server.utils.StackUtils;
+
+import org.apache.commons.collections4.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class AbstractHostJob extends AbstractJob {
+
+ protected ComponentDao componentDao;
+
+ public AbstractHostJob(JobContext jobContext) {
+ super(jobContext);
+ }
+
+ @Override
+ protected void injectBeans() {
+ super.injectBeans();
+
+ this.componentDao = SpringContextHolder.getBean(ComponentDao.class);
+ }
+
+ @Override
+ protected void beforeCreateStages() {
+ super.beforeCreateStages();
+ }
+
+ protected StageContext createStageContext(String componentName,
List<String> hostnames) {
+ StageContext stageContext =
StageContext.fromCommandDTO(jobContext.getCommandDTO());
+
+ ServiceDTO serviceDTO =
StackUtils.getServiceDTOByComponentName(componentName);
+ ComponentDTO componentDTO = StackUtils.getComponentDTO(componentName);
+
+ stageContext.setHostnames(hostnames);
+ stageContext.setServiceDTO(serviceDTO);
+ stageContext.setComponentDTO(componentDTO);
+
+ return stageContext;
+ }
+
+ protected void createStartStages() {
+ List<ComponentPO> componentPOList = getComponentPOList();
+ List<String> todoList =
StackDAGUtils.getTodoList(getComponentNames(componentPOList), Command.START);
+
+ for (String componentCommand : todoList) {
+ String[] split = componentCommand.split("-");
+ String componentName = split[0];
+
+ if (StackUtils.isClientComponent(componentName)) {
+ continue;
+ }
+
+ List<String> hostnames = getHostnames();
+ if (CollectionUtils.isEmpty(hostnames)) {
+ continue;
+ }
+
+ StageContext stageContext = createStageContext(componentName,
hostnames);
+ stages.add(new ComponentStartStage(stageContext));
+ }
+ }
+
+ protected void createStopStages() {
+ List<ComponentPO> componentPOList = getComponentPOList();
+ List<String> todoList =
StackDAGUtils.getTodoList(getComponentNames(componentPOList), Command.STOP);
+
+ for (String componentCommand : todoList) {
+ String[] split = componentCommand.split("-");
+ String componentName = split[0];
+
+ if (StackUtils.isClientComponent(componentName)) {
+ continue;
+ }
+
+ List<String> hostnames = getHostnames();
+ if (CollectionUtils.isEmpty(hostnames)) {
+ continue;
+ }
+
+ StageContext stageContext = createStageContext(componentName,
hostnames);
+ stages.add(new ComponentStopStage(stageContext));
+ }
+ }
+
+ private List<ComponentPO> getComponentPOList() {
+ ComponentQuery query = ComponentQuery.builder()
+ .clusterId(clusterPO.getId())
+ .hostnames(getHostnames())
+ .build();
+ return componentDao.findByQuery(query);
+ }
+
+ private List<String> getComponentNames(List<ComponentPO> componentPOList) {
+ if (componentPOList == null) {
+ return new ArrayList<>();
+ } else {
+ return
componentPOList.stream().map(ComponentPO::getName).distinct().toList();
+ }
+ }
+
+ private List<String> getHostnames() {
+ return jobContext.getCommandDTO().getHostCommands().stream()
+ .flatMap(hostCommandDTO ->
hostCommandDTO.getHostnames().stream())
+ .toList();
+ }
+}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/HostRestartJob.java
similarity index 64%
copy from
bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/HostRestartJob.java
index 5fda2fba..926b9d53 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/HostRestartJob.java
@@ -16,30 +16,23 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.bigtop.manager.dao.query;
+package org.apache.bigtop.manager.server.command.job;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+public class HostRestartJob extends AbstractHostJob {
-import java.util.List;
+ public HostRestartJob(JobContext jobContext) {
+ super(jobContext);
+ }
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class ComponentQuery {
+ @Override
+ protected void createStages() {
+ super.createStopStages();
- private String name;
+ super.createStartStages();
+ }
- private Long clusterId;
-
- private Long hostId;
-
- private String hostname;
-
- private Long serviceId;
-
- private List<String> serviceNames;
+ @Override
+ public String getName() {
+ return "Restart host";
+ }
}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/HostStartJob.java
similarity index 64%
copy from
bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/HostStartJob.java
index 5fda2fba..b49d4d2a 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/HostStartJob.java
@@ -16,30 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.bigtop.manager.dao.query;
+package org.apache.bigtop.manager.server.command.job;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+public class HostStartJob extends AbstractHostJob {
-import java.util.List;
+ public HostStartJob(JobContext jobContext) {
+ super(jobContext);
+ }
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class ComponentQuery {
+ @Override
+ protected void createStages() {
+ super.createStartStages();
+ }
- private String name;
-
- private Long clusterId;
-
- private Long hostId;
-
- private String hostname;
-
- private Long serviceId;
-
- private List<String> serviceNames;
+ @Override
+ public String getName() {
+ return "Start host";
+ }
}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/HostStopJob.java
similarity index 64%
copy from
bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/HostStopJob.java
index 5fda2fba..aa4d605e 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/query/ComponentQuery.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/HostStopJob.java
@@ -16,30 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.bigtop.manager.dao.query;
+package org.apache.bigtop.manager.server.command.job;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
+public class HostStopJob extends AbstractHostJob {
-import java.util.List;
+ public HostStopJob(JobContext jobContext) {
+ super(jobContext);
+ }
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class ComponentQuery {
+ @Override
+ protected void createStages() {
+ super.createStopStages();
+ }
- private String name;
-
- private Long clusterId;
-
- private Long hostId;
-
- private String hostname;
-
- private Long serviceId;
-
- private List<String> serviceNames;
+ @Override
+ public String getName() {
+ return "Stop host";
+ }
}