private Observable<R> handleRequestCacheHitAndEmitValues(final HystrixCommandResponseFromCache<R> fromCache, final AbstractCommand<R> _cmd) { try { executionHook.onCacheHit(this); } catch (Throwable hookEx) { logger.warn("Error calling HystrixCommandExecutionHook.onCacheHit", hookEx); } return fromCache.toObservableWithStateCopiedInto(this) .doOnTerminate(new Action0() { @Override public void call() { if (commandState.compareAndSet(CommandState.OBSERVABLE_CHAIN_CREATED, CommandState.TERMINAL)) { cleanUpAfterResponseFromCache(false); //user code never ran } else if (commandState.compareAndSet(CommandState.USER_CODE_EXECUTED, CommandState.TERMINAL)) { cleanUpAfterResponseFromCache(true); //user code did run } } }) .doOnUnsubscribe(new Action0() { @Override public void call() { if (commandState.compareAndSet(CommandState.OBSERVABLE_CHAIN_CREATED, CommandState.UNSUBSCRIBED)) { cleanUpAfterResponseFromCache(false); //user code never ran } else if (commandState.compareAndSet(CommandState.USER_CODE_EXECUTED, CommandState.UNSUBSCRIBED)) { cleanUpAfterResponseFromCache(true); //user code did run } } }); }
@Override public void start() throws Exception { JsonObject config = new JsonObject().put("url", "jdbc:hsqldb:mem:test?shutdown=true") .put("driver_class", "org.hsqldb.jdbcDriver"); JDBCClient jdbc = JDBCClient.createShared(vertx, config); jdbc .rxGetConnection() // Connect to the database .flatMapObservable(conn -> { // With the connection... return conn.rxUpdate("CREATE TABLE test(col VARCHAR(20))") // ...create test table .flatMap(result -> conn.rxUpdate("INSERT INTO test (col) VALUES ('val1')")) // ...insert a row .flatMap(result -> conn.rxUpdate("INSERT INTO test (col) VALUES ('val2')")) // ...another one .flatMap(result -> conn.rxQueryStream("SELECT * FROM test")) // ...get values stream .flatMapObservable(sqlRowStream -> { return sqlRowStream.toObservable() // Transform the stream into an Observable... .doOnTerminate(conn::close); // ...and close the connection when the stream is fully read or an error occurs }); }).subscribe(row -> System.out.println("Row : " + row.encode())); } }
}).doOnTerminate(new Action0() { @Override public void call() {
return executeCommandAndObserve(_cmd) .doOnError(markExceptionThrown) .doOnTerminate(singleSemaphoreRelease) .doOnUnsubscribe(singleSemaphoreRelease); } catch (RuntimeException e) {
.doOnTerminate(terminateCommandCleanup) // perform cleanup once (either on normal terminal state (this line), or unsubscribe (next line))
.doOnTerminate(new Action0() { @Override public void call() {
.doOnCompleted(markFallbackCompleted) .onErrorResumeNext(handleFallbackError) .doOnTerminate(singleSemaphoreRelease) .doOnUnsubscribe(singleSemaphoreRelease); } else {
@Override public Observable<Void> rollback() { return transaction.rollback() .doOnTerminate(this::releaseConnection); }
@Override public Observable<Void> commit() { return transaction.commit() .doOnTerminate(this::releaseConnection); }
@Override public Observable<Void> commit() { return transaction.commit() .doOnTerminate(this::releaseConnection); }
@Override public Observable<Void> rollback() { return transaction.rollback() .doOnTerminate(this::releaseConnection); }
@Override public Observable<Row> queryRows(String sql, Object... params) { return getConnection() .doOnNext(this::releaseIfPipelining) .flatMap(connection -> connection.queryRows(sql, params) .doOnTerminate(() -> releaseIfNotPipelining(connection))); }
@Override public Observable<ResultSet> querySet(String sql, Object... params) { return getConnection() .doOnNext(this::releaseIfPipelining) .flatMap(connection -> connection.querySet(sql, params) .doOnTerminate(() -> releaseIfNotPipelining(connection))); }
@Override public Observable<ResultSet> querySet(String sql, Object... params) { return getConnection() .doOnNext(this::releaseIfPipelining) .flatMap(connection -> connection.querySet(sql, params) .doOnTerminate(() -> releaseIfNotPipelining(connection))); }
public void init() { mRepository.repositories() .doOnSubscribe(mView::showLoading) .doOnTerminate(mView::hideLoading) .compose(mLifecycleHandler.load(R.id.repositories_request)) .subscribe(mView::showRepositories, throwable -> mView.showError()); }
@Override public Observable<CartEvent> streamByUser(String userId) { JsonArray params = new JsonArray().add(userId).add(userId); return client.rxGetConnection() .flatMapObservable(conn -> conn.rxQueryWithParams(STREAM_STATEMENT, params) .map(ResultSet::getRows) .flatMapObservable(Observable::from) .map(this::wrapCartEvent) .doOnTerminate(conn::close) ); }
public void init() { RepositoryProvider.provideGithubRepository() .repositories() .doOnSubscribe(mView::showLoading) .doOnTerminate(mView::hideLoading) .compose(mLifecycleHandler.load(R.id.repositories_request)) .subscribe(mView::showRepositories, throwable -> mView.showError()); }
public void init() { RepositoryProvider.provideGithubRepository() .repositories() .doOnSubscribe(mView::showLoading) .doOnTerminate(mView::hideLoading) .compose(mLifecycleHandler.load(R.id.repositories_request)) .subscribe(mView::showRepositories, throwable -> mView.showError()); }
@Test public void sample_55() throws Exception { final Observable<Integer> observable = Observable.range(1, 100); Counter counter = metricRegistry.counter("counter"); observable .flatMap(x -> makeNetworkCall(x) .doOnSubscribe(counter::inc) .doOnTerminate(counter::dec) ) .subscribe(/* ... */); }
private Observable<CaravanHttpResponse> addMetrics(Context ctx, Observable<CaravanHttpResponse> response) { PerformanceMetrics metrics = ctx.request.getPerformanceMetrics(); return response.doOnSubscribe(metrics.getStartAction()) .doOnNext(metrics.getOnNextAction()) .doOnTerminate(metrics.getEndAction()); }