You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by st...@apache.org on 2015/06/30 17:12:16 UTC
[1/2] incubator-slider git commit: fix spelling error in private
method getPrintableExpirationTime()
Repository: incubator-slider
Updated Branches:
refs/heads/develop 56e7e1942 -> ab2193c81
fix spelling error in private method getPrintableExpirationTime()
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/5cee2382
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/5cee2382
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/5cee2382
Branch: refs/heads/develop
Commit: 5cee23821025dbb1431f82774fd6ab9082114156
Parents: 56e7e19
Author: Steve Loughran <st...@apache.org>
Authored: Sun Jun 28 22:07:54 2015 +0100
Committer: Steve Loughran <st...@apache.org>
Committed: Tue Jun 30 16:08:59 2015 +0100
----------------------------------------------------------------------
.../services/security/FsDelegationTokenManager.java | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5cee2382/slider-core/src/main/java/org/apache/slider/server/services/security/FsDelegationTokenManager.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/services/security/FsDelegationTokenManager.java b/slider-core/src/main/java/org/apache/slider/server/services/security/FsDelegationTokenManager.java
index c892b10..01cc5e5 100644
--- a/slider-core/src/main/java/org/apache/slider/server/services/security/FsDelegationTokenManager.java
+++ b/slider-core/src/main/java/org/apache/slider/server/services/security/FsDelegationTokenManager.java
@@ -23,7 +23,6 @@ import org.apache.hadoop.io.Text;
import org.apache.hadoop.security.SecurityUtil;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
-import org.apache.hadoop.security.token.TokenIdentifier;
import org.apache.hadoop.security.token.delegation.AbstractDelegationTokenIdentifier;
import org.apache.hadoop.util.Time;
import org.apache.slider.common.tools.SliderUtils;
@@ -157,7 +156,8 @@ public class FsDelegationTokenManager {
Token token = fs.getDelegationToken(
remoteUser.getShortUserName());
tokenExpiryTime = getTokenExpiryTime(token);
- log.info("Initial delegation token obtained with expiry time of {}", getPrintableExirationTime(tokenExpiryTime));
+ log.info("Initial delegation token obtained with expiry time of {}", getPrintableExpirationTime(
+ tokenExpiryTime));
return token;
}
});
@@ -196,7 +196,7 @@ public class FsDelegationTokenManager {
public Long run() throws Exception {
long expires = token.renew(fs.getConf());
log.info("HDFS delegation token renewed. Renewal cycle ends at {}",
- getPrintableExirationTime(expires));
+ getPrintableExpirationTime(expires));
return expires;
}
});
@@ -220,7 +220,7 @@ public class FsDelegationTokenManager {
}
}
- private String getPrintableExirationTime(long expires) {
+ private String getPrintableExpirationTime(long expires) {
Date d = new Date(expires);
return DateFormat.getDateTimeInstance().format(d);
}
@@ -245,7 +245,7 @@ public class FsDelegationTokenManager {
log.info("Expired HDFS delegation token replaced and added as credential"
+ " to current user. Token expires at {}",
- getPrintableExirationTime(tokenExpiryTime));
+ getPrintableExpirationTime(tokenExpiryTime));
updateRenewalTime(renewInterval);
} catch (IOException ie2) {
throw new IOException("Can't get new delegation token ", ie2);
[2/2] incubator-slider git commit: SLIDER-907
AgentWebPagesIT#testAgentWeb fails on wire encrypted clusters
Posted by st...@apache.org.
SLIDER-907 AgentWebPagesIT#testAgentWeb fails on wire encrypted clusters
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/ab2193c8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/ab2193c8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/ab2193c8
Branch: refs/heads/develop
Commit: ab2193c811a9b5f225a0c89d0e16c08f7a094129
Parents: 5cee238
Author: Steve Loughran <st...@apache.org>
Authored: Tue Jun 30 16:11:27 2015 +0100
Committer: Steve Loughran <st...@apache.org>
Committed: Tue Jun 30 16:11:27 2015 +0100
----------------------------------------------------------------------
.../restclient/UrlConnectionOperations.java | 5 +-
.../agent/rest/JerseyTestDelegates.groovy | 28 ++++++++++
.../funtest/framework/CommandTestBase.groovy | 51 ++++++++++++++++-
.../funtest/lifecycle/AgentWebPagesIT.groovy | 59 ++++++++++++--------
4 files changed, 117 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/ab2193c8/slider-core/src/main/java/org/apache/slider/core/restclient/UrlConnectionOperations.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/core/restclient/UrlConnectionOperations.java b/slider-core/src/main/java/org/apache/slider/core/restclient/UrlConnectionOperations.java
index e0d2315..20ef198 100644
--- a/slider-core/src/main/java/org/apache/slider/core/restclient/UrlConnectionOperations.java
+++ b/slider-core/src/main/java/org/apache/slider/core/restclient/UrlConnectionOperations.java
@@ -30,6 +30,7 @@ import org.apache.hadoop.yarn.webapp.NotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.net.ssl.SSLException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -142,12 +143,14 @@ public class UrlConnectionOperations extends Configured {
log.debug("No body in response");
}
+ } catch (SSLException e) {
+ throw e;
} catch (IOException e) {
throw NetUtils.wrapException(url.toString(),
url.getPort(), "localhost", 0, e);
} catch (AuthenticationException e) {
- throw new IOException("From " + url + ": " + e, e);
+ throw new AuthenticationException("From " + url + ": " + e, e);
} finally {
if (conn != null) {
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/ab2193c8/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy
index 5eb14e3..857d15c 100644
--- a/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/agent/rest/JerseyTestDelegates.groovy
@@ -36,7 +36,9 @@ import org.apache.slider.core.conf.ConfTreeOperations
import org.apache.slider.core.restclient.HttpVerb
import org.apache.slider.server.appmaster.web.rest.application.ApplicationResource
import org.apache.slider.api.types.PingInformation
+import org.apache.slider.test.Outcome
+import javax.net.ssl.SSLException
import javax.ws.rs.core.MediaType
import static org.apache.slider.api.ResourceKeys.COMPONENT_INSTANCES
@@ -479,4 +481,30 @@ class JerseyTestDelegates extends AbstractRestTestDelegate {
testPing();
}
+ /**
+ * Probe callback for is the web service live; currently
+ * checks the "/system/health" path.
+ * Raising an SSL exception is considered a sign of liveness.
+ * @param args args: ignored
+ * @return the outcome
+ */
+ Outcome probeServiceLive(Map<String, String> args) {
+ try {
+ jerseyGet(SYSTEM_HEALTHCHECK)
+ return Outcome.Success
+ } catch (SSLException e) {
+ // SSL exception => success
+ return Outcome.Success
+ } catch (IOException e) {
+ def cause = e.getCause()
+ if (cause && cause instanceof SSLException) {
+ // nested SSL exception => success
+ return Outcome.Success
+ }
+ // any other IOE is a retry
+ return Outcome.Retry
+ }
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/ab2193c8/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy
----------------------------------------------------------------------
diff --git a/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy b/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy
index edc4826..4c02289 100644
--- a/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy
+++ b/slider-funtest/src/main/groovy/org/apache/slider/funtest/framework/CommandTestBase.groovy
@@ -48,6 +48,9 @@ import org.junit.Rule
import org.junit.rules.Timeout
import org.slf4j.Logger
import org.slf4j.LoggerFactory
+
+import javax.net.ssl.SSLException
+
import static org.apache.slider.common.SliderExitCodes.*
import static org.apache.slider.core.main.LauncherExitCodes.*
import static org.apache.slider.funtest.framework.FuntestProperties.*
@@ -1463,7 +1466,8 @@ abstract class CommandTestBase extends SliderTestUtils {
}
/**
- * Probe callback for is the the app root web page up
+ * Probe callback for is the the app root web page up.
+ * Having a securty exception is in fact legit.
* @param args map where 'applicationId' must be set
* @return the outcome
*/
@@ -1480,6 +1484,12 @@ abstract class CommandTestBase extends SliderTestUtils {
try {
getWebPage(sar.url)
return Outcome.Success
+ } catch (SSLException e) {
+ // SSL exception -implies negotiation failure. At this point there is clearly something
+ // at the far end -we just don't have the credentials to trust it.
+ return Outcome.Success;
+ } catch (IOException e) {
+ return Outcome.Retry;
} catch (Exception e) {
return Outcome.Retry;
}
@@ -1511,4 +1521,43 @@ abstract class CommandTestBase extends SliderTestUtils {
getWebPage(sar.url)
}
}
+
+ /**
+ * Probe callback for the the app root web page up.
+ * Raising an SSL exception is considered a sign of liveness.
+ * @param args map where 'applicationId' must be set
+ * @return the outcome
+ */
+ protected static Outcome isApplicationURLPublished(
+ Map<String, String> args) {
+
+ assert args['applicationId'] != null
+ String applicationId = args['applicationId'];
+ def sar = lookupApplication(applicationId)
+ assert sar != null;
+ return sar.url? Outcome.Success : Outcome.Retry
+ }
+
+ /**
+ * Await for the URL of an app to be listed in the application report
+ * @param applicationId app ID
+ * @param launch_timeout launch timeout
+ */
+ void awaitApplicationURLPublished(String applicationId, int launch_timeout) {
+ repeatUntilSuccess(
+ "await application URL published",
+ this.&isApplicationURLPublished,
+ launch_timeout,
+ PROBE_SLEEP_TIME,
+ [
+ applicationId: applicationId
+ ],
+ true,
+ "application URL not published") {
+
+ def sar = lookupApplication(applicationId)
+ log.error("$applicationId => $sar")
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/ab2193c8/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy
----------------------------------------------------------------------
diff --git a/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy b/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy
index 0bce63e..5e234a4 100644
--- a/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy
+++ b/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy
@@ -48,6 +48,8 @@ import org.junit.After
import org.junit.Before
import org.junit.Test
+import static org.apache.slider.server.appmaster.web.rest.RestPaths.SYSTEM_HEALTHCHECK
+
@CompileStatic
@Slf4j
public class AgentWebPagesIT extends AgentCommandTestBase
@@ -105,53 +107,45 @@ public class AgentWebPagesIT extends AgentCommandTestBase
def appId = ensureYarnApplicationIsUp(launchReportFile)
assert appId
- expectRootWebPageUp(appId, instanceLaunchTime)
+ awaitApplicationURLPublished(appId, instanceLaunchTime)
File liveReportFile = createTempJsonFile();
- lookup(appId,liveReportFile)
+ lookup(appId, liveReportFile)
def report = loadAppReport(liveReportFile)
assert report.url
def proxyAM = report.url
- // get the root page,
- getWebPage(proxyAM)
-
- def directAM = report.origTrackingUrl;
-/*
- // now attempt direct-to-AM pings
- LowLevelRestTestDelegates direct = new LowLevelRestTestDelegates(directAM,
- directComplexVerbs)
-
- direct.testSuiteAll()
+ // here the URL has been published, but it may not be live yet, due to the time
+ // it takes the AM to build app state and boostrap the Web UI
- // and via the proxy
- LowLevelRestTestDelegates proxied = new LowLevelRestTestDelegates(proxyAM,
- proxyComplexVerbs)
- proxied.testSuiteAll()
- proxied.logCodahaleMetrics();
-*/
+ def directAM = report.origTrackingUrl;
describe "Proxy Jersey Tests"
- Client ugiClient = createUGIJerseyClient()
+ Client jerseyClient = createUGIJerseyClient()
+
JerseyTestDelegates proxyJerseyTests =
- new JerseyTestDelegates(proxyAM, ugiClient, proxyComplexVerbs)
+ new JerseyTestDelegates(proxyAM, jerseyClient, proxyComplexVerbs)
+
+ // wait it coming up
+ awaitRestEndpointLive(proxyJerseyTests, instanceLaunchTime)
+
proxyJerseyTests.testSuiteGetOperations()
describe "Direct Jersey Tests"
JerseyTestDelegates directJerseyTests =
- new JerseyTestDelegates(directAM, ugiClient, directComplexVerbs)
+ new JerseyTestDelegates(directAM, jerseyClient, directComplexVerbs)
directJerseyTests.testSuiteAll()
describe "Proxy SliderRestClient Tests"
RestAPIClientTestDelegates proxySliderRestAPI =
- new RestAPIClientTestDelegates(proxyAM, ugiClient, proxyComplexVerbs)
+ new RestAPIClientTestDelegates(proxyAM, jerseyClient, proxyComplexVerbs)
proxySliderRestAPI.testSuiteAll()
describe "Direct SliderRestClient Tests"
RestAPIClientTestDelegates directSliderRestAPI =
- new RestAPIClientTestDelegates(directAM, ugiClient, directComplexVerbs)
+ new RestAPIClientTestDelegates(directAM, jerseyClient, directComplexVerbs)
directSliderRestAPI.testSuiteAll()
if (UserGroupInformation.securityEnabled) {
@@ -171,7 +165,7 @@ public class AgentWebPagesIT extends AgentCommandTestBase
SliderClient sliderClient = bondToCluster(SLIDER_CONFIG, CLUSTER)
RegistryOperations operations = sliderClient.registryOperations;
def restClientFactory = new RestClientFactory(
- operations, ugiClient,
+ operations, jerseyClient,
"~", SliderKeys.APP_TYPE, CLUSTER)
def sliderApplicationApi = restClientFactory.createSliderAppApiClient();
sliderApplicationApi.desiredModel
@@ -209,4 +203,21 @@ public class AgentWebPagesIT extends AgentCommandTestBase
}
}
+ /**
+ * Await for the URL of an app to be listed in the application report
+ * @param applicationId app ID
+ * @param launch_timeout launch timeout
+ */
+ void awaitRestEndpointLive(JerseyTestDelegates jersey, int launch_timeout) {
+ repeatUntilSuccess(
+ "await application URL published",
+ jersey.&probeServiceLive,
+ launch_timeout,
+ PROBE_SLEEP_TIME,
+ [:],
+ false,
+ "GET of $SYSTEM_HEALTHCHECK failed") {
+ jersey.jerseyGet(SYSTEM_HEALTHCHECK)
+ }
+ }
}