/** Drop data for unknown initiators. This is the only valid add interface. */
  @Override
  public boolean offer(AbstractTransaction ts) {
    assert (ts != null);

    // Check whether this new txn is less than the current this.nextTxn
    // If it is and there is still time remaining before it is released,
    // then we'll switch and become the new next this.nextTxn
    if (this.nextTxn != null && ts.compareTo(this.nextTxn) < 0) {
      this.checkQueueState();
      if (this.state != QueueState.UNBLOCKED) {
        if (d)
          LOG.debug(
              String.format(
                  "Partition %d :: Switching %s as new next txn [old=%s]",
                  this.partitionId, ts, this.nextTxn));
        this.nextTxn = ts;
      } else {
        if (d)
          LOG.warn(
              String.format(
                  "Partition %d :: offer(%s) -> %s [next=%s]",
                  this.partitionId, ts, "REJECTED", this.nextTxn));
        return (false);
      }
    }

    boolean retval = super.offer(ts);
    if (d)
      LOG.debug(String.format("Partition %d :: offer(%s) -> %s", this.partitionId, ts, retval));
    if (retval) this.checkQueueState();
    return retval;
  }