public FeedRuntimeInputHandler(
     IHyracksTaskContext ctx,
     FeedConnectionId connectionId,
     FeedRuntimeId runtimeId,
     IFrameWriter coreOperator,
     FeedPolicyAccessor fpa,
     boolean bufferingEnabled,
     FrameTupleAccessor fta,
     RecordDescriptor recordDesc,
     IFeedManager feedManager,
     int nPartitions)
     throws IOException {
   this.connectionId = connectionId;
   this.runtimeId = runtimeId;
   this.coreOperator = coreOperator;
   this.bufferingEnabled = bufferingEnabled;
   this.feedPolicyAccessor = fpa;
   this.spiller = new FeedFrameSpiller(ctx, connectionId, runtimeId, fpa);
   this.discarder = new FeedFrameDiscarder(ctx, connectionId, runtimeId, fpa, this);
   this.exceptionHandler =
       new FeedExceptionHandler(ctx, fta, recordDesc, feedManager, connectionId);
   this.mode = Mode.PROCESS;
   this.lastMode = Mode.PROCESS;
   this.finished = false;
   this.fpa = fpa;
   this.feedManager = feedManager;
   this.pool =
       (DataBucketPool)
           feedManager.getFeedMemoryManager().getMemoryComponent(IFeedMemoryComponent.Type.POOL);
   this.frameCollection =
       (FrameCollection)
           feedManager
               .getFeedMemoryManager()
               .getMemoryComponent(IFeedMemoryComponent.Type.COLLECTION);
   this.frameEventCallback = new FrameEventCallback(fpa, this, coreOperator);
   this.mBuffer =
       MonitoredBuffer.getMonitoredBuffer(
           ctx,
           this,
           coreOperator,
           fta,
           recordDesc,
           feedManager.getFeedMetricCollector(),
           connectionId,
           runtimeId,
           exceptionHandler,
           frameEventCallback,
           nPartitions,
           fpa);
   this.mBuffer.start();
   this.throttlingEnabled = false;
 }