Exemplo n.º 1
0
  @Override
  public void nodeUP(final TopologyMember topologyMember, final boolean last) {
    if (stopping) {
      return;
    }
    final String nodeID = topologyMember.getNodeId();
    if (HornetQServerLogger.LOGGER.isDebugEnabled()) {
      String ClusterTestBase = "receiving nodeUP for nodeID=";
      HornetQServerLogger.LOGGER.debug(
          this + ClusterTestBase + nodeID + " connectionPair=" + topologyMember);
    }
    // discard notifications about ourselves unless its from our backup

    if (nodeID.equals(nodeManager.getNodeId().toString())) {
      if (HornetQServerLogger.LOGGER.isTraceEnabled()) {
        HornetQServerLogger.LOGGER.trace(
            this
                + "::informing about backup to itself, nodeUUID="
                + nodeManager.getNodeId()
                + ", connectorPair="
                + topologyMember
                + ", this = "
                + this);
      }
      return;
    }

    // if the node is more than 1 hop away, we do not create a bridge for direct cluster connection
    if (allowDirectConnectionsOnly && !allowableConnections.contains(topologyMember.getLive())) {
      return;
    }

    // FIXME required to prevent cluster connections w/o discovery group
    // and empty static connectors to create bridges... ulgy!
    if (serverLocator == null) {
      return;
    }
    /*we don't create bridges to backups*/
    if (topologyMember.getLive() == null) {
      if (isTrace) {
        HornetQServerLogger.LOGGER.trace(
            this
                + " ignoring call with nodeID="
                + nodeID
                + ", topologyMember="
                + topologyMember
                + ", last="
                + last);
      }
      return;
    }

    synchronized (recordsGuard) {
      try {
        MessageFlowRecord record = records.get(nodeID);

        if (record == null) {
          if (HornetQServerLogger.LOGGER.isDebugEnabled()) {
            HornetQServerLogger.LOGGER.debug(
                this
                    + "::Creating record for nodeID="
                    + nodeID
                    + ", topologyMember="
                    + topologyMember);
          }

          // New node - create a new flow record

          final SimpleString queueName = new SimpleString("sf." + name + "." + nodeID);

          Binding queueBinding = postOffice.getBinding(queueName);

          Queue queue;

          if (queueBinding != null) {
            queue = (Queue) queueBinding.getBindable();
          } else {
            // Add binding in storage so the queue will get reloaded on startup and we can find it -
            // it's never
            // actually routed to at that address though
            queue = server.createQueue(queueName, queueName, null, true, false);
          }

          createNewRecord(
              topologyMember.getUniqueEventID(),
              nodeID,
              topologyMember.getLive(),
              queueName,
              queue,
              true);
        } else {
          if (isTrace) {
            HornetQServerLogger.LOGGER.trace(
                this
                    + " ignored nodeUp record for "
                    + topologyMember
                    + " on nodeID="
                    + nodeID
                    + " as the record already existed");
          }
        }
      } catch (Exception e) {
        HornetQServerLogger.LOGGER.errorUpdatingTopology(e);
      }
    }
  }