public List<Long> getScheduled(long start, long end, int size)
     throws InterruptedException, KeeperException {
   List<Long> result = new ArrayList<Long>(size);
   List<QueueItem> scheduled = dq.getScheduled();
   for (QueueItem i : scheduled) {
     // handle timeout:
     if (i.getTimeout() > start && i.getTimeout() < end) {
       result.add(i.getId());
       // handle max-size:
       if (size == result.size()) {
         break;
       }
     }
   }
   return result;
 }
 /**
  * Returns the next task-id when available of the task that needs to be executed, it will wait for
  * <tt>timeout</tt> milliseconds
  *
  * @param timeout milliseconds to wait.
  * @return task id or -1 if failed
  * @throws InterruptedException
  */
 public long poll(long timeout) throws InterruptedException {
   long time = System.currentTimeMillis();
   try {
     QueueItem item = dq.take(timeout);
     time = System.currentTimeMillis() - time;
     if (item != null) {
       LOG.debug("found: {} in {}ms", item.getId(), time);
       return item.getId();
     }
   } catch (KeeperException e) {
     LOG.error("failed to poll item", e);
   } catch (IOException e) {
     LOG.error("failed to poll item", e);
   }
   return -1;
 }