code: @Override
      public void copy(String from, String to, Predicate<ByteBuffer> filter, Date since) {
          checkNotNull(from, "from");
          checkNotNull(to, "to");
  
          ScanSink sink = newCopySink(to);
  
          _delegate.scan(_channels.writeChannel(from), filter, sink, COPY_BATCH_SIZE, since);
  
          SortedQueue source = getQueueReadOnly(from, SERVICE_SLOW_WAIT_DURATION);
          Iterator<List<ByteBuffer>> it = Iterators.partition(source.scan(null, Long.MAX_VALUE), COPY_BATCH_SIZE);
          while (it.hasNext()) {
              List<ByteBuffer> events = it.next();
              sink.accept(ImmutableList.copyOf(Iterables.filter(events, filter)));  // Copy so filter is evaluated only once per record.
          }
  
          _delegate.scan(_channels.readChannel(from), filter, sink, COPY_BATCH_SIZE, since);
      }
docs: Copies events matching the specified predicate from one dedup queue to another.
  <p>
  Note: this method expects both "from" and "to" are dedup queues.  If "from" queue is not, use
  {@link #copyFromRawChannel} instead to avoid starting a DedupQueueService for "from" that will
  drain it and move its data to a sorted queue.