Encadenando Observables para evitar suscripciones múltiples

Tengo algunos problemas para encadenar estos observables. Tengo func1() que arroja una exception en caso de error. En el onError tengo func2() que hace una recuperación de database y func3() que hace una database de guardado modificando el documento recuperado. ¿Cómo puedo encadenar esto para evitar suscripciones múltiples?

  Observable.fromCallable { func1() } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .take(1) .subscribe({ // update success view }, { Observable.fromCallable { func2() } .subscribeOn(Schedulers.io()) .take(1) .subscribe { Observable.fromCallable { func3() } .subscribeOn(Schedulers.io()) .take(1) .subscribe {} } // update failure view })