You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by el...@apache.org on 2015/05/07 23:05:46 UTC

[1/3] accumulo git commit: ACCUMULO-3779 Restore proper use zookeepers and add clientconf warning.

Repository: accumulo
Updated Branches:
  refs/heads/1.7 b932755e0 -> a8ef75ee0
  refs/heads/master bc3dc3b8d -> 68b8cd7c9


ACCUMULO-3779 Restore proper use zookeepers and add clientconf warning.

Warn when we don't find a client configuration file to use in
any of the normal locations and ensure that use of ZK goes from
shell option, to client conf to accumulo site.


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

Branch: refs/heads/1.7
Commit: a8ef75ee024e42a12cc8993b1c326c6575979e51
Parents: b932755
Author: Josh Elser <el...@apache.org>
Authored: Thu May 7 16:01:45 2015 -0400
Committer: Josh Elser <el...@apache.org>
Committed: Thu May 7 17:05:07 2015 -0400

----------------------------------------------------------------------
 .../core/client/ClientConfiguration.java        |  4 ++
 .../java/org/apache/accumulo/shell/Shell.java   | 40 +++++++++++++-------
 .../apache/accumulo/shell/ShellOptionsJC.java   | 11 ++++++
 .../apache/accumulo/shell/ShellConfigTest.java  | 36 ++++++++++++++++++
 .../accumulo/shell/ShellSetInstanceTest.java    | 15 +++++---
 5 files changed, 87 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java b/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
index f008ab7..ed99645 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
@@ -222,6 +222,10 @@ public class ClientConfiguration extends CompositeConfiguration {
           configs.add(new ClientConfiguration(conf));
         }
       }
+      // We couldn't find the client configuration anywhere
+      if (configs.isEmpty()) {
+        log.warn("Found no client.conf in default paths. Using default client configuration values.");
+      }
       return new ClientConfiguration(configs);
     } catch (ConfigurationException e) {
       throw new IllegalStateException("Error loading client configuration", e);

http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/shell/src/main/java/org/apache/accumulo/shell/Shell.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/accumulo/shell/Shell.java b/shell/src/main/java/org/apache/accumulo/shell/Shell.java
index 2db2e63..37856ad 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/Shell.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/Shell.java
@@ -456,27 +456,41 @@ public class Shell extends ShellOptions implements KeywordExecutable {
     }
   }
 
+  /**
+   * Get the ZooKeepers. Use the value passed in (if there was one), then fall back to the ClientConf, finally trying the accumulo-site.xml.
+   *
+   * @param keepers
+   *          ZooKeepers passed to the shell
+   * @param clientConfig
+   *          ClientConfiguration instance
+   * @return The ZooKeepers to connect to
+   */
+  static String getZooKeepers(String keepers, ClientConfiguration clientConfig, AccumuloConfiguration conf) {
+    if (null != keepers) {
+      return keepers;
+    }
+
+    if (clientConfig.containsKey(ClientProperty.INSTANCE_ZK_HOST.getKey())) {
+      return clientConfig.get(ClientProperty.INSTANCE_ZK_HOST);
+    }
+
+    return conf.get(Property.INSTANCE_ZK_HOST);
+  }
+
   /*
    * Takes instanceName and keepers as separate arguments, rather than just packaged into the clientConfig, so that we can fail over to accumulo-site.xml or
    * HDFS config if they're unspecified.
    */
-  private static Instance getZooInstance(String instanceName, String keepers, ClientConfiguration clientConfig) {
+  private static Instance getZooInstance(String instanceName, String keepersOption, ClientConfiguration clientConfig) {
     UUID instanceId = null;
     if (instanceName == null) {
       instanceName = clientConfig.get(ClientProperty.INSTANCE_NAME);
     }
-    if (keepers == null) {
-      keepers = clientConfig.get(ClientProperty.INSTANCE_ZK_HOST);
-    }
-    if (instanceName == null || keepers == null) {
-      AccumuloConfiguration conf = SiteConfiguration.getInstance(ClientContext.convertClientConfig(clientConfig));
-      if (instanceName == null) {
-        Path instanceDir = new Path(VolumeConfiguration.getVolumeUris(conf)[0], "instance_id");
-        instanceId = UUID.fromString(ZooUtil.getInstanceIDFromHdfs(instanceDir, conf));
-      }
-      if (keepers == null) {
-        keepers = conf.get(Property.INSTANCE_ZK_HOST);
-      }
+    AccumuloConfiguration conf = SiteConfiguration.getInstance(ClientContext.convertClientConfig(clientConfig));
+    String keepers = getZooKeepers(keepersOption, clientConfig, conf);
+    if (instanceName == null) {
+      Path instanceDir = new Path(VolumeConfiguration.getVolumeUris(conf)[0], "instance_id");
+      instanceId = UUID.fromString(ZooUtil.getInstanceIDFromHdfs(instanceDir, conf));
     }
     if (instanceId != null) {
       return new ZooKeeperInstance(clientConfig.withInstance(instanceId).withZkHosts(keepers));

http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java b/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
index 7e6445d..92ea1a5 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
@@ -26,8 +26,12 @@ import java.util.TreeMap;
 
 import org.apache.accumulo.core.client.ClientConfiguration;
 import org.apache.accumulo.core.client.ClientConfiguration.ClientProperty;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
 import org.apache.accumulo.core.client.security.tokens.KerberosToken;
+import org.apache.accumulo.core.conf.AccumuloConfiguration;
+import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.core.conf.SiteConfiguration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.slf4j.Logger;
@@ -304,6 +308,13 @@ public class ShellOptionsJC {
     if (useSasl()) {
       clientConfig.setProperty(ClientProperty.INSTANCE_RPC_SASL_ENABLED, "true");
     }
+
+    // Automatically try to add in the proper ZK from accumulo-site for backwards compat.
+    if (!clientConfig.containsKey(ClientProperty.INSTANCE_ZK_HOST.getKey())) {
+      AccumuloConfiguration siteConf = SiteConfiguration.getInstance(ClientContext.convertClientConfig(clientConfig));
+      clientConfig.withZkHosts(siteConf.get(Property.INSTANCE_ZK_HOST));
+    }
+
     return clientConfig;
   }
 

http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java b/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java
index 90b3028..bbeef56 100644
--- a/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java
+++ b/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.accumulo.shell;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -25,10 +26,16 @@ import java.io.FileInputStream;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.nio.file.Files;
+import java.util.HashMap;
+import java.util.Map;
 
 import jline.console.ConsoleReader;
 
+import org.apache.accumulo.core.client.ClientConfiguration;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
+import org.apache.accumulo.core.conf.AccumuloConfiguration;
+import org.apache.accumulo.core.conf.ConfigurationCopy;
+import org.apache.accumulo.core.conf.Property;
 import org.apache.accumulo.shell.ShellTest.TestOutputStream;
 import org.apache.log4j.Level;
 import org.junit.After;
@@ -111,4 +118,33 @@ public class ShellConfigTest {
     assertFalse(shell.config(args("--fake", "-tc", PasswordToken.class.getCanonicalName(), "-l", "password=foo", "-p", "bar")));
     assertTrue(output.get().contains(ParameterException.class.getCanonicalName()));
   }
+
+  @Test
+  public void testZooKeeperHostFallBackToSite() throws Exception {
+    ClientConfiguration clientConfig = new ClientConfiguration();
+    Map<String,String> data = new HashMap<>();
+    data.put(Property.INSTANCE_ZK_HOST.getKey(), "site_hostname");
+    AccumuloConfiguration conf = new ConfigurationCopy(data);
+    assertEquals("site_hostname", Shell.getZooKeepers(null, clientConfig, conf));
+  }
+
+  @Test
+  public void testZooKeeperHostFromClientConfig() throws Exception {
+    ClientConfiguration clientConfig = new ClientConfiguration();
+    clientConfig.withZkHosts("cc_hostname");
+    Map<String,String> data = new HashMap<>();
+    data.put(Property.INSTANCE_ZK_HOST.getKey(), "site_hostname");
+    AccumuloConfiguration conf = new ConfigurationCopy(data);
+    assertEquals("cc_hostname", Shell.getZooKeepers(null, clientConfig, conf));
+  }
+
+  @Test
+  public void testZooKeeperHostFromOption() throws Exception {
+    ClientConfiguration clientConfig = new ClientConfiguration();
+    clientConfig.withZkHosts("cc_hostname");
+    Map<String,String> data = new HashMap<>();
+    data.put(Property.INSTANCE_ZK_HOST.getKey(), "site_hostname");
+    AccumuloConfiguration conf = new ConfigurationCopy(data);
+    assertEquals("opt_hostname", Shell.getZooKeepers("opt_hostname", clientConfig, conf));
+  }
 }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java b/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
index 501b502..1bf03b8 100644
--- a/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
+++ b/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
@@ -30,6 +30,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
@@ -179,18 +180,14 @@ public class ShellSetInstanceTest {
       expect(clientConf.get(ClientProperty.INSTANCE_NAME)).andReturn(null);
     }
 
-    if (!onlyHosts) {
-      expect(clientConf.get(ClientProperty.INSTANCE_ZK_HOST)).andReturn(null);
-    }
-
     mockStatic(ConfigSanityCheck.class);
     ConfigSanityCheck.validate(EasyMock.<AccumuloConfiguration> anyObject());
     expectLastCall().atLeastOnce();
     replay(ConfigSanityCheck.class);
 
     if (!onlyHosts) {
-      expect(clientConf.containsKey(Property.INSTANCE_ZK_HOST.getKey())).andReturn(true).atLeastOnce();
-      expect(clientConf.getString(Property.INSTANCE_ZK_HOST.getKey())).andReturn("host1,host2").atLeastOnce();
+      expect(clientConf.containsKey(ClientProperty.INSTANCE_ZK_HOST.getKey())).andReturn(true).atLeastOnce();
+      expect(clientConf.get(ClientProperty.INSTANCE_ZK_HOST)).andReturn("host1,host2").atLeastOnce();
       expect(clientConf.withZkHosts("host1,host2")).andReturn(clientConf);
     }
     if (!onlyInstance) {
@@ -240,9 +237,13 @@ public class ShellSetInstanceTest {
     expect(opts.isFake()).andReturn(false);
     expect(opts.getClientConfiguration()).andReturn(clientConf);
     expect(opts.isHdfsZooInstance()).andReturn(false);
+    expect(clientConf.getKeys()).andReturn(Arrays.asList(ClientProperty.INSTANCE_NAME.getKey(), ClientProperty.INSTANCE_ZK_HOST.getKey()).iterator());
+    expect(clientConf.getString(Property.GENERAL_SECURITY_CREDENTIAL_PROVIDER_PATHS.getKey())).andReturn(null);
     if (dashZ) {
       expect(clientConf.withInstance("foo")).andReturn(clientConf);
+      expect(clientConf.getString(ClientProperty.INSTANCE_NAME.getKey())).andReturn("foo");
       expect(clientConf.withZkHosts("host1,host2")).andReturn(clientConf);
+      expect(clientConf.getString(ClientProperty.INSTANCE_ZK_HOST.getKey())).andReturn("host1,host2");
       List<String> zl = new java.util.ArrayList<String>();
       zl.add("foo");
       zl.add("host1,host2");
@@ -250,7 +251,9 @@ public class ShellSetInstanceTest {
       expectLastCall().anyTimes();
     } else {
       expect(clientConf.withInstance("bar")).andReturn(clientConf);
+      expect(clientConf.getString(ClientProperty.INSTANCE_NAME.getKey())).andReturn("bar");
       expect(clientConf.withZkHosts("host3,host4")).andReturn(clientConf);
+      expect(clientConf.getString(ClientProperty.INSTANCE_ZK_HOST.getKey())).andReturn("host3,host4");
       expect(opts.getZooKeeperInstance()).andReturn(Collections.<String> emptyList());
       expect(opts.getZooKeeperInstanceName()).andReturn("bar");
       expect(opts.getZooKeeperHosts()).andReturn("host3,host4");


[3/3] accumulo git commit: Merge branch '1.7'

Posted by el...@apache.org.
Merge branch '1.7'


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/68b8cd7c
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/68b8cd7c
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/68b8cd7c

Branch: refs/heads/master
Commit: 68b8cd7c9169c1d2e8eabfb84c9d977c8acc8973
Parents: bc3dc3b a8ef75e
Author: Josh Elser <el...@apache.org>
Authored: Thu May 7 17:05:34 2015 -0400
Committer: Josh Elser <el...@apache.org>
Committed: Thu May 7 17:05:34 2015 -0400

----------------------------------------------------------------------
 .../core/client/ClientConfiguration.java        |  4 ++
 .../java/org/apache/accumulo/shell/Shell.java   | 40 +++++++++++++-------
 .../apache/accumulo/shell/ShellOptionsJC.java   | 11 ++++++
 .../apache/accumulo/shell/ShellConfigTest.java  | 36 ++++++++++++++++++
 .../accumulo/shell/ShellSetInstanceTest.java    | 15 +++++---
 5 files changed, 87 insertions(+), 19 deletions(-)
----------------------------------------------------------------------



[2/3] accumulo git commit: ACCUMULO-3779 Restore proper use zookeepers and add clientconf warning.

Posted by el...@apache.org.
ACCUMULO-3779 Restore proper use zookeepers and add clientconf warning.

Warn when we don't find a client configuration file to use in
any of the normal locations and ensure that use of ZK goes from
shell option, to client conf to accumulo site.


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

Branch: refs/heads/master
Commit: a8ef75ee024e42a12cc8993b1c326c6575979e51
Parents: b932755
Author: Josh Elser <el...@apache.org>
Authored: Thu May 7 16:01:45 2015 -0400
Committer: Josh Elser <el...@apache.org>
Committed: Thu May 7 17:05:07 2015 -0400

----------------------------------------------------------------------
 .../core/client/ClientConfiguration.java        |  4 ++
 .../java/org/apache/accumulo/shell/Shell.java   | 40 +++++++++++++-------
 .../apache/accumulo/shell/ShellOptionsJC.java   | 11 ++++++
 .../apache/accumulo/shell/ShellConfigTest.java  | 36 ++++++++++++++++++
 .../accumulo/shell/ShellSetInstanceTest.java    | 15 +++++---
 5 files changed, 87 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java b/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
index f008ab7..ed99645 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
@@ -222,6 +222,10 @@ public class ClientConfiguration extends CompositeConfiguration {
           configs.add(new ClientConfiguration(conf));
         }
       }
+      // We couldn't find the client configuration anywhere
+      if (configs.isEmpty()) {
+        log.warn("Found no client.conf in default paths. Using default client configuration values.");
+      }
       return new ClientConfiguration(configs);
     } catch (ConfigurationException e) {
       throw new IllegalStateException("Error loading client configuration", e);

http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/shell/src/main/java/org/apache/accumulo/shell/Shell.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/accumulo/shell/Shell.java b/shell/src/main/java/org/apache/accumulo/shell/Shell.java
index 2db2e63..37856ad 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/Shell.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/Shell.java
@@ -456,27 +456,41 @@ public class Shell extends ShellOptions implements KeywordExecutable {
     }
   }
 
+  /**
+   * Get the ZooKeepers. Use the value passed in (if there was one), then fall back to the ClientConf, finally trying the accumulo-site.xml.
+   *
+   * @param keepers
+   *          ZooKeepers passed to the shell
+   * @param clientConfig
+   *          ClientConfiguration instance
+   * @return The ZooKeepers to connect to
+   */
+  static String getZooKeepers(String keepers, ClientConfiguration clientConfig, AccumuloConfiguration conf) {
+    if (null != keepers) {
+      return keepers;
+    }
+
+    if (clientConfig.containsKey(ClientProperty.INSTANCE_ZK_HOST.getKey())) {
+      return clientConfig.get(ClientProperty.INSTANCE_ZK_HOST);
+    }
+
+    return conf.get(Property.INSTANCE_ZK_HOST);
+  }
+
   /*
    * Takes instanceName and keepers as separate arguments, rather than just packaged into the clientConfig, so that we can fail over to accumulo-site.xml or
    * HDFS config if they're unspecified.
    */
-  private static Instance getZooInstance(String instanceName, String keepers, ClientConfiguration clientConfig) {
+  private static Instance getZooInstance(String instanceName, String keepersOption, ClientConfiguration clientConfig) {
     UUID instanceId = null;
     if (instanceName == null) {
       instanceName = clientConfig.get(ClientProperty.INSTANCE_NAME);
     }
-    if (keepers == null) {
-      keepers = clientConfig.get(ClientProperty.INSTANCE_ZK_HOST);
-    }
-    if (instanceName == null || keepers == null) {
-      AccumuloConfiguration conf = SiteConfiguration.getInstance(ClientContext.convertClientConfig(clientConfig));
-      if (instanceName == null) {
-        Path instanceDir = new Path(VolumeConfiguration.getVolumeUris(conf)[0], "instance_id");
-        instanceId = UUID.fromString(ZooUtil.getInstanceIDFromHdfs(instanceDir, conf));
-      }
-      if (keepers == null) {
-        keepers = conf.get(Property.INSTANCE_ZK_HOST);
-      }
+    AccumuloConfiguration conf = SiteConfiguration.getInstance(ClientContext.convertClientConfig(clientConfig));
+    String keepers = getZooKeepers(keepersOption, clientConfig, conf);
+    if (instanceName == null) {
+      Path instanceDir = new Path(VolumeConfiguration.getVolumeUris(conf)[0], "instance_id");
+      instanceId = UUID.fromString(ZooUtil.getInstanceIDFromHdfs(instanceDir, conf));
     }
     if (instanceId != null) {
       return new ZooKeeperInstance(clientConfig.withInstance(instanceId).withZkHosts(keepers));

http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java b/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
index 7e6445d..92ea1a5 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
@@ -26,8 +26,12 @@ import java.util.TreeMap;
 
 import org.apache.accumulo.core.client.ClientConfiguration;
 import org.apache.accumulo.core.client.ClientConfiguration.ClientProperty;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
 import org.apache.accumulo.core.client.security.tokens.KerberosToken;
+import org.apache.accumulo.core.conf.AccumuloConfiguration;
+import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.core.conf.SiteConfiguration;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.slf4j.Logger;
@@ -304,6 +308,13 @@ public class ShellOptionsJC {
     if (useSasl()) {
       clientConfig.setProperty(ClientProperty.INSTANCE_RPC_SASL_ENABLED, "true");
     }
+
+    // Automatically try to add in the proper ZK from accumulo-site for backwards compat.
+    if (!clientConfig.containsKey(ClientProperty.INSTANCE_ZK_HOST.getKey())) {
+      AccumuloConfiguration siteConf = SiteConfiguration.getInstance(ClientContext.convertClientConfig(clientConfig));
+      clientConfig.withZkHosts(siteConf.get(Property.INSTANCE_ZK_HOST));
+    }
+
     return clientConfig;
   }
 

http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java b/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java
index 90b3028..bbeef56 100644
--- a/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java
+++ b/shell/src/test/java/org/apache/accumulo/shell/ShellConfigTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.accumulo.shell;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -25,10 +26,16 @@ import java.io.FileInputStream;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.nio.file.Files;
+import java.util.HashMap;
+import java.util.Map;
 
 import jline.console.ConsoleReader;
 
+import org.apache.accumulo.core.client.ClientConfiguration;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
+import org.apache.accumulo.core.conf.AccumuloConfiguration;
+import org.apache.accumulo.core.conf.ConfigurationCopy;
+import org.apache.accumulo.core.conf.Property;
 import org.apache.accumulo.shell.ShellTest.TestOutputStream;
 import org.apache.log4j.Level;
 import org.junit.After;
@@ -111,4 +118,33 @@ public class ShellConfigTest {
     assertFalse(shell.config(args("--fake", "-tc", PasswordToken.class.getCanonicalName(), "-l", "password=foo", "-p", "bar")));
     assertTrue(output.get().contains(ParameterException.class.getCanonicalName()));
   }
+
+  @Test
+  public void testZooKeeperHostFallBackToSite() throws Exception {
+    ClientConfiguration clientConfig = new ClientConfiguration();
+    Map<String,String> data = new HashMap<>();
+    data.put(Property.INSTANCE_ZK_HOST.getKey(), "site_hostname");
+    AccumuloConfiguration conf = new ConfigurationCopy(data);
+    assertEquals("site_hostname", Shell.getZooKeepers(null, clientConfig, conf));
+  }
+
+  @Test
+  public void testZooKeeperHostFromClientConfig() throws Exception {
+    ClientConfiguration clientConfig = new ClientConfiguration();
+    clientConfig.withZkHosts("cc_hostname");
+    Map<String,String> data = new HashMap<>();
+    data.put(Property.INSTANCE_ZK_HOST.getKey(), "site_hostname");
+    AccumuloConfiguration conf = new ConfigurationCopy(data);
+    assertEquals("cc_hostname", Shell.getZooKeepers(null, clientConfig, conf));
+  }
+
+  @Test
+  public void testZooKeeperHostFromOption() throws Exception {
+    ClientConfiguration clientConfig = new ClientConfiguration();
+    clientConfig.withZkHosts("cc_hostname");
+    Map<String,String> data = new HashMap<>();
+    data.put(Property.INSTANCE_ZK_HOST.getKey(), "site_hostname");
+    AccumuloConfiguration conf = new ConfigurationCopy(data);
+    assertEquals("opt_hostname", Shell.getZooKeepers("opt_hostname", clientConfig, conf));
+  }
 }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8ef75ee/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java b/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
index 501b502..1bf03b8 100644
--- a/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
+++ b/shell/src/test/java/org/apache/accumulo/shell/ShellSetInstanceTest.java
@@ -30,6 +30,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
@@ -179,18 +180,14 @@ public class ShellSetInstanceTest {
       expect(clientConf.get(ClientProperty.INSTANCE_NAME)).andReturn(null);
     }
 
-    if (!onlyHosts) {
-      expect(clientConf.get(ClientProperty.INSTANCE_ZK_HOST)).andReturn(null);
-    }
-
     mockStatic(ConfigSanityCheck.class);
     ConfigSanityCheck.validate(EasyMock.<AccumuloConfiguration> anyObject());
     expectLastCall().atLeastOnce();
     replay(ConfigSanityCheck.class);
 
     if (!onlyHosts) {
-      expect(clientConf.containsKey(Property.INSTANCE_ZK_HOST.getKey())).andReturn(true).atLeastOnce();
-      expect(clientConf.getString(Property.INSTANCE_ZK_HOST.getKey())).andReturn("host1,host2").atLeastOnce();
+      expect(clientConf.containsKey(ClientProperty.INSTANCE_ZK_HOST.getKey())).andReturn(true).atLeastOnce();
+      expect(clientConf.get(ClientProperty.INSTANCE_ZK_HOST)).andReturn("host1,host2").atLeastOnce();
       expect(clientConf.withZkHosts("host1,host2")).andReturn(clientConf);
     }
     if (!onlyInstance) {
@@ -240,9 +237,13 @@ public class ShellSetInstanceTest {
     expect(opts.isFake()).andReturn(false);
     expect(opts.getClientConfiguration()).andReturn(clientConf);
     expect(opts.isHdfsZooInstance()).andReturn(false);
+    expect(clientConf.getKeys()).andReturn(Arrays.asList(ClientProperty.INSTANCE_NAME.getKey(), ClientProperty.INSTANCE_ZK_HOST.getKey()).iterator());
+    expect(clientConf.getString(Property.GENERAL_SECURITY_CREDENTIAL_PROVIDER_PATHS.getKey())).andReturn(null);
     if (dashZ) {
       expect(clientConf.withInstance("foo")).andReturn(clientConf);
+      expect(clientConf.getString(ClientProperty.INSTANCE_NAME.getKey())).andReturn("foo");
       expect(clientConf.withZkHosts("host1,host2")).andReturn(clientConf);
+      expect(clientConf.getString(ClientProperty.INSTANCE_ZK_HOST.getKey())).andReturn("host1,host2");
       List<String> zl = new java.util.ArrayList<String>();
       zl.add("foo");
       zl.add("host1,host2");
@@ -250,7 +251,9 @@ public class ShellSetInstanceTest {
       expectLastCall().anyTimes();
     } else {
       expect(clientConf.withInstance("bar")).andReturn(clientConf);
+      expect(clientConf.getString(ClientProperty.INSTANCE_NAME.getKey())).andReturn("bar");
       expect(clientConf.withZkHosts("host3,host4")).andReturn(clientConf);
+      expect(clientConf.getString(ClientProperty.INSTANCE_ZK_HOST.getKey())).andReturn("host3,host4");
       expect(opts.getZooKeeperInstance()).andReturn(Collections.<String> emptyList());
       expect(opts.getZooKeeperInstanceName()).andReturn("bar");
       expect(opts.getZooKeeperHosts()).andReturn("host3,host4");