Separated dispatch from filters and added custom dispatch config KNOX-483

Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/55df5558
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/55df5558
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/55df5558

Branch: refs/heads/KNOX-481
Commit: 55df555867042780a39bbd0c6a5eb880b1b1c1e9
Parents: 9122c27
Author: Sumit Gupta <su...@apache.org>
Authored: Thu Jan 15 23:46:01 2015 -0500
Committer: Sumit Gupta <su...@apache.org>
Committed: Thu Feb 12 17:16:08 2015 -0500

----------------------------------------------------------------------
 .../ServiceDefinitionDeploymentContributor.java | 131 +++++++++++--------
 .../services/yarn-rm/2.5.0/service.xml          |   3 +
 .../definition/ServiceDefinitionTest.java       |   4 +
 3 files changed, 83 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/55df5558/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
 
b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
index 4cff585..79cc4a5 100644
--- 
a/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
+++ 
b/gateway-server/src/main/java/org/apache/hadoop/gateway/deploy/impl/ServiceDefinitionDeploymentContributor.java
@@ -19,9 +19,12 @@ package org.apache.hadoop.gateway.deploy.impl;
 
 import org.apache.hadoop.gateway.deploy.DeploymentContext;
 import org.apache.hadoop.gateway.deploy.ServiceDeploymentContributorBase;
+import org.apache.hadoop.gateway.descriptor.FilterDescriptor;
 import org.apache.hadoop.gateway.descriptor.FilterParamDescriptor;
 import org.apache.hadoop.gateway.descriptor.ResourceDescriptor;
+import org.apache.hadoop.gateway.dispatch.GatewayDispatchFilter;
 import org.apache.hadoop.gateway.filter.rewrite.api.UrlRewriteRulesDescriptor;
+import org.apache.hadoop.gateway.service.definition.CustomDispatch;
 import org.apache.hadoop.gateway.service.definition.RewriteFilter;
 import org.apache.hadoop.gateway.service.definition.ServiceDefinition;
 import org.apache.hadoop.gateway.service.definition.UrlBinding;
@@ -35,73 +38,91 @@ import java.util.Map;
 
 public class ServiceDefinitionDeploymentContributor extends 
ServiceDeploymentContributorBase {
 
-    private ServiceDefinition serviceDefinition;
+  private static final String DISPATCH_ROLE = "dispatch";
 
-    private UrlRewriteRulesDescriptor serviceRules;
+  private static final String DISPATCH_IMPL_PARAM = "dispatch-impl";
 
-    public ServiceDefinitionDeploymentContributor(ServiceDefinition 
serviceDefinition, UrlRewriteRulesDescriptor serviceRules) {
-        this.serviceDefinition = serviceDefinition;
-        this.serviceRules = serviceRules;
-    }
+  private ServiceDefinition serviceDefinition;
 
-    @Override
-    public String getRole() {
-        return serviceDefinition.getRole();
-    }
+  private UrlRewriteRulesDescriptor serviceRules;
 
-    @Override
-    public String getName() {
-        return serviceDefinition.getName();
-    }
+  public ServiceDefinitionDeploymentContributor(ServiceDefinition 
serviceDefinition, UrlRewriteRulesDescriptor serviceRules) {
+    this.serviceDefinition = serviceDefinition;
+    this.serviceRules = serviceRules;
+  }
+
+  @Override
+  public String getRole() {
+    return serviceDefinition.getRole();
+  }
 
-    @Override
-    public void contributeService(DeploymentContext context, Service service) 
throws Exception {
-        contributeRewriteRules(context, service);
-        contributeResources(context, service);
+  @Override
+  public String getName() {
+    return serviceDefinition.getName();
+  }
+
+  @Override
+  public void contributeService(DeploymentContext context, Service service) 
throws Exception {
+    contributeRewriteRules(context, service);
+    contributeResources(context, service);
+  }
+
+  private void contributeRewriteRules(DeploymentContext context, Service 
service) {
+    if ( serviceRules != null ) {
+      UrlRewriteRulesDescriptor clusterRules = 
context.getDescriptor("rewrite");
+      clusterRules.addRules(serviceRules);
     }
+  }
 
-    private void contributeRewriteRules(DeploymentContext context, Service 
service) {
-        if (serviceRules != null) {
-            UrlRewriteRulesDescriptor clusterRules = 
context.getDescriptor("rewrite");
-            clusterRules.addRules(serviceRules);
+  private void contributeResources(DeploymentContext context, Service service) 
{
+    Map<String, String> filterParams = new HashMap<String, String>();
+    List<UrlBinding> bindings = serviceDefinition.getUrlBindings();
+    for ( UrlBinding binding : bindings ) {
+      List<RewriteFilter> filters = binding.getRewriteFilters();
+      if ( filters != null && !filters.isEmpty() ) {
+        filterParams.clear();
+        for ( RewriteFilter filter : filters ) {
+          filterParams.put(filter.getApplyTo(), filter.getRef());
         }
+      }
+      try {
+        contributeResource(context, service, binding.getPattern(), 
filterParams);
+      } catch ( URISyntaxException e ) {
+        e.printStackTrace();
+      }
     }
 
-    private void contributeResources(DeploymentContext context, Service 
service) {
-        Map<String, String> filterParams = new HashMap<String, String>();
-        List<UrlBinding> bindings = serviceDefinition.getUrlBindings();
-        for (UrlBinding binding : bindings) {
-            List<RewriteFilter> filters = binding.getRewriteFilters();
-            if (filters != null && !filters.isEmpty()) {
-                filterParams.clear();
-                for (RewriteFilter filter : filters) {
-                    filterParams.put(filter.getApplyTo(), filter.getRef());
-                }
-            }
-            try {
-                contributeResource(context, service, binding.getPattern(), 
filterParams);
-            } catch (URISyntaxException e) {
-                e.printStackTrace();
-            }
-        }
+  }
 
+  private void contributeResource(DeploymentContext context, Service service, 
String pattern, Map<String, String> filterParams) throws URISyntaxException {
+    List<FilterParamDescriptor> params = new 
ArrayList<FilterParamDescriptor>();
+    ResourceDescriptor resource = context.getGatewayDescriptor().addResource();
+    resource.role(service.getRole());
+    resource.pattern(pattern);
+    addWebAppSecFilters(context, service, resource);
+    addAuthenticationFilter(context, service, resource);
+    addIdentityAssertionFilter(context, service, resource);
+    addAuthorizationFilter(context, service, resource);
+    if ( !filterParams.isEmpty() ) {
+      for ( Map.Entry<String, String> filterParam : filterParams.entrySet() ) {
+        
params.add(resource.createFilterParam().name(filterParam.getKey()).value(filterParam.getValue()));
+      }
     }
-
-    private void contributeResource(DeploymentContext context, Service 
service, String pattern, Map<String, String> filterParams) throws 
URISyntaxException {
-        List<FilterParamDescriptor> params = new 
ArrayList<FilterParamDescriptor>();
-        ResourceDescriptor resource = 
context.getGatewayDescriptor().addResource();
-        resource.role(service.getRole());
-        resource.pattern(pattern);
-        addWebAppSecFilters(context, service, resource);
-        addAuthenticationFilter(context, service, resource);
-        addIdentityAssertionFilter(context, service, resource);
-        addAuthorizationFilter(context, service, resource);
-        if (!filterParams.isEmpty()) {
-            for (Map.Entry<String, String> filterParam : 
filterParams.entrySet()) {
-                
params.add(resource.createFilterParam().name(filterParam.getKey()).value(filterParam.getValue()));
-            }
+    addRewriteFilter(context, service, resource, params);
+    CustomDispatch customDispatch = serviceDefinition.getDispatch();
+    if (customDispatch != null) {
+      String contributorName = customDispatch.getContributorName();
+      if (contributorName != null) {
+        addDispatchFilter(context, service, resource, DISPATCH_ROLE, 
contributorName);
+      } else {
+        String className = customDispatch.getClassName();
+        if (className != null) {
+          FilterDescriptor filter = resource.addFilter().name( getName() 
).role( DISPATCH_ROLE ).impl( GatewayDispatchFilter.class );
+          filter.param().name(DISPATCH_IMPL_PARAM).value(className);
         }
-        addRewriteFilter( context, service, resource, params );
-        addDispatchFilter( context, service, resource, "dispatch", 
"http-client" );
+      }
+    } else {
+      addDispatchFilter(context, service, resource, DISPATCH_ROLE, 
"http-client");
     }
+  }
 }

http://git-wip-us.apache.org/repos/asf/knox/blob/55df5558/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
 
b/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
index 8b53cca..61a77f0 100644
--- 
a/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
+++ 
b/gateway-service-definitions/src/main/resources/services/yarn-rm/2.5.0/service.xml
@@ -16,11 +16,13 @@
    limitations under the License.
 -->
 <service role="RESOURCEMANAGER" name="resourcemanager" version="2.5.0">
+    <policies></policies>
     <urls>
         <url pattern="/resourcemanager/v1/cluster/"/>
         <url pattern="/resourcemanager/v1/cluster/**?**"/>
         <url pattern="/resourcemanager/v1/cluster/apps?**">
             <rewrite-filter 
ref="RESOURCEMANAGER/resourcemanager/apps/outbound" apply-to="response.body"/>
+            <policies></policies>
         </url>
         <url pattern="/resourcemanager/v1/cluster/apps?**">
             <rewrite-filter 
ref="RESOURCEMANAGER/resourcemanager/apps/outbound" apply-to="response.body"/>
@@ -50,5 +52,6 @@
         <url 
pattern="/resourcemanager/proxy/*/ws/v1/mapreduce/jobs/*/tasks/*/attempts/*">
             <rewrite-filter 
ref="RESOURCEMANAGER/resourcemanager/proxy/taskattempt/outbound" 
apply-to="response.body"/>
         </url>
+
     </urls>
 </service>

http://git-wip-us.apache.org/repos/asf/knox/blob/55df5558/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
 
b/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
index 4f82af2..9d4488a 100644
--- 
a/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
+++ 
b/gateway-service-definitions/src/test/java/org/apache/hadoop/gateway/service/definition/ServiceDefinitionTest.java
@@ -42,5 +42,9 @@ public class ServiceDefinitionTest {
     assertNotNull(bindings);
     assertEquals(12, bindings.size());
     assertNotNull(bindings.get(0).getPattern());
+    url = ClassLoader.getSystemResource("services/hbase/0.98.0/service.xml");
+    definition = (ServiceDefinition) unmarshaller.unmarshal(url.openStream());
+    assertNotNull(definition.getDispatch());
+    assertEquals("hbase", definition.getDispatch().getContributorName());
   }
 }

Reply via email to