code: def emit(self, *args):
          
          if self.buffer is not None:
              self.buffer.extend(args)
              if self.buffer_max_size is not None:
                  flush = len(self.buffer) >= self.buffer_max_size
              else:
                  flush = yield from self.cell.coord.flush(self)
              if flush:
                  yield from self.flush()
          else:
              for t in self.dests:
                  yield from t.enqueue_task(self, *args)
docs: Send data to the next tier(s).  This call can be delayed if the
          coordinator thinks the backlog is too high for any of the emit
          destinations.  Likewise when buffering emit values prior to enqueuing
          them we ask the coordinator if we should flush the buffer each time in
          case the coordinator is managing the buffering by other metrics such
          as latency.