long started = System.currentTimeMillis();
try {
// wait for data to become available.
if (!this.done.tryAcquire(timeout, timeoutUnit)) {
throw new TimeoutException(System.currentTimeMillis() - started);
}
} catch (InterruptedException e) {
log.error("Exception while waiting for data", e);
}
// this.done.acquireUninterruptibly();