private synchronized void schedule(Duration timeout, Runnable task) { try { ListenableFuture<?> delay = invoker.delay(timeout); currentTask = delay; Futures.addCallback(delay, new FutureCallback<Object>() { @Override public void onSuccess(Object result) { task.run(); } @Override public void onFailure(Throwable t) { // this should never happen in a delay future unexpectedError(t); } }, directExecutor()); } catch (Throwable t) { // this should never happen, but ensure that invocation always finishes unexpectedError(t); } }
private synchronized void schedule(Duration timeout, Runnable task) { try { ListenableFuture<?> delay = invoker.delay(timeout); currentTask = delay; Futures.addCallback(delay, new FutureCallback<Object>() { @Override public void onSuccess(Object result) { task.run(); } @Override public void onFailure(Throwable t) { // this should never happen in a delay future unexpectedError(t); } }, directExecutor()); } catch (Throwable t) { // this should never happen, but ensure that invocation always finishes unexpectedError(t); } }
private synchronized void invoke(A address) { try { long invocationStartTime = ticker.read(); ListenableFuture<Object> result = invoker.invoke(new InvokeRequest(metadata, address, headers, parameters)); stat.recordResult(invocationStartTime, result); currentTask = result; Futures.addCallback(result, new FutureCallback<Object>() { @Override public void onSuccess(Object result) { resetConnectionFailures(address); set(result); } @Override public void onFailure(Throwable t) { handleFailure(address, t); } }, directExecutor()); } catch (Throwable t) { // this should never happen, but ensure that invocation always finishes unexpectedError(t); } }
private synchronized void invoke(A address) { try { long invocationStartTime = ticker.read(); ListenableFuture<Object> result = invoker.invoke(new InvokeRequest(metadata, address, headers, parameters)); stat.recordResult(invocationStartTime, result); currentTask = result; Futures.addCallback(result, new FutureCallback<Object>() { @Override public void onSuccess(Object result) { resetConnectionFailures(address); set(result); } @Override public void onFailure(Throwable t) { handleFailure(address, t); } }, directExecutor()); } catch (Throwable t) { // this should never happen, but ensure that invocation always finishes unexpectedError(t); } }