private void handleThrottlingEnabledMessage(ThrottlingEnabledFeedMessage throttlingMessage) {
   FeedConnectionId connectionId = throttlingMessage.getConnectionId();
   FeedRuntimeManager runtimeManager =
       feedManager.getFeedConnectionManager().getFeedRuntimeManager(connectionId);
   Set<FeedRuntimeId> runtimes = runtimeManager.getFeedRuntimes();
   for (FeedRuntimeId runtimeId : runtimes) {
     if (runtimeId.getFeedRuntimeType().equals(FeedRuntimeType.STORE)) {
       FeedRuntime storeRuntime = runtimeManager.getFeedRuntime(runtimeId);
       ((StorageSideMonitoredBuffer) (storeRuntime.getInputHandler().getmBuffer()))
           .setAcking(false);
       if (LOGGER.isLoggable(Level.INFO)) {
         LOGGER.info(
             "Acking Disabled in view of throttling that has been activted upfron in the pipeline "
                 + connectionId);
       }
     }
   }
 }
 private void handlePrepareStallMessage(PrepareStallMessage prepareStallMessage)
     throws HyracksDataException {
   FeedConnectionId connectionId = prepareStallMessage.getConnectionId();
   int computePartitionsRetainLimit = prepareStallMessage.getComputePartitionsRetainLimit();
   FeedRuntimeManager runtimeManager =
       feedManager.getFeedConnectionManager().getFeedRuntimeManager(connectionId);
   Set<FeedRuntimeId> feedRuntimes = runtimeManager.getFeedRuntimes();
   for (FeedRuntimeId runtimeId : feedRuntimes) {
     FeedRuntime runtime = runtimeManager.getFeedRuntime(runtimeId);
     switch (runtimeId.getFeedRuntimeType()) {
       case COMPUTE:
         Mode requiredMode =
             runtimeId.getPartition() <= computePartitionsRetainLimit ? Mode.STALL : Mode.END;
         runtime.setMode(requiredMode);
         break;
       default:
         runtime.setMode(Mode.STALL);
         break;
     }
   }
 }
  private void handleTerminateFlowMessage(FeedConnectionId connectionId)
      throws HyracksDataException {
    FeedRuntimeManager runtimeManager =
        feedManager.getFeedConnectionManager().getFeedRuntimeManager(connectionId);
    Set<FeedRuntimeId> feedRuntimes = runtimeManager.getFeedRuntimes();

    boolean found = false;
    for (FeedRuntimeId runtimeId : feedRuntimes) {
      FeedRuntime runtime = runtimeManager.getFeedRuntime(runtimeId);
      if (runtime.getRuntimeId().getRuntimeType().equals(FeedRuntimeType.COLLECT)) {
        ((CollectionRuntime) runtime).getFrameCollector().setState(State.HANDOVER);
        found = true;
        if (LOGGER.isLoggable(Level.INFO)) {
          LOGGER.info("Switched " + runtime + " to Hand Over stage");
        }
      }
    }
    if (!found) {
      throw new HyracksDataException("COLLECT Runtime  not found!");
    }
  }
  private void handleFeedTupleCommitResponseMessage(
      FeedTupleCommitResponseMessage commitResponseMessage) {
    FeedConnectionId connectionId = commitResponseMessage.getConnectionId();
    FeedRuntimeManager runtimeManager =
        feedManager.getFeedConnectionManager().getFeedRuntimeManager(connectionId);
    Set<FeedRuntimeId> runtimes = runtimeManager.getFeedRuntimes();
    for (FeedRuntimeId runtimeId : runtimes) {
      FeedRuntime runtime = runtimeManager.getFeedRuntime(runtimeId);
      switch (runtimeId.getFeedRuntimeType()) {
        case COLLECT:
          FeedCollectRuntimeInputHandler inputHandler =
              (FeedCollectRuntimeInputHandler) runtime.getInputHandler();
          int maxBasePersisted = commitResponseMessage.getMaxWindowAcked();
          inputHandler.dropTill(IntakePartitionStatistics.ACK_WINDOW_SIZE * (maxBasePersisted + 1));
          break;
        case STORE:
          MonitoredBufferStorageTimerTask sTask =
              runtime.getInputHandler().getmBuffer().getStorageTimeTrackingRateTask();
          sTask.receiveCommitAckResponse(commitResponseMessage);
          break;
      }
    }

    commitResponseMessage.getIntakePartition();
    SubscribableFeedRuntimeId sid =
        new SubscribableFeedRuntimeId(connectionId.getFeedId(), FeedRuntimeType.INTAKE, partition);
    IngestionRuntime ingestionRuntime =
        (IngestionRuntime) feedManager.getFeedSubscriptionManager().getSubscribableRuntime(sid);
    if (ingestionRuntime != null) {
      IIntakeProgressTracker tracker =
          ingestionRuntime.getAdapterRuntimeManager().getProgressTracker();
      if (tracker != null) {
        tracker.notifyIngestedTupleTimestamp(System.currentTimeMillis());
      }
    }
  }