package org.rhq.server.metrics; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.ResultSetFuture; import com.datastax.driver.core.exceptions.NoHostAvailableException; import com.datastax.driver.core.exceptions.QueryTimeoutException; import com.google.common.util.concurrent.ListenableFuture; /** * @author John Sanda */ public class StorageResultSetFuture implements ListenableFuture<ResultSet> { private ResultSetFuture wrapperFuture; private StorageSession session; public StorageResultSetFuture(ResultSetFuture resultSetFuture, StorageSession session) { wrapperFuture = resultSetFuture; this.session = session; } @Override public void addListener(Runnable listener, Executor executor) { wrapperFuture.addListener(listener, executor); } @Override public boolean cancel(boolean mayInterruptIfRunning) { return wrapperFuture.cancel(mayInterruptIfRunning); } @Override public boolean isCancelled() { return wrapperFuture.isCancelled(); } @Override public boolean isDone() { return wrapperFuture.isDone(); } /** * Delegates to {@link com.datastax.driver.core.ResultSetFuture#getUninterruptibly()} */ @Override public ResultSet get() { try { return wrapperFuture.getUninterruptibly(); } catch (QueryTimeoutException e) { session.handleTimeout(); throw e; } catch (NoHostAvailableException e) { session.handleNoHostAvailable(e); throw e; } } /** * Delegates to {@link ResultSetFuture#getUninterruptibly(long, java.util.concurrent.TimeUnit)} */ @Override public ResultSet get(long timeout, TimeUnit unit) throws TimeoutException { try { return wrapperFuture.getUninterruptibly(timeout, unit); } catch (QueryTimeoutException e) { session.handleTimeout(); throw e; } catch (NoHostAvailableException e) { session.handleNoHostAvailable(e); throw e; } } }