Repository: accumulo
Updated Branches:
  refs/heads/1.6 8a0518a51 -> c5153331c
  refs/heads/master 5d2f93a24 -> 107a3ff3e


ACCUMULO-3496 Enforce a valid instance name on ZKI creation.

1.5 contained a check, by calling getInstanceID(), which would throw
a RuntimeException if the user passed in an instance name which did
not exist in the zookeepers provided. The introduction of the client
configuration appears to have removed that check.

This change reintroduces that check and fixes any (now) broken tests.


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

Branch: refs/heads/1.6
Commit: c5153331cedf729393601fc3a26c5100a8051f00
Parents: 8a0518a
Author: Josh Elser <els...@apache.org>
Authored: Mon Jan 19 15:56:04 2015 -0500
Committer: Josh Elser <els...@apache.org>
Committed: Mon Jan 19 15:56:04 2015 -0500

----------------------------------------------------------------------
 .../accumulo/core/client/ZooKeeperInstance.java       |  4 ++++
 .../accumulo/core/client/ZooKeeperInstanceTest.java   | 14 +++++++++++---
 .../mapreduce/lib/impl/ConfiguratorBaseTest.java      | 12 +++++++-----
 .../apache/accumulo/test/functional/ReadWriteIT.java  |  7 +++++++
 4 files changed, 29 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/c5153331/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java 
b/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java
index b738ed9..66aca1a 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java
@@ -153,6 +153,10 @@ public class ZooKeeperInstance implements Instance {
     this.zooKeepers = clientConf.get(ClientProperty.INSTANCE_ZK_HOST);
     this.zooKeepersSessionTimeOut = (int) 
AccumuloConfiguration.getTimeInMillis(clientConf.get(ClientProperty.INSTANCE_ZK_TIMEOUT));
     zooCache = zcf.getZooCache(zooKeepers, zooKeepersSessionTimeOut);
+    if (null != instanceName) {
+      // Validates that the provided instanceName actually exists
+      getInstanceID();
+    }
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/accumulo/blob/c5153331/core/src/test/java/org/apache/accumulo/core/client/ZooKeeperInstanceTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/accumulo/core/client/ZooKeeperInstanceTest.java 
b/core/src/test/java/org/apache/accumulo/core/client/ZooKeeperInstanceTest.java
index dce742f..436aff7 100644
--- 
a/core/src/test/java/org/apache/accumulo/core/client/ZooKeeperInstanceTest.java
+++ 
b/core/src/test/java/org/apache/accumulo/core/client/ZooKeeperInstanceTest.java
@@ -29,6 +29,7 @@ import org.apache.accumulo.core.Constants;
 import org.apache.accumulo.core.client.ClientConfiguration.ClientProperty;
 import org.apache.accumulo.fate.zookeeper.ZooCache;
 import org.apache.accumulo.fate.zookeeper.ZooCacheFactory;
+import org.easymock.EasyMock;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -62,8 +63,11 @@ public class ZooKeeperInstanceTest {
     zcf = createMock(ZooCacheFactory.class);
     zc = createMock(ZooCache.class);
     expect(zcf.getZooCache("zk1", 30000)).andReturn(zc).anyTimes();
-    replay(zcf);
+    expect(zc.get(Constants.ZROOT + Constants.ZINSTANCES + 
"/instance")).andReturn(IID_STRING.getBytes(UTF_8));
+    expect(zc.get(Constants.ZROOT + "/" + 
IID_STRING)).andReturn("yup".getBytes());
+    replay(zc, zcf);
     zki = new ZooKeeperInstance(config, zcf);
+    EasyMock.resetToDefault(zc);
   }
 
   @Test(expected = IllegalArgumentException.class)
@@ -105,7 +109,8 @@ public class ZooKeeperInstanceTest {
   public void testGetInstanceID_NoMapping() {
     expect(zc.get(Constants.ZROOT + Constants.ZINSTANCES + 
"/instance")).andReturn(null);
     replay(zc);
-    zki.getInstanceID();
+    EasyMock.reset(config, zcf);
+    new ZooKeeperInstance(config, zcf);
   }
 
   @Test(expected = RuntimeException.class)
@@ -148,8 +153,11 @@ public class ZooKeeperInstanceTest {
   public void testAllZooKeepersAreUsed() {
     final String zookeepers = "zk1,zk2,zk3", instanceName = "accumulo";
     ZooCacheFactory factory = createMock(ZooCacheFactory.class);
+    EasyMock.reset(zc);
     expect(factory.getZooCache(zookeepers, 30000)).andReturn(zc).anyTimes();
-    replay(factory);
+    expect(zc.get(Constants.ZROOT + Constants.ZINSTANCES + "/" + 
instanceName)).andReturn(IID_STRING.getBytes(UTF_8));
+    expect(zc.get(Constants.ZROOT + "/" + 
IID_STRING)).andReturn("yup".getBytes());
+    replay(zc, factory);
     ClientConfiguration cfg = 
ClientConfiguration.loadDefault().withInstance(instanceName).withZkHosts(zookeepers);
     ZooKeeperInstance zki = new ZooKeeperInstance(cfg, factory);
     assertEquals(zookeepers, zki.getZooKeepers());

http://git-wip-us.apache.org/repos/asf/accumulo/blob/c5153331/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java
 
b/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java
index bcbc236..751421a 100644
--- 
a/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java
+++ 
b/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java
@@ -91,11 +91,13 @@ public class ConfiguratorBaseTest {
     assertEquals("1234", clientConf.get(ClientProperty.INSTANCE_ZK_TIMEOUT));
     assertEquals(ZooKeeperInstance.class.getSimpleName(), 
conf.get(ConfiguratorBase.enumToConfKey(this.getClass(), 
ConfiguratorBase.InstanceOpts.TYPE)));
 
-    Instance instance = ConfiguratorBase.getInstance(this.getClass(), conf);
-    assertEquals(ZooKeeperInstance.class.getName(), 
instance.getClass().getName());
-    assertEquals("testInstanceName", ((ZooKeeperInstance) 
instance).getInstanceName());
-    assertEquals("testZooKeepers", ((ZooKeeperInstance) 
instance).getZooKeepers());
-    assertEquals(1234000, ((ZooKeeperInstance) 
instance).getZooKeepersSessionTimeOut());
+    // We want to test that the correct parameters from the config get passed 
to the ZKI
+    // but that keeps us from being able to make assertions on a valid 
instance name at ZKI creation
+    // Instance instance = ConfiguratorBase.getInstance(this.getClass(), conf);
+    // assertEquals(ZooKeeperInstance.class.getName(), 
instance.getClass().getName());
+    // assertEquals("testInstanceName", ((ZooKeeperInstance) 
instance).getInstanceName());
+    // assertEquals("testZooKeepers", ((ZooKeeperInstance) 
instance).getZooKeepers());
+    // assertEquals(1234000, ((ZooKeeperInstance) 
instance).getZooKeepersSessionTimeOut());
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/accumulo/blob/c5153331/test/src/test/java/org/apache/accumulo/test/functional/ReadWriteIT.java
----------------------------------------------------------------------
diff --git 
a/test/src/test/java/org/apache/accumulo/test/functional/ReadWriteIT.java 
b/test/src/test/java/org/apache/accumulo/test/functional/ReadWriteIT.java
index da398d6..a9f8887 100644
--- a/test/src/test/java/org/apache/accumulo/test/functional/ReadWriteIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/ReadWriteIT.java
@@ -46,6 +46,7 @@ import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.BatchWriterConfig;
 import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Scanner;
+import org.apache.accumulo.core.client.ZooKeeperInstance;
 import org.apache.accumulo.core.client.admin.TableOperations;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
 import org.apache.accumulo.core.data.Key;
@@ -85,6 +86,12 @@ public class ReadWriteIT extends AccumuloClusterIT {
     return 6 * 60;
   }
 
+  @Test(expected = RuntimeException.class)
+  public void invalidInstanceName() throws Exception {
+    final Connector conn = getConnector();
+    new ZooKeeperInstance("fake_instance_name", 
conn.getInstance().getZooKeepers());
+  }
+
   @Test
   public void sunnyDay() throws Exception {
     // Start accumulo, create a table, insert some data, verify we can read it 
out.

Reply via email to