Esempio n. 1
0
  public static void handleClusterInactivateEvent(
      ClusterStatusClusterInactivateEvent clusterInactivateEvent) {
    Topology topology = TopologyManager.getTopology();
    Service service = topology.getService(clusterInactivateEvent.getServiceName());
    // update the status of the cluster
    if (service == null) {
      log.warn(String.format("Service %s does not exist", clusterInactivateEvent.getServiceName()));
      return;
    }

    Cluster cluster = service.getCluster(clusterInactivateEvent.getClusterId());
    if (cluster == null) {
      log.warn(String.format("Cluster %s does not exist", clusterInactivateEvent.getClusterId()));
      return;
    }

    ClusterInstanceInactivateEvent clusterInactivatedEvent1 =
        new ClusterInstanceInactivateEvent(
            clusterInactivateEvent.getAppId(),
            clusterInactivateEvent.getServiceName(),
            clusterInactivateEvent.getClusterId(),
            clusterInactivateEvent.getInstanceId());
    try {
      TopologyManager.acquireWriteLock();
      ClusterInstance context = cluster.getInstanceContexts(clusterInactivateEvent.getInstanceId());
      if (context == null) {
        log.warn(
            "Cluster Instance Context is not found for [cluster] "
                + clusterInactivateEvent.getClusterId()
                + " [instance-id] "
                + clusterInactivateEvent.getInstanceId());
        return;
      }
      ClusterStatus status = ClusterStatus.Inactive;
      if (context.isStateTransitionValid(status)) {
        context.setStatus(status);
        log.info("Cluster Inactive adding status started for" + cluster.getClusterId());
        TopologyManager.updateTopology(topology);
        // publishing data
        TopologyEventPublisher.sendClusterInactivateEvent(clusterInactivatedEvent1);
      } else {
        log.error(
            String.format(
                "Cluster state transition is not valid: [cluster-id] %s "
                    + " [instance-id] %s [current-status] %s [status-requested] %s",
                clusterInactivateEvent.getClusterId(),
                clusterInactivateEvent.getInstanceId(),
                context.getStatus(),
                status));
        return;
      }
    } finally {
      TopologyManager.releaseWriteLock();
    }
  }