@Override
  public void execute(Tuple tuple) {
    // write the finalCount to SqlDb on each TickTuple.
    if (isTickTuple(tuple)) {
      // only emit if finalCount > 0
      if (finalCount > 0) {
        logger.info(
            "emitting final count"
                + ", finalCount: "
                + finalCount
                + ", totalCount: "
                + totalCount
                + ", tuplesToAck: "
                + tuplesToAck.size()
                + " at "
                + System.currentTimeMillis());
        if (db != null) {
          db.insertValue(System.currentTimeMillis(), finalCount);
        } else {
          if (enableAck) {
            this.collector.emit(tuplesToAck, new Values(finalCount));
          } else {
            this.collector.emit(new Values(finalCount));
          }
        }

        finalCount = 0L;
        if (enableAck) {
          for (Tuple tupleToAck : tuplesToAck) {
            collector.ack(tupleToAck);
          }
          tuplesToAck.clear();
        }
      }
    } else {
      // Merge finalCount from all PartialCountBolt tasks
      long incomingPartialCount = tuple.getLong(0);
      finalCount += incomingPartialCount;
      totalCount += incomingPartialCount;
      if (enableAck) {
        tuplesToAck.add(tuple);
      }
    }
  }