You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by bi...@apache.org on 2014/12/05 22:09:59 UTC

incubator-slider git commit: SLIDER-700 added proxy component with funtest

Repository: incubator-slider
Updated Branches:
  refs/heads/develop 364eca0fa -> d91049a65


SLIDER-700 added proxy component with funtest


Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/d91049a6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/d91049a6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/d91049a6

Branch: refs/heads/develop
Commit: d91049a6527bf15144ce935f5e3ddca588d97e3b
Parents: 364eca0
Author: Billie Rinaldi <bi...@gmail.com>
Authored: Thu Dec 4 11:56:17 2014 -0800
Committer: Billie Rinaldi <bi...@gmail.com>
Committed: Fri Dec 5 12:32:15 2014 -0800

----------------------------------------------------------------------
 app-packages/accumulo/appConfig-default.json    |   2 +
 app-packages/accumulo/configuration/proxy.xml   |  64 +++++++++
 app-packages/accumulo/metainfo.xml              |  24 ++++
 .../package/scripts/accumulo_configuration.py   |   8 ++
 .../accumulo/package/scripts/accumulo_proxy.py  |  24 ++++
 .../package/scripts/accumulo_service.py         |   5 +-
 app-packages/accumulo/package/scripts/params.py |   1 +
 app-packages/accumulo/pom.xml                   |  12 ++
 app-packages/accumulo/resources-default.json    |   5 +
 .../funtest/accumulo/AccumuloBasicIT.groovy     |  46 ++++---
 .../funtest/accumulo/AccumuloProxyIT.groovy     | 130 +++++++++++++++++++
 .../accumulo/src/test/resources/resources.json  |   7 +-
 .../test/resources/resources_with_client.json   |  41 ------
 .../test/resources/resources_with_proxy.json    |  43 ++++++
 14 files changed, 351 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/appConfig-default.json
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/appConfig-default.json b/app-packages/accumulo/appConfig-default.json
index 9d11bae..968abcf 100644
--- a/app-packages/accumulo/appConfig-default.json
+++ b/app-packages/accumulo/appConfig-default.json
@@ -22,6 +22,8 @@
 
     "site.client.instance.name": "${USER}-${CLUSTER_NAME}",
 
+    "site.proxy.port": "${ACCUMULO_PROXY.ALLOCATED_PORT}{PER_CONTAINER}",
+
     "site.global.accumulo_root_password": "NOT_USED",
     "site.global.ssl_cert_dir": "ssl",
     "site.global.monitor_protocol": "http",

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/configuration/proxy.xml
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/configuration/proxy.xml b/app-packages/accumulo/configuration/proxy.xml
new file mode 100644
index 0000000..4db2505
--- /dev/null
+++ b/app-packages/accumulo/configuration/proxy.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<configuration>
+  <property>
+    <name>instance</name>
+    <value>${@//site/client/instance.name}</value>
+    <description>Accumulo Instance Name.</description>
+  </property>
+  <property>
+    <name>zookeepers</name>
+    <value>${@//site/accumulo-site/instance.zookeeper.host}</value>
+    <description>Zookeeper hosts.</description>
+  </property>
+  <property>
+    <name>port</name>
+    <value>42424</value>
+    <description>Proxy port.</description>
+  </property>
+  <property>
+    <name>protocolFactory</name>
+    <value>org.apache.thrift.protocol.TCompactProtocol$Factory</value>
+    <description>Proxy protocol factory.</description>
+  </property>
+  <property>
+    <name>tokenClass</name>
+    <value>org.apache.accumulo.core.client.security.tokens.PasswordToken</value>
+    <description>Class to use for accumulo user authentication.</description>
+  </property>
+  <property>
+    <name>maxFrameSize</name>
+    <value>16M</value>
+    <description>Max frame size.</description>
+  </property>
+  <property>
+    <name>useMockInstance</name>
+    <value>false</value>
+    <description>Only used for testing.</description>
+  </property>
+  <property>
+    <name>useMiniAccumulo</name>
+    <value>false</value>
+    <description>Only used for testing.</description>
+  </property>
+</configuration>

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/metainfo.xml
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/metainfo.xml b/app-packages/accumulo/metainfo.xml
index d3fb263..4cfaa6b 100644
--- a/app-packages/accumulo/metainfo.xml
+++ b/app-packages/accumulo/metainfo.xml
@@ -77,6 +77,10 @@
         <command>ACCUMULO_TRACER-START</command>
         <requires>ACCUMULO_TSERVER-STARTED</requires>
       </commandOrder>
+      <commandOrder>
+        <command>ACCUMULO_PROXY-START</command>
+        <requires>ACCUMULO_TSERVER-STARTED</requires>
+      </commandOrder>
     </commandOrders>
     <components>
       <component>
@@ -131,6 +135,21 @@
       </component>
 
       <component>
+        <name>ACCUMULO_PROXY</name>
+        <category>CLIENT</category>
+        <componentExports>
+          <componentExport>
+            <name>proxies</name>
+            <value>${THIS_HOST}:${site.proxy.port}</value>
+          </componentExport>
+        </componentExports>
+        <commandScript>
+          <script>scripts/accumulo_proxy.py</script>
+          <scriptType>PYTHON</scriptType>
+        </commandScript>
+      </component>
+
+      <component>
         <name>ACCUMULO_CLIENT</name>
         <category>CLIENT</category>
         <commandScript>
@@ -168,6 +187,11 @@
         <fileName>client.conf</fileName>
         <dictionaryName>client</dictionaryName>
       </configFile>
+      <configFile>
+        <type>properties</type>
+        <fileName>proxy.properties</fileName>
+        <dictionaryName>proxy</dictionaryName>
+      </configFile>
     </configFiles>
 
   </application>

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/package/scripts/accumulo_configuration.py
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/package/scripts/accumulo_configuration.py b/app-packages/accumulo/package/scripts/accumulo_configuration.py
index fb4410e..2440250 100644
--- a/app-packages/accumulo/package/scripts/accumulo_configuration.py
+++ b/app-packages/accumulo/package/scripts/accumulo_configuration.py
@@ -133,6 +133,14 @@ def setup_conf_dir(name=None): # 'master' or 'tserver' or 'monitor' or 'gc' or '
        group = params.user_group
   )
 
+  if name == "proxy":
+    # create proxy.properties file
+    PropertiesFile(params.proxy_conf,
+                   properties = params.config['configurations']['proxy'],
+                   owner = params.accumulo_user,
+                   group = params.user_group
+    )
+
   # create host files
   accumulo_StaticFile( 'masters')
   accumulo_StaticFile( 'slaves')

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/package/scripts/accumulo_proxy.py
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/package/scripts/accumulo_proxy.py b/app-packages/accumulo/package/scripts/accumulo_proxy.py
new file mode 100644
index 0000000..b988fbd
--- /dev/null
+++ b/app-packages/accumulo/package/scripts/accumulo_proxy.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+"""
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+"""
+
+from accumulo_script import AccumuloScript
+
+if __name__ == "__main__":
+  AccumuloScript('proxy').execute()

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/package/scripts/accumulo_service.py
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/package/scripts/accumulo_service.py b/app-packages/accumulo/package/scripts/accumulo_service.py
index ca21cc8..b7ce2a1 100644
--- a/app-packages/accumulo/package/scripts/accumulo_service.py
+++ b/app-packages/accumulo/package/scripts/accumulo_service.py
@@ -30,7 +30,10 @@ def accumulo_service( name,
     pid_exists = format("ls {pid_file} >/dev/null 2>&1 && ps `cat {pid_file}` >/dev/null 2>&1")
 
     if action == 'start':
-      daemon_cmd = format("{daemon_script} {role} --address {params.hostname} > {log_dir}/accumulo-{accumulo_user}-{role}.out 2>{log_dir}/accumulo-{accumulo_user}-{role}.err & echo $! > {pid_file}")
+      if role == 'proxy':
+        daemon_cmd = format("{daemon_script} {role} -p {params.proxy_conf} > {log_dir}/accumulo-{accumulo_user}-{role}.out 2>{log_dir}/accumulo-{accumulo_user}-{role}.err & echo $! > {pid_file}")
+      else:
+        daemon_cmd = format("{daemon_script} {role} --address {params.hostname} > {log_dir}/accumulo-{accumulo_user}-{role}.out 2>{log_dir}/accumulo-{accumulo_user}-{role}.err & echo $! > {pid_file}")
       Execute ( daemon_cmd,
         not_if=pid_exists,
         user=params.accumulo_user

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/package/scripts/params.py b/app-packages/accumulo/package/scripts/params.py
index 9e6e8dd..981d3e0 100644
--- a/app-packages/accumulo/package/scripts/params.py
+++ b/app-packages/accumulo/package/scripts/params.py
@@ -48,6 +48,7 @@ accumulo_root = config['configurations']['global']['app_root']
 conf_dir = format("{accumulo_root}/conf")
 log_dir = config['configurations']['global']['app_log_dir']
 daemon_script = format("{accumulo_root}/bin/accumulo")
+proxy_conf = format("{conf_dir}/proxy.properties")
 
 # accumulo monitor certificate properties
 monitor_security_enabled = config['configurations']['global']['monitor_protocol'] == "https"

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/pom.xml
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/pom.xml b/app-packages/accumulo/pom.xml
index 611940c..8ac7f27 100644
--- a/app-packages/accumulo/pom.xml
+++ b/app-packages/accumulo/pom.xml
@@ -283,6 +283,18 @@
     </dependency>
     <dependency>
       <groupId>org.apache.accumulo</groupId>
+      <artifactId>accumulo-proxy</artifactId>
+      <version>${accumulo.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.thrift</groupId>
+      <artifactId>libthrift</artifactId>
+      <version>0.9.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.accumulo</groupId>
       <artifactId>accumulo-test</artifactId>
       <scope>test</scope>
     </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/resources-default.json
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/resources-default.json b/app-packages/accumulo/resources-default.json
index f0923f2..90cbf3f 100644
--- a/app-packages/accumulo/resources-default.json
+++ b/app-packages/accumulo/resources-default.json
@@ -33,6 +33,11 @@
       "yarn.role.priority": "5",
       "yarn.component.instances": "1",
       "yarn.memory": "256"
+    },
+    "ACCUMULO_PROXY": {
+      "yarn.role.priority": "6",
+      "yarn.component.instances": "1",
+      "yarn.memory": "128"
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/src/test/groovy/org/apache/slider/funtest/accumulo/AccumuloBasicIT.groovy
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/src/test/groovy/org/apache/slider/funtest/accumulo/AccumuloBasicIT.groovy b/app-packages/accumulo/src/test/groovy/org/apache/slider/funtest/accumulo/AccumuloBasicIT.groovy
index f1e1899..5f16d17 100644
--- a/app-packages/accumulo/src/test/groovy/org/apache/slider/funtest/accumulo/AccumuloBasicIT.groovy
+++ b/app-packages/accumulo/src/test/groovy/org/apache/slider/funtest/accumulo/AccumuloBasicIT.groovy
@@ -26,7 +26,6 @@ import org.apache.hadoop.security.UserGroupInformation
 import org.apache.hadoop.security.alias.CredentialProvider
 import org.apache.hadoop.security.alias.CredentialProviderFactory
 import org.apache.hadoop.registry.client.types.ServiceRecord
-import org.apache.slider.accumulo.CustomAuthenticator
 import org.apache.slider.api.ClusterDescription
 import org.apache.slider.client.SliderClient
 import org.apache.slider.common.SliderKeys
@@ -116,6 +115,18 @@ class AccumuloBasicIT extends AccumuloAgentCommandTestBase {
     return "test_accumulo_basic"
   }
 
+  protected Map<String, Integer> getRoleMap() {
+    // must match the values in src/test/resources/resources.json
+    return [
+      "ACCUMULO_MASTER" : 1,
+      "ACCUMULO_TSERVER" : 2,
+      "ACCUMULO_MONITOR": 1,
+      "ACCUMULO_GC": 0,
+      "ACCUMULO_TRACER" : 0,
+      "ACCUMULO_PROXY" : 0
+    ];
+  }
+
   @Test
   public void testAccumuloClusterCreate() throws Throwable {
 
@@ -136,15 +147,6 @@ class AccumuloBasicIT extends AccumuloAgentCommandTestBase {
 
     ensureApplicationIsUp(getClusterName())
 
-    // must match the values in src/test/resources/resources.json
-    Map<String, Integer> roleMap = [
-      "ACCUMULO_MASTER" : 1,
-      "ACCUMULO_TSERVER" : 2,
-      "ACCUMULO_MONITOR": 1,
-      "ACCUMULO_GC": 0,
-      "ACCUMULO_TRACER" : 0
-    ];
-
     //get a slider client against the cluster
     SliderClient sliderClient = bondToCluster(SLIDER_CONFIG, getClusterName())
     ClusterDescription cd = sliderClient.clusterDescription
@@ -153,7 +155,7 @@ class AccumuloBasicIT extends AccumuloAgentCommandTestBase {
     log.info("Connected via Client {}", sliderClient.toString())
 
     //wait for the role counts to be reached
-    waitForRoleCount(sliderClient, roleMap, ACCUMULO_LAUNCH_WAIT_TIME)
+    waitForRoleCount(sliderClient, getRoleMap(), ACCUMULO_LAUNCH_WAIT_TIME)
 
     sleep(ACCUMULO_GO_LIVE_TIME)
 
@@ -165,18 +167,26 @@ class AccumuloBasicIT extends AccumuloAgentCommandTestBase {
     return "Create a working Accumulo cluster $clusterName"
   }
 
+  public static PublishedConfiguration getExport(SliderClient sliderClient,
+                                                 String clusterName,
+                                                 String exportName) {
+    String path = servicePath(currentUser(),
+      SliderKeys.APP_TYPE,
+      clusterName);
+    ServiceRecord instance = sliderClient.resolve(path)
+    RegistryRetriever retriever = new RegistryRetriever(instance)
+    PublishedConfiguration configuration = retriever.retrieveConfiguration(
+      retriever.getConfigurations(true), exportName, true)
+    return configuration
+  }
+
   public static String getMonitorUrl(SliderClient sliderClient, String clusterName) {
     int tries = 5
     Exception caught;
     while (true) {
       try {
-        String path = servicePath(currentUser(),
-            SliderKeys.APP_TYPE,
-            clusterName);
-        ServiceRecord instance = sliderClient.resolve(path)
-        RegistryRetriever retriever = new RegistryRetriever(instance)
-        PublishedConfiguration configuration = retriever.retrieveConfiguration(
-          retriever.getConfigurations(true), "quicklinks", true)
+        PublishedConfiguration configuration = getExport(sliderClient,
+          clusterName, "quicklinks")
 
         // must match name set in metainfo.xml
         String monitorUrl = configuration.entries.get("org.apache.slider.monitor")

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/src/test/groovy/org/apache/slider/funtest/accumulo/AccumuloProxyIT.groovy
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/src/test/groovy/org/apache/slider/funtest/accumulo/AccumuloProxyIT.groovy b/app-packages/accumulo/src/test/groovy/org/apache/slider/funtest/accumulo/AccumuloProxyIT.groovy
new file mode 100644
index 0000000..730355f
--- /dev/null
+++ b/app-packages/accumulo/src/test/groovy/org/apache/slider/funtest/accumulo/AccumuloProxyIT.groovy
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.slider.funtest.accumulo
+
+import groovy.util.logging.Slf4j
+import org.apache.accumulo.proxy.TestProxyClient
+import org.apache.accumulo.proxy.thrift.AccumuloProxy
+import org.apache.accumulo.proxy.thrift.ColumnUpdate
+import org.apache.accumulo.proxy.thrift.TimeType
+import org.apache.slider.api.ClusterDescription
+import org.apache.slider.client.SliderClient
+import org.apache.slider.core.registry.docstore.PublishedConfiguration
+
+import java.nio.ByteBuffer
+
+@Slf4j
+class AccumuloProxyIT extends AccumuloBasicIT {
+  @Override
+  protected Map<String, Integer> getRoleMap() {
+    // must match the values in src/test/resources/resources.json
+    return [
+      "ACCUMULO_MASTER" : 1,
+      "ACCUMULO_TSERVER" : 1,
+      "ACCUMULO_MONITOR": 0,
+      "ACCUMULO_GC": 0,
+      "ACCUMULO_TRACER" : 0,
+      "ACCUMULO_PROXY" : 2
+    ];
+  }
+
+  @Override
+  protected String getAppResource() {
+    return sysprop("test.app.resources.dir") + "/resources_with_proxy.json"
+  }
+
+  @Override
+  public String getClusterName() {
+    return "test_proxy";
+  }
+
+  @Override
+  public String getDescription() {
+    return "Test proxy $clusterName"
+  }
+
+  def getProxies(SliderClient sliderClient, String clusterName, int expectedNumber) {
+    int tries = 5
+    Exception caught;
+    while (true) {
+      try {
+        PublishedConfiguration configuration = getExport(sliderClient,
+          clusterName, "componentinstancedata")
+
+        def proxies = configuration.entries.values()
+        if (proxies.size() != expectedNumber)
+          throw new IllegalStateException("Didn't find all proxies")
+        return proxies
+      } catch (Exception e) {
+        caught = e;
+        log.info("Got exception trying to read quicklinks")
+        if (tries-- == 0) {
+          break
+        }
+        sleep(20000)
+      }
+    }
+    throw caught;
+  }
+
+  @Override
+  public void clusterLoadOperations(ClusterDescription cd, SliderClient sliderClient) {
+    def proxies = getProxies(sliderClient, getClusterName(), 2)
+    for (int i = 0; i < proxies.size(); i++) {
+      log.info("Checking proxy " + proxies[i])
+      def hostPort = proxies[i].split(":")
+
+      // create proxy client
+      AccumuloProxy.Client client = new TestProxyClient(hostPort[0],
+        hostPort[1].toInteger()).proxy()
+      ByteBuffer token = client.login("root",
+        Collections.singletonMap("password", PASSWORD))
+
+      // verify table list before
+      String tableName = "table" + i
+      Set<String> tablesBefore = client.listTables(token)
+      assertFalse(tablesBefore.contains(tableName))
+
+      // create table, verify its contents, write entry, verify again
+      client.createTable(token, tableName, true, TimeType.MILLIS)
+      String scanner = client.createScanner(token, tableName, null)
+      assertFalse(client.hasNext(scanner))
+      client.updateAndFlush(token, tableName, createUpdate("row1", "cf1",
+        "cq1", "val1"))
+      scanner = client.createScanner(token, tableName, null)
+      assertTrue(client.hasNext(scanner))
+      client.nextEntry(scanner)
+      assertFalse(client.hasNext(scanner))
+
+      // verify table list after
+      Set<String> tablesAfter = client.listTables(token)
+      assertTrue(tablesAfter.contains(tableName))
+      assertEquals(tablesBefore.size() + 1, tablesAfter.size())
+    }
+  }
+
+  def createUpdate(String row, String cf, String cq, String value) {
+    ColumnUpdate update = new ColumnUpdate(wrap(cf), wrap(cq));
+    update.setValue(value.getBytes());
+    return Collections.singletonMap(wrap(row), Collections.singletonList(update));
+  }
+
+  def wrap(String cf) {
+    return ByteBuffer.wrap(cf.getBytes("UTF-8"));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/src/test/resources/resources.json
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/src/test/resources/resources.json b/app-packages/accumulo/src/test/resources/resources.json
index 1c5dd97..f88a8d6 100644
--- a/app-packages/accumulo/src/test/resources/resources.json
+++ b/app-packages/accumulo/src/test/resources/resources.json
@@ -32,7 +32,12 @@
     "ACCUMULO_TRACER": {
       "yarn.role.priority": "5",
       "yarn.component.instances": "0",
-      "yarn.memory": "256"
+      "yarn.memory": "128"
+    },
+    "ACCUMULO_PROXY": {
+      "yarn.role.priority": "6",
+      "yarn.component.instances": "0",
+      "yarn.memory": "128"
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/src/test/resources/resources_with_client.json
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/src/test/resources/resources_with_client.json b/app-packages/accumulo/src/test/resources/resources_with_client.json
deleted file mode 100644
index 297a232..0000000
--- a/app-packages/accumulo/src/test/resources/resources_with_client.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "schema": "http://example.org/specification/v2.0.0",
-  "metadata": {
-  },
-  "global": {
-  },
-  "components": {
-    "ACCUMULO_MASTER": {
-      "yarn.role.priority": "1",
-      "yarn.component.instances": "1",
-      "yarn.memory": "256"
-    },
-    "slider-appmaster": {
-    },
-    "ACCUMULO_TSERVER": {
-      "yarn.role.priority": "2",
-      "yarn.component.instances": "2",
-      "yarn.memory": "256"
-    },
-    "ACCUMULO_MONITOR": {
-      "yarn.role.priority": "3",
-      "yarn.component.instances": "1",
-      "yarn.memory": "128"
-    },
-    "ACCUMULO_GC": {
-      "yarn.role.priority": "4",
-      "yarn.component.instances": "1",
-      "yarn.memory": "128"
-    },
-    "ACCUMULO_TRACER": {
-      "yarn.role.priority": "5",
-      "yarn.component.instances": "1",
-      "yarn.memory": "128"
-    },
-    "ACCUMULO_CLIENT": {
-      "yarn.role.priority": "6",
-      "yarn.component.instances": "0",
-      "yarn.memory": "128"
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/d91049a6/app-packages/accumulo/src/test/resources/resources_with_proxy.json
----------------------------------------------------------------------
diff --git a/app-packages/accumulo/src/test/resources/resources_with_proxy.json b/app-packages/accumulo/src/test/resources/resources_with_proxy.json
new file mode 100644
index 0000000..615782a
--- /dev/null
+++ b/app-packages/accumulo/src/test/resources/resources_with_proxy.json
@@ -0,0 +1,43 @@
+{
+  "schema": "http://example.org/specification/v2.0.0",
+  "metadata": {
+  },
+  "global": {
+    "yarn.log.include.patterns": "",
+    "yarn.log.exclude.patterns": ""
+  },
+  "components": {
+    "ACCUMULO_MASTER": {
+      "yarn.role.priority": "1",
+      "yarn.component.instances": "1",
+      "yarn.memory": "64"
+    },
+    "slider-appmaster": {
+    },
+    "ACCUMULO_TSERVER": {
+      "yarn.role.priority": "2",
+      "yarn.component.instances": "1",
+      "yarn.memory": "256"
+    },
+    "ACCUMULO_MONITOR": {
+      "yarn.role.priority": "3",
+      "yarn.component.instances": "0",
+      "yarn.memory": "64"
+    },
+    "ACCUMULO_GC": {
+      "yarn.role.priority": "4",
+      "yarn.component.instances": "0",
+      "yarn.memory": "128"
+    },
+    "ACCUMULO_TRACER": {
+      "yarn.role.priority": "5",
+      "yarn.component.instances": "0",
+      "yarn.memory": "128"
+    },
+    "ACCUMULO_PROXY": {
+      "yarn.role.priority": "6",
+      "yarn.component.instances": "2",
+      "yarn.memory": "128"
+    }
+  }
+}