You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by km...@apache.org on 2015/09/10 23:54:26 UTC
knox git commit: KNOX-596: Add diagnostics to topology depoloyment
Repository: knox
Updated Branches:
refs/heads/master 0450f8420 -> ccfe33d5d
KNOX-596: Add diagnostics to topology depoloyment
Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/ccfe33d5
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/ccfe33d5
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/ccfe33d5
Branch: refs/heads/master
Commit: ccfe33d5dea846a6255639945269163ee47d2079
Parents: 0450f84
Author: Kevin Minder <ke...@hortonworks.com>
Authored: Thu Sep 10 17:49:38 2015 -0400
Committer: Kevin Minder <ke...@hortonworks.com>
Committed: Thu Sep 10 17:49:38 2015 -0400
----------------------------------------------------------------------
CHANGES | 1 +
.../apache/hadoop/gateway/GatewayMessages.java | 18 +++++++++++
.../gateway/deploy/DeploymentFactory.java | 32 ++++++++++++++++++++
.../hadoop/gateway/GatewayDeployFuncTest.java | 9 +++---
4 files changed, 56 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/knox/blob/ccfe33d5/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 553755e..dc44187 100644
--- a/CHANGES
+++ b/CHANGES
@@ -15,6 +15,7 @@ Release Notes - Apache Knox - Version 0.7.0
* [KNOX-564] - Topology deployment fails for no configured providers
* [KNOX-590] - CLI sys-user-auth-test and user-auth-test have improved messages and work for more Shiro configs
* [KNOX-597] - Improve diagnostic logging of HTTP traffic
+ * [KNOX-596] - Add diagnostics to topology depoloyment
** Bug
* [KNOX-554] - Fixed support for gateway.path change + added support for X-Forward-* headers in admin topology API.
http://git-wip-us.apache.org/repos/asf/knox/blob/ccfe33d5/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayMessages.java
----------------------------------------------------------------------
diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayMessages.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayMessages.java
index 88d1294..0069f7a 100644
--- a/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayMessages.java
+++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/GatewayMessages.java
@@ -332,6 +332,24 @@ public interface GatewayMessages {
@Message( level = MessageLevel.INFO, text = "Computed roles/groups: {0} for principal: {1}" )
void lookedUpUserRoles(Set<String> roleNames, String userName);
+ @Message( level = MessageLevel.DEBUG, text = "Initialize provider: {1}/{0}" )
+ void initializeProvider( String name, String role );
+
+ @Message( level = MessageLevel.DEBUG, text = "Initialize service: {1}/{0}" )
+ void initializeService( String name, String role );
+
+ @Message( level = MessageLevel.DEBUG, text = "Contribute provider: {1}/{0}" )
+ void contributeProvider( String name, String role );
+
+ @Message( level = MessageLevel.DEBUG, text = "Contribute service: {1}/{0}" )
+ void contributeService( String name, String role );
+
+ @Message( level = MessageLevel.DEBUG, text = "Finalize provider: {1}/{0}" )
+ void finalizeProvider( String name, String role );
+
+ @Message( level = MessageLevel.DEBUG, text = "Finalize service: {1}/{0}" )
+ void finalizeService( String name, String role );
+
@Message( level = MessageLevel.INFO, text = "Configured services directory is {0}" )
void usingServicesDirectory(String path);
http://git-wip-us.apache.org/repos/asf/knox/blob/ccfe33d5/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java
----------------------------------------------------------------------
diff --git a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java
index 026aa53..67af3ab 100644
--- a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java
+++ b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/DeploymentFactory.java
@@ -39,6 +39,9 @@ import org.jboss.shrinkwrap.descriptor.api.Descriptors;
import org.jboss.shrinkwrap.descriptor.api.webapp30.WebAppDescriptor;
import org.jboss.shrinkwrap.descriptor.api.webcommon30.ServletType;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
import java.beans.Statement;
import java.io.File;
import java.io.IOException;
@@ -94,9 +97,32 @@ public abstract class DeploymentFactory {
// if this is the default topology then add the forwarding webapp as well
context = deployDefaultTopology(config, topology);
}
+ storeTopology( context, topology );
return context.getWebArchive();
}
+ private static void storeTopology( DeploymentContext context, Topology topology ) {
+ StringWriter writer = new StringWriter();
+ String xml;
+ try {
+ Map<String,Object> properties = new HashMap<String,Object>(2);
+ properties.put( "eclipselink-oxm-xml", "org/apache/hadoop/gateway/topology/topology_binding-xml.xml" );
+ properties.put( "eclipselink.media-type", "application/xml" );
+ JAXBContext jaxbContext = JAXBContext.newInstance( Topology.class.getPackage().getName(), Topology.class.getClassLoader() , properties );
+ Marshaller marshaller = jaxbContext.createMarshaller();
+ marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, true );
+ marshaller.marshal( topology, writer );
+ writer.close();
+ xml = writer.toString();
+ } catch (IOException e) {
+ throw new DeploymentException( "Failed to marshall topology.", e );
+ } catch (JAXBException e) {
+ throw new DeploymentException( "Failed to marshall topology.", e );
+ }
+ StringAsset asset = new StringAsset( xml );
+ context.getWebArchive().addAsWebInfResource( asset, "topology.xml" );
+ }
+
private static DeploymentContext deployDefaultTopology(GatewayConfig config,
Topology topology) {
// this is the "default" topology which does some specialized
@@ -278,6 +304,7 @@ public abstract class DeploymentFactory {
ProviderDeploymentContributor contributor = getProviderContributor( providers, provider.getRole(), provider.getName() );
if( contributor != null && provider.isEnabled() ) {
try {
+ log.contributeProvider( provider.getName(), provider.getRole() );
contributor.contributeProvider( context, provider );
} catch( Exception e ) {
// Maybe it makes sense to throw exception
@@ -290,6 +317,7 @@ public abstract class DeploymentFactory {
ServiceDeploymentContributor contributor = getServiceContributor( service.getRole(), service.getName(), service.getVersion() );
if( contributor != null ) {
try {
+ log.contributeService( service.getName(), service.getRole() );
contributor.contributeService( context, service );
if (gatewayServices != null) {
ServiceRegistry sr = gatewayServices.getService(GatewayServices.SERVICE_REGISTRY_SERVICE);
@@ -298,6 +326,7 @@ public abstract class DeploymentFactory {
sr.registerService(regCode, topology.getName(), service.getRole(), service.getUrls() );
}
}
+ log.initializeProvider( contributor.getName(), contributor.getRole() );
} catch( Exception e ) {
// Maybe it makes sense to throw exception
log.failedToContributeService( service.getName(), service.getRole(), e );
@@ -365,17 +394,20 @@ public abstract class DeploymentFactory {
for( String role : providers.keySet() ) {
for( ProviderDeploymentContributor contributor : providers.get( role ) ) {
try {
+ log.finalizeProvider( contributor.getName(), contributor.getRole() );
contributor.finalizeContribution( context );
} catch( Exception e ) {
// Maybe it makes sense to throw exception
log.failedToFinalizeContribution( e );
throw new DeploymentException("Failed to finalize contribution.", e);
}
+ log.initializeService( contributor.getName(), contributor.getRole() );
}
}
for( String role : services.keySet() ) {
for( ServiceDeploymentContributor contributor : services.get( role ) ) {
try {
+ log.finalizeService( contributor.getName(), contributor.getRole() );
contributor.finalizeContribution( context );
} catch( Exception e ) {
// Maybe it makes sense to throw exception
http://git-wip-us.apache.org/repos/asf/knox/blob/ccfe33d5/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayDeployFuncTest.java
----------------------------------------------------------------------
diff --git a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayDeployFuncTest.java b/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayDeployFuncTest.java
index fc2fd70..7a907c7 100644
--- a/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayDeployFuncTest.java
+++ b/gateway-test/src/test/java/org/apache/hadoop/gateway/GatewayDeployFuncTest.java
@@ -205,6 +205,7 @@ public class GatewayDeployFuncTest {
@Test( timeout = 30*1000 )
public void testDeployRedeployUndeploy() throws InterruptedException, IOException {
long sleep = 200;
+ int numFilesInWar = 5;
String username = "guest";
String password = "guest-password";
String serviceUrl = clusterUrl + "/test-service-path/test-service-resource";
@@ -212,7 +213,7 @@ public class GatewayDeployFuncTest {
File topoDir = new File( config.getGatewayTopologyDir() );
File deployDir = new File( config.getGatewayDeploymentDir() );
- File warDir = null;
+ File warDir;
// Make sure deployment directory is empty.
assertThat( topoDir.listFiles().length, is( 0 ) );
@@ -223,7 +224,7 @@ public class GatewayDeployFuncTest {
warDir = waitForFiles( deployDir, "test-cluster.war\\.[0-9A-Fa-f]+", 1, 0, sleep );
for( File webInfDir : warDir.listFiles() ) {
- waitForFiles( webInfDir, ".*", 4, 0, sleep );
+ waitForFiles( webInfDir, ".*", numFilesInWar, 0, sleep );
}
waitForAccess( serviceUrl, username, password, sleep );
@@ -240,7 +241,7 @@ public class GatewayDeployFuncTest {
// Check to make sure there are two war directories with the same root.
warDir = waitForFiles( deployDir, "test-cluster.war\\.[0-9A-Fa-f]+", 2, 1, sleep );
for( File webInfDir : warDir.listFiles() ) {
- waitForFiles( webInfDir, ".*", 4, 0, sleep );
+ waitForFiles( webInfDir, ".*", numFilesInWar, 0, sleep );
}
waitForAccess( serviceUrl, username, password, sleep );
@@ -257,7 +258,7 @@ public class GatewayDeployFuncTest {
// Check to make sure there are two war directories with the same root.
warDir = waitForFiles( deployDir, "test-cluster.war\\.[0-9A-Fa-f]+", 3, 2, sleep );
for( File webInfDir : warDir.listFiles() ) {
- waitForFiles( webInfDir, ".*", 4, 0, sleep );
+ waitForFiles( webInfDir, ".*", numFilesInWar, 0, sleep );
}
waitForAccess( serviceUrl, username, password, sleep );