@Override
    public void processClusterEvent(ClusterEvent clusterEvent) {
      ClusterEventType clusterEventType = clusterEvent.getClusterEventType();

      if (!clusterEventType.equals(ClusterEventType.JOIN)) {
        return;
      }

      List<Address> clusterNodeAddresses = ClusterExecutorUtil.getClusterNodeAddresses();
      List<ClusterNode> clusterNodes = clusterEvent.getClusterNodes();

      if ((clusterNodeAddresses.size() - clusterNodes.size()) > 1) {
        if (_log.isDebugEnabled()) {
          _log.debug("Number of original cluster members is greater than " + "one");
        }

        return;
      }

      long[] companyIds = PortalInstances.getCompanyIds();

      for (long companyId : companyIds) {
        loadIndexes(companyId);
      }

      loadIndexes(CompanyConstants.SYSTEM);
    }
  public void processClusterEvent(ClusterEvent clusterEvent) {
    List<ClusterNode> clusterNodes = clusterEvent.getClusterNodes();

    ClusterEventType clusterEventType = clusterEvent.getClusterEventType();

    if (clusterEventType.equals(ClusterEventType.DEPART)) {
      for (ClusterNode clusterNode : clusterNodes) {
        _processDepartEvent(clusterNode);
      }
    } else if (clusterEventType.equals(ClusterEventType.JOIN)) {
      for (ClusterNode clusterNode : clusterNodes) {
        _processJoinEvent(clusterNode);
      }
    }
  }
  protected boolean memberJoined(Address joinAddress, ClusterNode clusterNode) {

    _liveInstances.put(joinAddress, clusterNode);

    Address previousAddress =
        _clusterNodeAddresses.put(clusterNode.getClusterNodeId(), joinAddress);

    if (previousAddress != null) {
      return false;
    }

    ClusterEvent clusterEvent = ClusterEvent.join(clusterNode);

    fireClusterEvent(clusterEvent);

    return true;
  }
  protected void memberRemoved(List<Address> departAddresses) {
    List<ClusterNode> departClusterNodes = new ArrayList<>();

    for (Address departAddress : departAddresses) {
      ClusterNode departClusterNode = _liveInstances.remove(departAddress);

      if (departClusterNode == null) {
        continue;
      }

      departClusterNodes.add(departClusterNode);

      _clusterNodeAddresses.remove(departClusterNode.getClusterNodeId());
    }

    if (departClusterNodes.isEmpty()) {
      return;
    }

    ClusterEvent clusterEvent = ClusterEvent.depart(departClusterNodes);

    fireClusterEvent(clusterEvent);
  }
 protected void processClusterEvent() {
   _replicasClusterListener.processClusterEvent(ClusterEvent.join());
 }