From 4f3ab00ac6738b5ec491dd1a6ec7ce6a201cd203 Mon Sep 17 00:00:00 2001 From: "Pradeep A. Dalvi" Date: Mon, 11 Jul 2016 15:59:32 -0700 Subject: [PATCH] APEXCORE-488: Issues in SSL communication with StrAM - Fixed Application Master trackingURL - StramAgent shall not assume always HTTP --- .../stram/StreamingAppMasterService.java | 7 ++++++- .../datatorrent/stram/client/StramAgent.java | 9 ++++++++- .../datatorrent/stram/util/ConfigUtils.java | 19 +++++++++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/engine/src/main/java/com/datatorrent/stram/StreamingAppMasterService.java b/engine/src/main/java/com/datatorrent/stram/StreamingAppMasterService.java index 1c7c893006..43ab7439c0 100644 --- a/engine/src/main/java/com/datatorrent/stram/StreamingAppMasterService.java +++ b/engine/src/main/java/com/datatorrent/stram/StreamingAppMasterService.java @@ -105,6 +105,7 @@ import com.datatorrent.stram.security.StramDelegationTokenManager; import com.datatorrent.stram.security.StramUserLogin; import com.datatorrent.stram.security.StramWSFilterInitializer; +import com.datatorrent.stram.util.ConfigUtils; import com.datatorrent.stram.util.SecurityUtils; import com.datatorrent.stram.webapp.AppInfo; import com.datatorrent.stram.webapp.StramWebApp; @@ -614,7 +615,11 @@ protected void serviceStart() throws Exception } WebApp webApp = WebApps.$for("stram", StramAppContext.class, appContext, "ws").with(config).start(new StramWebApp(this.dnmgr)); LOG.info("Started web service at port: " + webApp.port()); - this.appMasterTrackingUrl = NetUtils.getConnectAddress(webApp.getListenerAddress()).getHostName() + ":" + webApp.port(); + appMasterTrackingUrl = NetUtils.getConnectAddress(webApp.getListenerAddress()).getHostName() + ":" + webApp.port(); + + if (ConfigUtils.isSSLEnabled(config)) { + appMasterTrackingUrl = "https://" + appMasterTrackingUrl; + } LOG.info("Setting tracking URL to: " + appMasterTrackingUrl); } catch (Exception e) { LOG.error("Webapps failed to start. Ignoring for now:", e); diff --git a/engine/src/main/java/com/datatorrent/stram/client/StramAgent.java b/engine/src/main/java/com/datatorrent/stram/client/StramAgent.java index 1e38ef2255..29de7aa38c 100644 --- a/engine/src/main/java/com/datatorrent/stram/client/StramAgent.java +++ b/engine/src/main/java/com/datatorrent/stram/client/StramAgent.java @@ -204,7 +204,14 @@ private UriBuilder getStramWebURIBuilder(WebServicesClient webServicesClient, St if (info != null) { //ws = wsClient.resource("http://" + info.appMasterTrackingUrl).path(WebServices.PATH).path(info.version).path("stram"); // the filter should convert to the right version - ub = UriBuilder.fromUri("http://" + info.appMasterTrackingUrl).path(WebServices.PATH).path(WebServices.VERSION).path("stram"); + String url; + if (!info.appMasterTrackingUrl.startsWith("http://") + && !info.appMasterTrackingUrl.startsWith("https://")) { + url = "http://" + info.appMasterTrackingUrl; + } else { + url = info.appMasterTrackingUrl; + } + ub = UriBuilder.fromUri(url).path(WebServices.PATH).path(WebServices.VERSION).path("stram"); WebServicesVersionConversion.Converter versionConverter = WebServicesVersionConversion.getConverter(info.version); if (versionConverter != null) { VersionConversionFilter versionConversionFilter = new VersionConversionFilter(versionConverter); diff --git a/engine/src/main/java/com/datatorrent/stram/util/ConfigUtils.java b/engine/src/main/java/com/datatorrent/stram/util/ConfigUtils.java index 02755354c7..9da0b0c8dc 100644 --- a/engine/src/main/java/com/datatorrent/stram/util/ConfigUtils.java +++ b/engine/src/main/java/com/datatorrent/stram/util/ConfigUtils.java @@ -68,15 +68,30 @@ public static String getRMUsername(Configuration conf) return principal; } - public static String getSchemePrefix(YarnConfiguration conf) + public static boolean isSSLEnabled(Configuration conf) + { + if (HttpConfig.Policy.HTTPS_ONLY == HttpConfig.Policy.fromString( + conf.get(YarnConfiguration.YARN_HTTP_POLICY_KEY, YarnConfiguration.YARN_HTTP_POLICY_DEFAULT))) { + return true; + } + return false; + } + + public static String getSchemePrefix(Configuration conf) { - if (HttpConfig.Policy.HTTPS_ONLY == HttpConfig.Policy.fromString(conf.get(YarnConfiguration.YARN_HTTP_POLICY_KEY, YarnConfiguration.YARN_HTTP_POLICY_DEFAULT))) { + if (isSSLEnabled(conf)) { return "https://"; } else { return "http://"; } } + @Deprecated + public static String getSchemePrefix(YarnConfiguration conf) + { + return getSchemePrefix((Configuration)conf); + } + public static String getYarnLogDir() { if (yarnLogDir != null) {