private Observable convertToPublicLogUri()

in src/main/java/com/microsoft/azure/spark/tools/job/YarnContainerLogFetcher.java [187:216]


    private Observable<URI> convertToPublicLogUri(final URI internalLogUri) {
        if (logConversionMode.isInitialized()) {
            return logConversionMode.observable()
                    .first()
                    .map(conversionMode -> conversionMode.toPublic(internalLogUri));
        }

        while (this.logConversionProbingModes.hasNext()) {
            // Try next mode
            final LogConversionMode probeMode = this.logConversionProbingModes.next();
            final URI uriProbe = probeMode.toPublic(internalLogUri);

            if (isUriValid(uriProbe).toBlocking().firstOrDefault(false)) {
                // Find usable one
                log().debug("The Yarn log URL conversion mode is "
                                + probeMode.name
                                + " with pattern "
                                + probeMode.publicPathTemplate);

                logConversionMode.set(probeMode);

                return Observable.just(uriProbe);
            }
        }

        // All modes were probed and all failed
        log().warn("Can't find conversion mode of Yarn " + getYarnNMConnectUri());
        return Observable.error(new NoContainerPublicUriConversionException(
                "Can't find conversion mode of Yarn " + getYarnNMConnectUri()));
    }