blob: f32239730947eb21eca20a1991ee5ea2006d3bf0 [file] [log] [blame]
package org.apache.helix.store.zk;
/*
* 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.
*/
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.helix.AccessOption;
import org.apache.helix.PropertyType;
import org.apache.helix.TestHelper;
import org.apache.helix.zookeeper.datamodel.ZNRecord;
import org.apache.helix.ZkUnitTestBase;
import org.apache.helix.manager.zk.ZkBaseDataAccessor;
import org.apache.helix.zookeeper.zkclient.DataUpdater;
import org.apache.zookeeper.data.Stat;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestAutoFallbackPropertyStore extends ZkUnitTestBase {
class MyDataUpdater implements DataUpdater<ZNRecord> {
final String _id;
MyDataUpdater(String id) {
_id = id;
}
@Override
public ZNRecord update(ZNRecord currentData) {
if (currentData == null) {
currentData = new ZNRecord(_id);
} else {
currentData.setSimpleField("key", "value");
}
return currentData;
}
}
@Test
public void testSingleUpdateUsingFallbackPath() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0 under fallbackRoot
for (int i = 0; i < 1; i++) {
String path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
String path = String.format("/%d", 0);
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
boolean succeed = store.update(path, new MyDataUpdater("new0"), AccessOption.PERSISTENT);
Assert.assertTrue(succeed);
// fallback path should remain unchanged
ZNRecord record = baseAccessor.get(String.format("%s%s", fallbackRoot, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "0");
Assert.assertNull(record.getSimpleField("key"));
// new path should have simple field set
record = baseAccessor.get(String.format("%s%s", root, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "0");
Assert.assertNotNull(record.getSimpleField("key"));
Assert.assertEquals(record.getSimpleField("key"), "value");
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
public void testSingleUpdateUsingNewPath() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0 under both fallbackRoot and root
for (int i = 0; i < 1; i++) {
String path = String.format("%s/%d", root, i);
baseAccessor.create(path, new ZNRecord("new" + i), AccessOption.PERSISTENT);
path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
String path = String.format("/%d", 0);
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should exist under new location");
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
boolean succeed = store.update(path, new MyDataUpdater("0"), AccessOption.PERSISTENT);
Assert.assertTrue(succeed);
ZNRecord record = baseAccessor.get(String.format("%s%s", fallbackRoot, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "0");
Assert.assertNull(record.getSimpleField("key"));
record = baseAccessor.get(String.format("%s%s", root, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "new0");
Assert.assertNotNull(record.getSimpleField("key"));
Assert.assertEquals(record.getSimpleField("key"), "value");
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
public void testMultiUpdateUsingFallbackPath() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0-9 under fallbackRoot
for (int i = 0; i < 10; i++) {
String path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
List<String> paths = new ArrayList<>();
List<DataUpdater<ZNRecord>> updaters = new ArrayList<>();
for (int i = 0; i < 10; i++) {
String path = String.format("/%d", i);
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
paths.add(path);
updaters.add(new MyDataUpdater("new" + i));
}
boolean[] succeed = store.updateChildren(paths, updaters, AccessOption.PERSISTENT);
for (int i = 0; i < 10; i++) {
Assert.assertTrue(succeed[i]);
String path = paths.get(i);
// fallback path should remain unchanged
ZNRecord record = baseAccessor.get(String.format("%s%s", fallbackRoot, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "" + i);
Assert.assertNull(record.getSimpleField("key"));
// new path should have simple field set
record = baseAccessor.get(String.format("%s%s", root, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "" + i);
Assert.assertNotNull(record.getSimpleField("key"));
Assert.assertEquals(record.getSimpleField("key"), "value");
}
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
public void testMultiUpdateUsingNewath() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0-9 under both fallbackRoot and new root
for (int i = 0; i < 10; i++) {
String path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
path = String.format("%s/%d", root, i);
baseAccessor.create(path, new ZNRecord("new" + i), AccessOption.PERSISTENT);
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
List<String> paths = new ArrayList<>();
List<DataUpdater<ZNRecord>> updaters = new ArrayList<>();
for (int i = 0; i < 20; i++) {
String path = String.format("/%d", i);
if (i < 10) {
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should exist under new location");
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
} else {
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should not exist under fallback location");
}
paths.add(path);
updaters.add(new MyDataUpdater("new" + i));
}
boolean[] succeed = store.updateChildren(paths, updaters, AccessOption.PERSISTENT);
for (int i = 0; i < 10; i++) {
Assert.assertTrue(succeed[i]);
String path = paths.get(i);
// fallback path should remain unchanged
{
ZNRecord record = baseAccessor.get(String.format("%s%s", fallbackRoot, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "" + i);
Assert.assertNull(record.getSimpleField("key"));
}
// new path should have simple field set
ZNRecord record = baseAccessor.get(String.format("%s%s", root, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "new" + i);
Assert.assertNotNull(record.getSimpleField("key"));
Assert.assertEquals(record.getSimpleField("key"), "value");
}
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
public void testSingleSet() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0 under fallbackRoot
for (int i = 0; i < 1; i++) {
String path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
String path = String.format("/%d", 0);
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
ZNRecord record = new ZNRecord("new0");
boolean succeed = store.set(path, record, AccessOption.PERSISTENT);
Assert.assertTrue(succeed);
record = baseAccessor.get(String.format("%s%s", fallbackRoot, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "0");
record = baseAccessor.get(String.format("%s%s", root, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "new0");
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
public void testMultiSet() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0-9 under fallbackRoot
for (int i = 0; i < 10; i++) {
String path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
List<String> paths = new ArrayList<>();
List<ZNRecord> records = new ArrayList<>();
for (int i = 0; i < 10; i++) {
String path = String.format("/%d", i);
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
paths.add(path);
ZNRecord record = new ZNRecord("new" + i);
records.add(record);
}
boolean[] succeed = store.setChildren(paths, records, AccessOption.PERSISTENT);
for (int i = 0; i < 10; i++) {
Assert.assertTrue(succeed[i]);
String path = String.format("/%d", i);
ZNRecord record = baseAccessor.get(String.format("%s%s", fallbackRoot, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), Integer.toString(i));
record = baseAccessor.get(String.format("%s%s", root, path), null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "new" + i);
}
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
public void testSingleGetOnFallbackPath() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0 under fallbackRoot
for (int i = 0; i < 1; i++) {
String path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
String path = String.format("/%d", 0);
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
// test single exist
boolean exist = store.exists(path, 0);
Assert.assertTrue(exist);
// test single getStat
Stat stat = store.getStat(path, 0);
Assert.assertNotNull(stat);
// test single get
ZNRecord record = store.get(path, null, 0);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), "0");
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location after get");
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
void testMultiGetOnFallbackPath() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0-9 under fallbackRoot
for (int i = 0; i < 10; i++) {
String path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
List<String> paths = new ArrayList<>();
for (int i = 0; i < 10; i++) {
String path = String.format("/%d", i);
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
paths.add(path);
}
// test multi-exist
boolean[] exists = store.exists(paths, 0);
for (int i = 0; i < paths.size(); i++) {
Assert.assertTrue(exists[i]);
}
// test multi-getStat
Stat[] stats = store.getStats(paths, 0);
for (int i = 0; i < paths.size(); i++) {
Assert.assertNotNull(stats[i]);
}
// test multi-get
List<ZNRecord> records = store.get(paths, null, 0);
Assert.assertNotNull(records);
Assert.assertEquals(records.size(), 10);
for (int i = 0; i < 10; i++) {
ZNRecord record = records.get(i);
String path = paths.get(i);
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), Integer.toString(i));
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location after get");
}
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
public void testFailOnSingleGet() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
String path = String.format("/%d", 0);
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should not exist under fallback location");
// test single exist
boolean exist = store.exists(path, 0);
Assert.assertFalse(exist);
// test single getStat
Stat stat = store.getStat(path, 0);
Assert.assertNull(stat);
// test single get
ZNRecord record = store.get(path, null, 0);
Assert.assertNull(record);
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
public void testFailOnMultiGet() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0-9 under fallbackRoot
for (int i = 0; i < 10; i++) {
String path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
List<String> paths = new ArrayList<>();
for (int i = 0; i < 20; i++) {
String path = String.format("/%d", i);
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
if (i < 10) {
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
} else {
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should not exist under fallback location");
}
paths.add(path);
}
// test multi-exist
boolean[] exists = store.exists(paths, 0);
for (int i = 0; i < paths.size(); i++) {
if (i < 10) {
Assert.assertTrue(exists[i]);
} else {
Assert.assertFalse(exists[i]);
}
}
// test multi-getStat
Stat[] stats = store.getStats(paths, 0);
for (int i = 0; i < paths.size(); i++) {
if (i < 10) {
Assert.assertNotNull(stats[i]);
} else {
Assert.assertNull(stats[i]);
}
}
// test multi-get
List<ZNRecord> records = store.get(paths, null, 0);
Assert.assertNotNull(records);
Assert.assertEquals(records.size(), 20);
for (int i = 0; i < 20; i++) {
ZNRecord record = records.get(i);
String path = paths.get(i);
if (i < 10) {
Assert.assertNotNull(record);
Assert.assertEquals(record.getId(), Integer.toString(i));
} else {
Assert.assertNull(record);
}
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location after get");
}
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
@Test
public void testGetChildren() {
String className = TestHelper.getTestClassName();
String methodName = TestHelper.getTestMethodName();
String clusterName = className + "_" + methodName;
System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis()));
String root = String.format("/%s/%s", clusterName, PropertyType.PROPERTYSTORE.name());
String fallbackRoot = String.format("/%s/%s", clusterName, "HELIX_PROPERTYSTORE");
ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
// create 0-9 under fallbackRoot and 10-19 under root
for (int i = 0; i < 20; i++) {
if (i < 10) {
String path = String.format("%s/%d", fallbackRoot, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
} else {
String path = String.format("%s/%d", root, i);
baseAccessor.create(path, new ZNRecord(Integer.toString(i)), AccessOption.PERSISTENT);
}
}
AutoFallbackPropertyStore<ZNRecord> store =
new AutoFallbackPropertyStore<>(baseAccessor, root, fallbackRoot);
List<String> paths = new ArrayList<>();
for (int i = 0; i < 20; i++) {
String path = String.format("/%d", i);
if (i < 10) {
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should exist under fallback location");
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should not exist under new location");
} else {
Assert.assertFalse(baseAccessor.exists(String.format("%s%s", fallbackRoot, path), 0),
"Should not exist under fallback location");
Assert.assertTrue(baseAccessor.exists(String.format("%s%s", root, path), 0),
"Should exist under new location");
}
paths.add(path);
}
List<String> childs = store.getChildNames("/", 0);
Assert.assertNotNull(childs);
Assert.assertEquals(childs.size(), 20);
for (int i = 0; i < 20; i++) {
String child = childs.get(i);
Assert.assertTrue(childs.contains(child));
}
List<ZNRecord> records = store.getChildren("/", null, 0);
Assert.assertNotNull(records);
Assert.assertEquals(records.size(), 20);
for (int i = 0; i < 20; i++) {
ZNRecord record = records.get(i);
Assert.assertNotNull(record);
String id = record.getId();
Assert.assertTrue(childs.contains(id));
}
deleteCluster(clusterName);
System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis()));
}
}