コード例 #1
0
  private void handleAspInactive(AspImpl aspImpl, ASPInactive aspInactive) {
    AsImpl appServer = (AsImpl) aspImpl.getAs();

    FSM aspPeerFSM = aspImpl.getPeerFSM();
    if (aspPeerFSM == null) {
      logger.error(
          String.format(
              "Received ASPINACTIVE=%s for ASP=%s. But peer FSM for ASP is null.",
              aspInactive, this.aspFactoryImpl.getName()));
      return;
    }

    FSM asLocalFSM = appServer.getLocalFSM();
    if (asLocalFSM == null) {
      logger.error(
          String.format(
              "Received ASPINACTIVE=%s for ASP=%s. But local FSM for AS is null.",
              aspInactive, this.aspFactoryImpl.getName()));
      return;
    }

    ASPInactiveAck aspInactAck =
        (ASPInactiveAck)
            this.aspFactoryImpl.messageFactory.createMessage(
                MessageClass.ASP_TRAFFIC_MAINTENANCE, MessageType.ASP_INACTIVE_ACK);
    aspInactAck.setRoutingContext(appServer.getRoutingContext());

    this.aspFactoryImpl.write(aspInactAck);

    try {
      aspPeerFSM.setAttribute(FSM.ATTRIBUTE_MESSAGE, aspInactive);
      aspPeerFSM.signal(TransitionState.ASP_INACTIVE);

      // Signal AS to transition
      asLocalFSM.setAttribute(AsImpl.ATTRIBUTE_ASP, aspImpl);
      asLocalFSM.signal(TransitionState.ASP_INACTIVE);

    } catch (UnknownTransitionException e) {
      logger.error(e.getMessage(), e);
    }
  }
コード例 #2
0
  private void handleAspActive(AspImpl aspImpl, ASPActive aspActive) {
    AsImpl appServer = (AsImpl) aspImpl.getAs();

    TrafficModeType trfModType = aspActive.getTrafficModeType();

    if (appServer.getTrafficModeType() != null) {
      // AppServer has Traffic Mode Type defined check if it
      // matches with sent ASP ACTIVE Message
      if (trfModType != null && appServer.getTrafficModeType().getMode() != trfModType.getMode()) {

        // Traffic Mode Type mismatch. Send Error.
        // TODO should send error or drop message?
        ErrorCode errorCodeObj =
            this.aspFactoryImpl.parameterFactory.createErrorCode(
                ErrorCode.Unsupported_Traffic_Mode_Type);
        this.sendError(appServer.getRoutingContext(), errorCodeObj);
        return;
      }

      // message doesn't have Traffic Mode Type
    } else {

      // AppServer Traffic Mode Type is optionally configured via
      // management config. If not select the first available in
      // AspUp message

      if (trfModType == null) {
        // Asp UP didn't specify the Traffic Mode either. use
        // default which is loadshare
        appServer.setDefaultTrafficModeType();
      } else {
        // Set the Traffic Mode Type passed in ASP ACTIVE
        appServer.setTrafficModeType(trfModType);
      }
    }

    FSM aspPeerFSM = aspImpl.getPeerFSM();
    if (aspPeerFSM == null) {
      logger.error(
          String.format(
              "Received ASPACTIVE=%s for ASP=%s. But peer FSM for ASP is null.",
              aspActive, this.aspFactoryImpl.getName()));
      return;
    }

    FSM asLocalFSM = appServer.getLocalFSM();
    if (asLocalFSM == null) {
      logger.error(
          String.format(
              "Received ASPACTIVE=%s for ASP=%s. But local FSM for AS is null.",
              aspActive, this.aspFactoryImpl.getName()));
      return;
    }

    ASPActiveAck aspActAck =
        (ASPActiveAck)
            this.aspFactoryImpl.messageFactory.createMessage(
                MessageClass.ASP_TRAFFIC_MAINTENANCE, MessageType.ASP_ACTIVE_ACK);
    aspActAck.setTrafficModeType(appServer.getTrafficModeType());
    aspActAck.setRoutingContext(appServer.getRoutingContext());

    this.aspFactoryImpl.write(aspActAck);

    try {
      aspPeerFSM.setAttribute(FSM.ATTRIBUTE_MESSAGE, aspActive);
      aspPeerFSM.signal(TransitionState.ASP_ACTIVE);

      // Signal AS to transition
      asLocalFSM.setAttribute(AsImpl.ATTRIBUTE_ASP, aspImpl);
      asLocalFSM.signal(TransitionState.ASP_ACTIVE);

    } catch (UnknownTransitionException e) {
      logger.error(e.getMessage(), e);
    }
  }