HDFS-13836. RBF: Handle mount table znode with null value. Contributed by yanghuafeng.
This commit is contained in:
parent
c5bf43a8e8
commit
527288ef89
|
@ -196,8 +196,11 @@ public final class ZKCuratorManager {
|
||||||
*/
|
*/
|
||||||
public String getStringData(final String path) throws Exception {
|
public String getStringData(final String path) throws Exception {
|
||||||
byte[] bytes = getData(path);
|
byte[] bytes = getData(path);
|
||||||
|
if (bytes != null) {
|
||||||
return new String(bytes, Charset.forName("UTF-8"));
|
return new String(bytes, Charset.forName("UTF-8"));
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the data in a ZNode.
|
* Get the data in a ZNode.
|
||||||
|
@ -208,8 +211,11 @@ public final class ZKCuratorManager {
|
||||||
*/
|
*/
|
||||||
public String getStringData(final String path, Stat stat) throws Exception {
|
public String getStringData(final String path, Stat stat) throws Exception {
|
||||||
byte[] bytes = getData(path, stat);
|
byte[] bytes = getData(path, stat);
|
||||||
|
if (bytes != null) {
|
||||||
return new String(bytes, Charset.forName("UTF-8"));
|
return new String(bytes, Charset.forName("UTF-8"));
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set data into a ZNode.
|
* Set data into a ZNode.
|
||||||
|
|
|
@ -19,6 +19,7 @@ package org.apache.hadoop.util.curator;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -30,6 +31,7 @@ import org.apache.hadoop.fs.CommonConfigurationKeys;
|
||||||
import org.apache.hadoop.util.ZKUtil;
|
import org.apache.hadoop.util.ZKUtil;
|
||||||
import org.apache.zookeeper.CreateMode;
|
import org.apache.zookeeper.CreateMode;
|
||||||
import org.apache.zookeeper.data.ACL;
|
import org.apache.zookeeper.data.ACL;
|
||||||
|
import org.apache.zookeeper.data.Stat;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -97,6 +99,27 @@ public class TestZKCuratorManager {
|
||||||
assertEquals(2, children.size());
|
assertEquals(2, children.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetStringData() throws Exception {
|
||||||
|
String node1 = "/node1";
|
||||||
|
String node2 = "/node2";
|
||||||
|
assertFalse(curator.exists(node1));
|
||||||
|
curator.create(node1);
|
||||||
|
assertNull(curator.getStringData(node1));
|
||||||
|
|
||||||
|
byte[] setData = "setData".getBytes("UTF-8");
|
||||||
|
curator.setData(node1, setData, -1);
|
||||||
|
assertEquals("setData", curator.getStringData(node1));
|
||||||
|
|
||||||
|
Stat stat = new Stat();
|
||||||
|
assertFalse(curator.exists(node2));
|
||||||
|
curator.create(node2);
|
||||||
|
assertNull(curator.getStringData(node2, stat));
|
||||||
|
|
||||||
|
curator.setData(node2, setData, -1);
|
||||||
|
assertEquals("setData", curator.getStringData(node2, stat));
|
||||||
|
|
||||||
|
}
|
||||||
@Test
|
@Test
|
||||||
public void testTransaction() throws Exception {
|
public void testTransaction() throws Exception {
|
||||||
List<ACL> zkAcl = ZKUtil.parseACLs(CommonConfigurationKeys.ZK_ACL_DEFAULT);
|
List<ACL> zkAcl = ZKUtil.parseACLs(CommonConfigurationKeys.ZK_ACL_DEFAULT);
|
||||||
|
|
|
@ -18,6 +18,10 @@
|
||||||
package org.apache.hadoop.hdfs.server.federation.store.driver;
|
package org.apache.hadoop.hdfs.server.federation.store.driver;
|
||||||
|
|
||||||
import static org.apache.hadoop.hdfs.server.federation.store.FederationStateStoreTestUtils.getStateStoreConfiguration;
|
import static org.apache.hadoop.hdfs.server.federation.store.FederationStateStoreTestUtils.getStateStoreConfiguration;
|
||||||
|
import static org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl.FEDERATION_STORE_ZK_PARENT_PATH;
|
||||||
|
import static org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl.FEDERATION_STORE_ZK_PARENT_PATH_DEFAULT;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -29,7 +33,14 @@ import org.apache.curator.test.TestingServer;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
||||||
import org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys;
|
import org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.StateStoreUtils;
|
||||||
import org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl;
|
import org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.BaseRecord;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.DisabledNameservice;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.MembershipState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.MountTable;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
import org.apache.zookeeper.CreateMode;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
|
@ -42,6 +53,7 @@ public class TestStateStoreZK extends TestStateStoreDriverBase {
|
||||||
|
|
||||||
private static TestingServer curatorTestingServer;
|
private static TestingServer curatorTestingServer;
|
||||||
private static CuratorFramework curatorFramework;
|
private static CuratorFramework curatorFramework;
|
||||||
|
private static String baseZNode;
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void setupCluster() throws Exception {
|
public static void setupCluster() throws Exception {
|
||||||
|
@ -61,6 +73,9 @@ public class TestStateStoreZK extends TestStateStoreDriverBase {
|
||||||
// Disable auto-repair of connection
|
// Disable auto-repair of connection
|
||||||
conf.setLong(RBFConfigKeys.FEDERATION_STORE_CONNECTION_TEST_MS,
|
conf.setLong(RBFConfigKeys.FEDERATION_STORE_CONNECTION_TEST_MS,
|
||||||
TimeUnit.HOURS.toMillis(1));
|
TimeUnit.HOURS.toMillis(1));
|
||||||
|
|
||||||
|
baseZNode = conf.get(FEDERATION_STORE_ZK_PARENT_PATH,
|
||||||
|
FEDERATION_STORE_ZK_PARENT_PATH_DEFAULT);
|
||||||
getStateStore(conf);
|
getStateStore(conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,6 +93,44 @@ public class TestStateStoreZK extends TestStateStoreDriverBase {
|
||||||
removeAll(getStateStoreDriver());
|
removeAll(getStateStoreDriver());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private <T extends BaseRecord> String generateFakeZNode(
|
||||||
|
Class<T> recordClass) throws IOException {
|
||||||
|
String nodeName = StateStoreUtils.getRecordName(recordClass);
|
||||||
|
String primaryKey = "test";
|
||||||
|
|
||||||
|
if (nodeName != null) {
|
||||||
|
return baseZNode + "/" + nodeName + "/" + primaryKey;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void testGetNullRecord(StateStoreDriver driver) throws Exception {
|
||||||
|
testGetNullRecord(driver, MembershipState.class);
|
||||||
|
testGetNullRecord(driver, MountTable.class);
|
||||||
|
testGetNullRecord(driver, RouterState.class);
|
||||||
|
testGetNullRecord(driver, DisabledNameservice.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T extends BaseRecord> void testGetNullRecord(
|
||||||
|
StateStoreDriver driver, Class<T> recordClass) throws Exception {
|
||||||
|
driver.removeAll(recordClass);
|
||||||
|
|
||||||
|
String znode = generateFakeZNode(recordClass);
|
||||||
|
assertNull(curatorFramework.checkExists().forPath(znode));
|
||||||
|
|
||||||
|
curatorFramework.create().withMode(CreateMode.PERSISTENT)
|
||||||
|
.withACL(null).forPath(znode, null);
|
||||||
|
assertNotNull(curatorFramework.checkExists().forPath(znode));
|
||||||
|
|
||||||
|
driver.get(recordClass);
|
||||||
|
assertNull(curatorFramework.checkExists().forPath(znode));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetNullRecord() throws Exception {
|
||||||
|
testGetNullRecord(getStateStoreDriver());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInsert()
|
public void testInsert()
|
||||||
throws IllegalArgumentException, IllegalAccessException, IOException {
|
throws IllegalArgumentException, IllegalAccessException, IOException {
|
||||||
|
|
Loading…
Reference in New Issue