docs: private List<Integer> admitSpoutTuple(String streamId, List<Object> tuple,
                                          Object messageId, Integer emitDirectTaskId) {
      // No need to send tuples if it is already terminated
      if (getPhysicalPlanHelper().isTerminatedComponent()) {
        return null;
      }
  
      // Start construct the data tuple
      HeronTuples.HeronDataTuple.Builder bldr = initTupleBuilder(streamId, tuple, emitDirectTaskId);
  
      if (messageId != null) {
        RootTupleInfo tupleInfo = new RootTupleInfo(streamId, messageId);
        if (ackEnabled) {
          // This message is rooted
          HeronTuples.RootId.Builder rtbldr = establishRootId(tupleInfo);
          bldr.addRoots(rtbldr);
        } else {
          immediateAcks.offer(tupleInfo);
        }
      }
  
      sendTuple(bldr, streamId, tuple);
  
      // TODO:- remove this after changing the API
      return null;
    }