This is an automated email from the ASF dual-hosted git repository.
liuhaopeng 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 30aad35c BIGTOP-4406: Fix service/component status cannot auto sync
(#206)
30aad35c is described below
commit 30aad35c3e85adf157f9222ea40f04a845b5ba23
Author: Zhiguo Wu <[email protected]>
AuthorDate: Mon Apr 14 21:58:12 2025 +0800
BIGTOP-4406: Fix service/component status cannot auto sync (#206)
---
.../command/job/component/ComponentAddJob.java | 6 ++-
.../command/job/service/ServiceRestartJob.java | 2 +
.../command/job/service/ServiceStartJob.java | 1 +
.../server/command/job/service/ServiceStopJob.java | 1 +
.../manager/server/timer/ComponentStatusTimer.java | 62 +++++++++++++++++++---
.../bigtop/v3_3_0/solr/SolrInstanceScript.java | 8 ++-
6 files changed, 70 insertions(+), 10 deletions(-)
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/component/ComponentAddJob.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/component/ComponentAddJob.java
index 9bca282f..589ac326 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/component/ComponentAddJob.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/component/ComponentAddJob.java
@@ -18,6 +18,7 @@
*/
package org.apache.bigtop.manager.server.command.job.component;
+import org.apache.bigtop.manager.common.constants.ComponentCategories;
import org.apache.bigtop.manager.common.enums.Command;
import org.apache.bigtop.manager.dao.po.ComponentPO;
import org.apache.bigtop.manager.dao.po.HostPO;
@@ -107,7 +108,10 @@ public class ComponentAddJob extends AbstractComponentJob {
componentPO.setClusterId(clusterId);
componentPO.setHostId(hostPO.getId());
componentPO.setServiceId(servicePO.getId());
- componentPO.setStatus(HealthyStatusEnum.UNKNOWN.getCode());
+ HealthyStatusEnum status =
ComponentCategories.CLIENT.equals(componentDTO.getCategory())
+ ? HealthyStatusEnum.HEALTHY
+ : HealthyStatusEnum.UNKNOWN;
+ componentPO.setStatus(status.getCode());
componentPOList.add(componentPO);
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceRestartJob.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceRestartJob.java
index e32e36d8..76209579 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceRestartJob.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceRestartJob.java
@@ -55,6 +55,7 @@ public class ServiceRestartJob extends AbstractServiceJob {
Long clusterId = commandDTO.getClusterId();
String serviceName = serviceCommand.getServiceName();
ServicePO servicePO = serviceDao.findByClusterIdAndName(clusterId,
serviceName);
+ servicePO.setRestartFlag(false);
servicePO.setStatus(HealthyStatusEnum.HEALTHY.getCode());
serviceDao.partialUpdateById(servicePO);
}
@@ -70,6 +71,7 @@ public class ServiceRestartJob extends AbstractServiceJob {
Long clusterId = commandDTO.getClusterId();
String serviceName = serviceCommand.getServiceName();
ServicePO servicePO = serviceDao.findByClusterIdAndName(clusterId,
serviceName);
+ servicePO.setRestartFlag(true);
servicePO.setStatus(HealthyStatusEnum.UNHEALTHY.getCode());
serviceDao.partialUpdateById(servicePO);
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceStartJob.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceStartJob.java
index b4bb236a..d53e2b68 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceStartJob.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceStartJob.java
@@ -52,6 +52,7 @@ public class ServiceStartJob extends AbstractServiceJob {
Long clusterId = commandDTO.getClusterId();
String serviceName = serviceCommand.getServiceName();
ServicePO servicePO = serviceDao.findByClusterIdAndName(clusterId,
serviceName);
+ servicePO.setRestartFlag(false);
servicePO.setStatus(HealthyStatusEnum.HEALTHY.getCode());
serviceDao.partialUpdateById(servicePO);
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceStopJob.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceStopJob.java
index ff45c5d3..d585ba4a 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceStopJob.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/service/ServiceStopJob.java
@@ -52,6 +52,7 @@ public class ServiceStopJob extends AbstractServiceJob {
Long clusterId = commandDTO.getClusterId();
String serviceName = serviceCommand.getServiceName();
ServicePO servicePO = serviceDao.findByClusterIdAndName(clusterId,
serviceName);
+ servicePO.setRestartFlag(true);
servicePO.setStatus(HealthyStatusEnum.UNHEALTHY.getCode());
serviceDao.partialUpdateById(servicePO);
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/timer/ComponentStatusTimer.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/timer/ComponentStatusTimer.java
index 06bee6b3..1d654deb 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/timer/ComponentStatusTimer.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/timer/ComponentStatusTimer.java
@@ -18,30 +18,42 @@
*/
package org.apache.bigtop.manager.server.timer;
+import org.apache.bigtop.manager.common.constants.ComponentCategories;
import org.apache.bigtop.manager.common.utils.CaseUtils;
import org.apache.bigtop.manager.dao.po.ComponentPO;
import org.apache.bigtop.manager.dao.po.HostPO;
+import org.apache.bigtop.manager.dao.po.ServicePO;
import org.apache.bigtop.manager.dao.repository.ComponentDao;
import org.apache.bigtop.manager.dao.repository.HostDao;
+import org.apache.bigtop.manager.dao.repository.ServiceDao;
import org.apache.bigtop.manager.grpc.generated.ComponentStatusReply;
import org.apache.bigtop.manager.grpc.generated.ComponentStatusRequest;
import org.apache.bigtop.manager.grpc.generated.ComponentStatusServiceGrpc;
import org.apache.bigtop.manager.server.enums.HealthyStatusEnum;
import org.apache.bigtop.manager.server.grpc.GrpcClient;
+import org.apache.bigtop.manager.server.model.dto.ComponentDTO;
+import org.apache.bigtop.manager.server.utils.StackUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
import jakarta.annotation.Resource;
import java.util.List;
+import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
@Slf4j
-// @Component
+@Component
public class ComponentStatusTimer {
+ @Resource
+ private ServiceDao serviceDao;
+
@Resource
private ComponentDao componentDao;
@@ -53,18 +65,22 @@ public class ComponentStatusTimer {
public void execute() {
List<ComponentPO> componentPOList = componentDao.findAll();
for (ComponentPO componentPO : componentPOList) {
- if (HealthyStatusEnum.fromCode(componentPO.getStatus()) ==
HealthyStatusEnum.UNKNOWN) {
+ ComponentDTO componentDTO =
StackUtils.getComponentDTO(componentPO.getName());
+ String category = componentDTO.getCategory();
+ if (HealthyStatusEnum.fromCode(componentPO.getStatus()) ==
HealthyStatusEnum.UNKNOWN
+ || category.equals(ComponentCategories.CLIENT)) {
continue;
}
- componentPO = componentDao.findDetailsById(componentPO.getId());
+ ComponentPO componentDetailsPO =
componentDao.findDetailsById(componentPO.getId());
HostPO hostPO = hostDao.findById(componentPO.getHostId());
ComponentStatusRequest request =
ComponentStatusRequest.newBuilder()
-
.setStackName(CaseUtils.toLowerCase(componentPO.getStack().split("-")[0]))
- .setStackVersion(componentPO.getStack().split("-")[1])
- .setServiceName(componentPO.getServiceName())
- .setServiceUser(componentPO.getServiceUser())
- .setComponentName(componentPO.getName())
+ .setStackName(
+
CaseUtils.toLowerCase(componentDetailsPO.getStack().split("-")[0]))
+
.setStackVersion(componentDetailsPO.getStack().split("-")[1])
+ .setServiceName(componentDetailsPO.getServiceName())
+ .setServiceUser(componentDetailsPO.getServiceUser())
+ .setComponentName(componentDetailsPO.getName())
.build();
ComponentStatusServiceGrpc.ComponentStatusServiceBlockingStub
blockingStub = GrpcClient.getBlockingStub(
hostPO.getHostname(),
@@ -79,5 +95,35 @@ public class ComponentStatusTimer {
componentPO.setStatus(HealthyStatusEnum.UNHEALTHY.getCode());
}
}
+
+ componentDao.partialUpdateByIds(componentPOList);
+
+ // Update services
+ Map<Long, List<ComponentPO>> componentPOMap =
+
componentPOList.stream().collect(Collectors.groupingBy(ComponentPO::getServiceId));
+ for (Map.Entry<Long, List<ComponentPO>> entry :
componentPOMap.entrySet()) {
+ Long serviceId = entry.getKey();
+ List<ComponentPO> components = entry.getValue();
+ ServicePO servicePO = serviceDao.findById(serviceId);
+ boolean hasUnknownComponent = components.stream()
+ .anyMatch(component ->
Objects.equals(component.getStatus(), HealthyStatusEnum.UNKNOWN.getCode()));
+ if (hasUnknownComponent) {
+ continue;
+ }
+
+ List<ComponentPO> healthyComponents = components.stream()
+ .filter(component -> Objects.equals(component.getStatus(),
HealthyStatusEnum.HEALTHY.getCode()))
+ .toList();
+
+ if (healthyComponents.size() == components.size()) {
+ servicePO.setStatus(HealthyStatusEnum.HEALTHY.getCode());
+ servicePO.setRestartFlag(false);
+ } else {
+ servicePO.setStatus(HealthyStatusEnum.UNHEALTHY.getCode());
+ servicePO.setRestartFlag(true);
+ }
+
+ serviceDao.partialUpdateById(servicePO);
+ }
}
}
diff --git
a/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/solr/SolrInstanceScript.java
b/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/solr/SolrInstanceScript.java
index 420451df..c8af3430 100644
---
a/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/solr/SolrInstanceScript.java
+++
b/bigtop-manager-stack/bigtop-manager-stack-bigtop/src/main/java/org/apache/bigtop/manager/stack/bigtop/v3_3_0/solr/SolrInstanceScript.java
@@ -52,10 +52,16 @@ public class SolrInstanceScript extends
AbstractServerScript {
return SolrSetup.configure(params);
}
+ @Override
+ public ShellResult init(Params params) {
+ createZNode(params);
+
+ return super.init(params);
+ }
+
@Override
public ShellResult start(Params params) {
configure(params);
- createZNode(params);
SolrParams solrParams = (SolrParams) params;
String cmd = MessageFormat.format(
"{0}/bin/solr start -cloud -noprompt -s {0}/server/solr -z
{1}",