You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by ki...@apache.org on 2012/10/25 00:26:41 UTC
[31/47] Refactoring from com.linkedin.helix to org.apache.helix
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestHelper.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestHelper.java b/helix-core/src/test/java/com/linkedin/helix/TestHelper.java
deleted file mode 100644
index f3205ed..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestHelper.java
+++ /dev/null
@@ -1,1081 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed 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 com.linkedin.helix;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.lang.reflect.Method;
-import java.net.Socket;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.I0Itec.zkclient.IDefaultNameSpace;
-import org.I0Itec.zkclient.ZkServer;
-import org.I0Itec.zkclient.exception.ZkNoNodeException;
-import org.apache.commons.io.FileUtils;
-import org.apache.log4j.Logger;
-import org.apache.zookeeper.data.Stat;
-import org.testng.Assert;
-
-import com.linkedin.helix.PropertyKey.Builder;
-import com.linkedin.helix.controller.HelixControllerMain;
-import com.linkedin.helix.manager.file.FileDataAccessor;
-import com.linkedin.helix.manager.zk.ZKHelixAdmin;
-import com.linkedin.helix.manager.zk.ZKHelixDataAccessor;
-import com.linkedin.helix.manager.zk.ZNRecordSerializer;
-import com.linkedin.helix.manager.zk.ZkBaseDataAccessor;
-import com.linkedin.helix.manager.zk.ZkClient;
-import com.linkedin.helix.model.CurrentState;
-import com.linkedin.helix.model.ExternalView;
-import com.linkedin.helix.model.IdealState.IdealStateModeProperty;
-import com.linkedin.helix.model.Message;
-import com.linkedin.helix.model.Message.MessageType;
-import com.linkedin.helix.model.StateModelDefinition;
-import com.linkedin.helix.model.StateModelDefinition.StateModelDefinitionProperty;
-import com.linkedin.helix.store.file.FilePropertyStore;
-import com.linkedin.helix.store.zk.ZNode;
-import com.linkedin.helix.tools.ClusterSetup;
-import com.linkedin.helix.util.ZKClientPool;
-
-public class TestHelper
-{
- private static final Logger LOG = Logger.getLogger(TestHelper.class);
-
- static public ZkServer startZkSever(final String zkAddress) throws Exception
- {
- List<String> empty = Collections.emptyList();
- return TestHelper.startZkSever(zkAddress, empty);
- }
-
- static public ZkServer startZkSever(final String zkAddress, final String rootNamespace) throws Exception
- {
- List<String> rootNamespaces = new ArrayList<String>();
- rootNamespaces.add(rootNamespace);
- return TestHelper.startZkSever(zkAddress, rootNamespaces);
- }
-
- static public ZkServer startZkSever(final String zkAddress,
- final List<String> rootNamespaces) throws Exception
- {
- System.out.println("Start zookeeper at " + zkAddress + " in thread "
- + Thread.currentThread().getName());
-
- String zkDir = zkAddress.replace(':', '_');
- final String logDir = "/tmp/" + zkDir + "/logs";
- final String dataDir = "/tmp/" + zkDir + "/dataDir";
- FileUtils.deleteDirectory(new File(dataDir));
- FileUtils.deleteDirectory(new File(logDir));
- ZKClientPool.reset();
-
- IDefaultNameSpace defaultNameSpace = new IDefaultNameSpace()
- {
- @Override
- public void createDefaultNameSpace(org.I0Itec.zkclient.ZkClient zkClient)
- {
- for (String rootNamespace : rootNamespaces)
- {
- try
- {
- zkClient.deleteRecursive(rootNamespace);
- }
- catch (Exception e)
- {
- LOG.error("fail to deleteRecursive path:" + rootNamespace + "\nexception:"
- + e);
- }
- }
- }
- };
-
- int port = Integer.parseInt(zkAddress.substring(zkAddress.lastIndexOf(':') + 1));
- ZkServer zkServer = new ZkServer(dataDir, logDir, defaultNameSpace, port);
- zkServer.start();
-
- return zkServer;
- }
-
- static public void stopZkServer(ZkServer zkServer)
- {
- if (zkServer != null)
- {
- zkServer.shutdown();
- System.out.println("Shut down zookeeper at port " + zkServer.getPort()
- + " in thread " + Thread.currentThread().getName());
- }
- }
-
- public static StartCMResult startDummyProcess(final String zkAddr,
- final String clusterName,
- final String instanceName) throws Exception
- {
- StartCMResult result = new StartCMResult();
- HelixManager manager = null;
- manager =
- HelixManagerFactory.getZKHelixManager(clusterName,
- instanceName,
- InstanceType.PARTICIPANT,
- zkAddr);
- result._manager = manager;
- Thread thread = new Thread(new DummyProcessThread(manager, instanceName));
- result._thread = thread;
- thread.start();
-
- return result;
- }
-
- // TODO refactor this
- public static StartCMResult startController(final String clusterName,
- final String controllerName,
- final String zkConnectString,
- final String controllerMode) throws Exception
- {
- final StartCMResult result = new StartCMResult();
- final HelixManager manager =
- HelixControllerMain.startHelixController(zkConnectString,
- clusterName,
- controllerName,
- controllerMode);
- result._manager = manager;
-
- Thread thread = new Thread(new Runnable()
- {
- @Override
- public void run()
- {
- // ClusterManager manager = null;
-
- try
- {
-
- Thread.currentThread().join();
- }
- catch (InterruptedException e)
- {
- String msg =
- "controller:" + controllerName + ", " + Thread.currentThread().getName()
- + " interrupted";
- LOG.info(msg);
- // System.err.println(msg);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- });
-
- thread.start();
- result._thread = thread;
- return result;
- }
-
- public static class StartCMResult
- {
- public Thread _thread;
- public HelixManager _manager;
-
- }
-
- public static void setupEmptyCluster(ZkClient zkClient, String clusterName)
- {
- ZKHelixAdmin admin = new ZKHelixAdmin(zkClient);
- admin.addCluster(clusterName, true);
- }
-
- /**
- * convert T[] to set<T>
- *
- * @param s
- * @return
- */
- public static <T> Set<T> setOf(T... s)
- {
- Set<T> set = new HashSet<T>(Arrays.asList(s));
- return set;
- }
-
- public static void verifyWithTimeout(String verifierName, Object... args)
- {
- verifyWithTimeout(verifierName, 30 * 1000, args);
- }
-
- /**
- * generic method for verification with a timeout
- *
- * @param verifierName
- * @param args
- */
- public static void verifyWithTimeout(String verifierName, long timeout, Object... args)
- {
- final long sleepInterval = 1000; // in ms
- final int loop = (int) (timeout / sleepInterval) + 1;
- try
- {
- boolean result = false;
- int i = 0;
- for (; i < loop; i++)
- {
- Thread.sleep(sleepInterval);
- // verifier should be static method
- result = (Boolean) TestHelper.getMethod(verifierName).invoke(null, args);
-
- if (result == true)
- {
- break;
- }
- }
-
- // debug
- // LOG.info(verifierName + ": wait " + ((i + 1) * 1000) + "ms to verify ("
- // + result + ")");
- System.err.println(verifierName + ": wait " + ((i + 1) * 1000) + "ms to verify "
- + " (" + result + ")");
- LOG.debug("args:" + Arrays.toString(args));
- // System.err.println("args:" + Arrays.toString(args));
-
- if (result == false)
- {
- LOG.error(verifierName + " fails");
- LOG.error("args:" + Arrays.toString(args));
- }
-
- Assert.assertTrue(result);
- }
- catch (Exception e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- private static Method getMethod(String name)
- {
- Method[] methods = TestHelper.class.getMethods();
- for (Method method : methods)
- {
- if (name.equals(method.getName()))
- {
- return method;
- }
- }
- return null;
- }
-
- // for file-based cluster manager
- public static boolean verifyEmptyCurStateFile(String clusterName,
- String resourceName,
- Set<String> instanceNames,
- FilePropertyStore<ZNRecord> filePropertyStore)
- {
- DataAccessor accessor = new FileDataAccessor(filePropertyStore, clusterName);
-
- for (String instanceName : instanceNames)
- {
- String path =
- PropertyPathConfig.getPath(PropertyType.CURRENTSTATES,
- clusterName,
- instanceName);
- List<String> subPaths =
- accessor.getChildNames(PropertyType.CURRENTSTATES, instanceName);
-
- for (String previousSessionId : subPaths)
- {
- if (filePropertyStore.exists(path + "/" + previousSessionId + "/" + resourceName))
- {
- CurrentState previousCurrentState =
- accessor.getProperty(CurrentState.class,
- PropertyType.CURRENTSTATES,
- instanceName,
- previousSessionId,
- resourceName);
-
- if (previousCurrentState.getRecord().getMapFields().size() != 0)
- {
- return false;
- }
- }
- }
- }
- return true;
- }
-
- public static boolean verifyEmptyCurStateAndExtView(String clusterName,
- String resourceName,
- Set<String> instanceNames,
- String zkAddr)
- {
- ZkClient zkClient = new ZkClient(zkAddr);
- zkClient.setZkSerializer(new ZNRecordSerializer());
-
- try
- {
- ZKHelixDataAccessor accessor =
- new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor(zkClient));
- Builder keyBuilder = accessor.keyBuilder();
-
- for (String instanceName : instanceNames)
- {
- List<String> sessionIds =
- accessor.getChildNames(keyBuilder.sessions(instanceName));
-
- for (String sessionId : sessionIds)
- {
- CurrentState curState =
- accessor.getProperty(keyBuilder.currentState(instanceName,
- sessionId,
- resourceName));
-
- if (curState != null && curState.getRecord().getMapFields().size() != 0)
- {
- return false;
- }
- }
-
- ExternalView extView =
- accessor.getProperty(keyBuilder.externalView(resourceName));
-
- if (extView != null && extView.getRecord().getMapFields().size() != 0)
- {
- return false;
- }
-
- }
-
- return true;
- }
- finally
- {
- zkClient.close();
- }
- }
-
- public static boolean verifyNotConnected(HelixManager manager)
- {
- return !manager.isConnected();
- }
-
- public static void setupCluster(String clusterName,
- String zkAddr,
- int startPort,
- String participantNamePrefix,
- String resourceNamePrefix,
- int resourceNb,
- int partitionNb,
- int nodesNb,
- int replica,
- String stateModelDef,
- boolean doRebalance) throws Exception
- {
- TestHelper.setupCluster(clusterName,
- zkAddr,
- startPort,
- participantNamePrefix,
- resourceNamePrefix,
- resourceNb,
- partitionNb,
- nodesNb,
- replica,
- stateModelDef,
- IdealStateModeProperty.AUTO,
- doRebalance);
- }
-
- public static void setupCluster(String clusterName,
- String ZkAddr,
- int startPort,
- String participantNamePrefix,
- String resourceNamePrefix,
- int resourceNb,
- int partitionNb,
- int nodesNb,
- int replica,
- String stateModelDef,
- IdealStateModeProperty mode,
- boolean doRebalance) throws Exception
- {
- ZkClient zkClient = new ZkClient(ZkAddr);
- if (zkClient.exists("/" + clusterName))
- {
- LOG.warn("Cluster already exists:" + clusterName + ". Deleting it");
- zkClient.deleteRecursive("/" + clusterName);
- }
-
- ClusterSetup setupTool = new ClusterSetup(ZkAddr);
- setupTool.addCluster(clusterName, true);
-
- for (int i = 0; i < nodesNb; i++)
- {
- int port = startPort + i;
- setupTool.addInstanceToCluster(clusterName, participantNamePrefix + ":" + port);
- }
-
- for (int i = 0; i < resourceNb; i++)
- {
- String dbName = resourceNamePrefix + i;
- setupTool.addResourceToCluster(clusterName, dbName, partitionNb, stateModelDef, mode.toString());
- if (doRebalance)
- {
- setupTool.rebalanceStorageCluster(clusterName, dbName, replica);
- }
- }
- zkClient.close();
- }
-
- /**
- *
- * @param stateMap
- * : "ResourceName/partitionKey" -> setOf(instances)
- * @param state
- * : MASTER|SLAVE|ERROR...
- */
- public static void verifyState(String clusterName,
- String zkAddr,
- Map<String, Set<String>> stateMap,
- String state)
- {
- ZkClient zkClient = new ZkClient(zkAddr);
- zkClient.setZkSerializer(new ZNRecordSerializer());
-
- try
- {
- ZKHelixDataAccessor accessor =
- new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor(zkClient));
- Builder keyBuilder = accessor.keyBuilder();
-
- for (String resGroupPartitionKey : stateMap.keySet())
- {
- Map<String, String> retMap = getResourceAndPartitionKey(resGroupPartitionKey);
- String resGroup = retMap.get("RESOURCE");
- String partitionKey = retMap.get("PARTITION");
-
- ExternalView extView = accessor.getProperty(keyBuilder.externalView(resGroup));
- for (String instance : stateMap.get(resGroupPartitionKey))
- {
- String actualState = extView.getStateMap(partitionKey).get(instance);
- Assert.assertNotNull(actualState, "externalView doesn't contain state for "
- + resGroup + "/" + partitionKey + " on " + instance + " (expect " + state
- + ")");
-
- Assert.assertEquals(actualState, state, "externalView for " + resGroup + "/"
- + partitionKey + " on " + instance + " is " + actualState + " (expect "
- + state + ")");
- }
- }
- }
- finally
- {
- zkClient.close();
- }
- }
-
- /**
- *
- * @param resourcePartition
- * : key is in form of "resource/partitionKey" or "resource_x"
- *
- * @return
- */
- private static Map<String, String> getResourceAndPartitionKey(String resourcePartition)
- {
- String resourceName;
- String partitionName;
- int idx = resourcePartition.indexOf('/');
- if (idx > -1)
- {
- resourceName = resourcePartition.substring(0, idx);
- partitionName = resourcePartition.substring(idx + 1);
- }
- else
- {
- idx = resourcePartition.lastIndexOf('_');
- resourceName = resourcePartition.substring(0, idx);
- partitionName = resourcePartition;
- }
-
- Map<String, String> retMap = new HashMap<String, String>();
- retMap.put("RESOURCE", resourceName);
- retMap.put("PARTITION", partitionName);
- return retMap;
- }
-
- public static <T> Map<String, T> startThreadsConcurrently(final int nrThreads,
- final Callable<T> method,
- final long timeout)
- {
- final CountDownLatch startLatch = new CountDownLatch(1);
- final CountDownLatch finishCounter = new CountDownLatch(nrThreads);
- final Map<String, T> resultsMap = new ConcurrentHashMap<String, T>();
- final List<Thread> threadList = new ArrayList<Thread>();
-
- for (int i = 0; i < nrThreads; i++)
- {
- Thread thread = new Thread()
- {
- @Override
- public void run()
- {
- try
- {
- boolean isTimeout = !startLatch.await(timeout, TimeUnit.SECONDS);
- if (isTimeout)
- {
- LOG.error("Timeout while waiting for start latch");
- }
- }
- catch (InterruptedException ex)
- {
- LOG.error("Interrupted while waiting for start latch");
- }
-
- try
- {
- T result = method.call();
- if (result != null)
- {
- resultsMap.put("thread_" + this.getId(), result);
- }
- LOG.debug("result=" + result);
- }
- catch (Exception e)
- {
- LOG.error("Exeption in executing " + method.getClass().getName(), e);
- }
-
- finishCounter.countDown();
- }
- };
- threadList.add(thread);
- thread.start();
- }
- startLatch.countDown();
-
- // wait for all thread to complete
- try
- {
- boolean isTimeout = !finishCounter.await(timeout, TimeUnit.SECONDS);
- if (isTimeout)
- {
- LOG.error("Timeout while waiting for finish latch. Interrupt all threads");
- for (Thread thread : threadList)
- {
- thread.interrupt();
- }
- }
- }
- catch (InterruptedException e)
- {
- LOG.error("Interrupted while waiting for finish latch", e);
- }
-
- return resultsMap;
- }
-
- public static Message createMessage(String msgId,
- String fromState,
- String toState,
- String tgtName,
- String resourceName,
- String partitionName)
- {
- Message msg = new Message(MessageType.STATE_TRANSITION, msgId);
- msg.setFromState(fromState);
- msg.setToState(toState);
- msg.setTgtName(tgtName);
- msg.setResourceName(resourceName);
- msg.setPartitionName(partitionName);
- msg.setStateModelDef("MasterSlave");
-
- return msg;
- }
-
- public static int numberOfListeners(String zkAddr, String path) throws Exception
- {
- int count = 0;
- String splits[] = zkAddr.split(":");
- Socket sock = new Socket(splits[0], Integer.parseInt(splits[1]));
- PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
- BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
-
- out.println("wchp");
-
- String line = in.readLine();
- while (line != null)
- {
- // System.out.println(line);
- if (line.equals(path))
- {
- // System.out.println("match: " + line);
-
- String nextLine = in.readLine();
- if (nextLine == null)
- {
- break;
- }
- // System.out.println(nextLine);
- while (nextLine.startsWith("\t0x"))
- {
- count++;
- nextLine = in.readLine();
- if (nextLine == null)
- {
- break;
- }
- }
- }
- line = in.readLine();
- }
- sock.close();
- return count;
- }
-
- public static String getTestMethodName()
- {
- StackTraceElement[] calls = Thread.currentThread().getStackTrace();
- return calls[2].getMethodName();
- }
-
- public static String getTestClassName()
- {
- StackTraceElement[] calls = Thread.currentThread().getStackTrace();
- String fullClassName = calls[2].getClassName();
- return fullClassName.substring(fullClassName.lastIndexOf('.') + 1);
- }
-
- public static <T> Map<String, T> startThreadsConcurrently(final List<Callable<T>> methods,
- final long timeout)
- {
- final int nrThreads = methods.size();
- final CountDownLatch startLatch = new CountDownLatch(1);
- final CountDownLatch finishCounter = new CountDownLatch(nrThreads);
- final Map<String, T> resultsMap = new ConcurrentHashMap<String, T>();
- final List<Thread> threadList = new ArrayList<Thread>();
-
- for (int i = 0; i < nrThreads; i++)
- {
- final Callable<T> method = methods.get(i);
-
- Thread thread = new Thread()
- {
- @Override
- public void run()
- {
- try
- {
- boolean isTimeout = !startLatch.await(timeout, TimeUnit.SECONDS);
- if (isTimeout)
- {
- LOG.error("Timeout while waiting for start latch");
- }
- }
- catch (InterruptedException ex)
- {
- LOG.error("Interrupted while waiting for start latch");
- }
-
- try
- {
- T result = method.call();
- if (result != null)
- {
- resultsMap.put("thread_" + this.getId(), result);
- }
- LOG.debug("result=" + result);
- }
- catch (Exception e)
- {
- LOG.error("Exeption in executing " + method.getClass().getName(), e);
- }
-
- finishCounter.countDown();
- }
- };
- threadList.add(thread);
- thread.start();
- }
- startLatch.countDown();
-
- // wait for all thread to complete
- try
- {
- boolean isTimeout = !finishCounter.await(timeout, TimeUnit.SECONDS);
- if (isTimeout)
- {
- LOG.error("Timeout while waiting for finish latch. Interrupt all threads");
- for (Thread thread : threadList)
- {
- thread.interrupt();
- }
- }
- }
- catch (InterruptedException e)
- {
- LOG.error("Interrupted while waiting for finish latch", e);
- }
-
- return resultsMap;
- }
-
- public static void printCache(Map<String, ZNode> cache)
- {
- System.out.println("START:Print cache");
- TreeMap<String, ZNode> map = new TreeMap<String, ZNode>();
- map.putAll(cache);
-
- for (String key : map.keySet())
- {
- ZNode node = map.get(key);
- TreeSet<String> childSet = new TreeSet<String>();
- childSet.addAll(node.getChildSet());
- System.out.print(key + "=" + node.getData() + ", " + childSet + ", "
- + (node.getStat() == null ? "null\n" : node.getStat()));
- }
- System.out.println("END:Print cache");
- }
-
- public static void readZkRecursive(String path,
- Map<String, ZNode> map,
- ZkClient zkclient)
- {
- try
- {
- Stat stat = new Stat();
- ZNRecord record = zkclient.readData(path, stat);
- List<String> childNames = zkclient.getChildren(path);
- ZNode node = new ZNode(path, record, stat);
- node.addChildren(childNames);
- map.put(path, node);
-
- for (String childName : childNames)
- {
- String childPath = path + "/" + childName;
- readZkRecursive(childPath, map, zkclient);
- }
- }
- catch (ZkNoNodeException e)
- {
- // OK
- }
- }
-
- public static void readZkRecursive(String path,
- Map<String, ZNode> map,
- BaseDataAccessor<ZNRecord> zkAccessor)
- {
- try
- {
- Stat stat = new Stat();
- ZNRecord record = zkAccessor.get(path, stat, 0);
- List<String> childNames = zkAccessor.getChildNames(path, 0);
- // System.out.println("childNames: " + childNames);
- ZNode node = new ZNode(path, record, stat);
- node.addChildren(childNames);
- map.put(path, node);
-
- if (childNames != null && !childNames.isEmpty())
- {
- for (String childName : childNames)
- {
- String childPath = path + "/" + childName;
- readZkRecursive(childPath, map, zkAccessor);
- }
- }
- }
- catch (ZkNoNodeException e)
- {
- // OK
- }
- }
-
- public static boolean verifyZkCache(List<String> paths,
- BaseDataAccessor<ZNRecord> zkAccessor,
- ZkClient zkclient,
- boolean needVerifyStat)
- {
- // read everything
- Map<String, ZNode> zkMap = new HashMap<String, ZNode>();
- Map<String, ZNode> cache = new HashMap<String, ZNode>();
- for (String path : paths)
- {
- readZkRecursive(path, zkMap, zkclient);
- readZkRecursive(path, cache, zkAccessor);
- }
- // printCache(map);
-
- return verifyZkCache(paths, null, cache, zkMap, needVerifyStat);
- }
-
- public static boolean verifyZkCache(List<String> paths,
- Map<String, ZNode> cache,
- ZkClient zkclient,
- boolean needVerifyStat)
- {
- return verifyZkCache(paths, null, cache, zkclient, needVerifyStat);
- }
-
- public static boolean verifyZkCache(List<String> paths,
- List<String> pathsExcludeForStat,
- Map<String, ZNode> cache,
- ZkClient zkclient,
- boolean needVerifyStat)
- {
- // read everything on zk under paths
- Map<String, ZNode> zkMap = new HashMap<String, ZNode>();
- for (String path : paths)
- {
- readZkRecursive(path, zkMap, zkclient);
- }
- // printCache(map);
-
- return verifyZkCache(paths, pathsExcludeForStat, cache, zkMap, needVerifyStat);
- }
-
- public static boolean verifyZkCache(List<String> paths,
- List<String> pathsExcludeForStat,
- Map<String, ZNode> cache,
- Map<String, ZNode> zkMap,
- boolean needVerifyStat)
- {
- // equal size
- if (zkMap.size() != cache.size())
- {
- System.err.println("size mismatch: cacheSize: " + cache.size() + ", zkMapSize: "
- + zkMap.size());
- System.out.println("cache: (" + cache.size() + ")");
- TestHelper.printCache(cache);
-
- System.out.println("zkMap: (" + zkMap.size() + ")");
- TestHelper.printCache(zkMap);
-
- return false;
- }
-
- // everything in cache is also in map
- for (String path : cache.keySet())
- {
- ZNode cacheNode = cache.get(path);
- ZNode zkNode = zkMap.get(path);
-
- if (zkNode == null)
- {
- // in cache but not on zk
- System.err.println("path: " + path + " in cache but not on zk: inCacheNode: "
- + cacheNode);
- return false;
- }
-
- if ((zkNode.getData() == null && cacheNode.getData() != null)
- || (zkNode.getData() != null && cacheNode.getData() == null)
- || (zkNode.getData() != null && cacheNode.getData() != null && !zkNode.getData()
- .equals(cacheNode.getData())))
- {
- // data not equal
- System.err.println("data mismatch on path: " + path + ", inCache: "
- + cacheNode.getData() + ", onZk: " + zkNode.getData());
- return false;
- }
-
- if ((zkNode.getChildSet() == null && cacheNode.getChildSet() != null)
- || (zkNode.getChildSet() != null && cacheNode.getChildSet() == null)
- || (zkNode.getChildSet() != null && cacheNode.getChildSet() != null && !zkNode.getChildSet()
- .equals(cacheNode.getChildSet())))
- {
- // childSet not equal
- System.err.println("childSet mismatch on path: " + path + ", inCache: "
- + cacheNode.getChildSet() + ", onZk: " + zkNode.getChildSet());
- return false;
- }
-
- if (needVerifyStat && pathsExcludeForStat != null
- && !pathsExcludeForStat.contains(path))
- {
- if (cacheNode.getStat() == null || !zkNode.getStat().equals(cacheNode.getStat()))
- {
- // stat not equal
- System.err.println("Stat mismatch on path: " + path + ", inCache: "
- + cacheNode.getStat() + ", onZk: " + zkNode.getStat());
- return false;
- }
- }
- }
-
- return true;
- }
-
- public static StateModelDefinition generateStateModelDefForBootstrap()
- {
- ZNRecord record = new ZNRecord("Bootstrap");
- record.setSimpleField(StateModelDefinitionProperty.INITIAL_STATE.toString(), "IDLE");
- List<String> statePriorityList = new ArrayList<String>();
- statePriorityList.add("ONLINE");
- statePriorityList.add("BOOTSTRAP");
- statePriorityList.add("OFFLINE");
- statePriorityList.add("IDLE");
- statePriorityList.add("DROPPED");
- statePriorityList.add("ERROR");
- record.setListField(StateModelDefinitionProperty.STATE_PRIORITY_LIST.toString(),
- statePriorityList);
- for (String state : statePriorityList)
- {
- String key = state + ".meta";
- Map<String, String> metadata = new HashMap<String, String>();
- if (state.equals("ONLINE"))
- {
- metadata.put("count", "R");
- record.setMapField(key, metadata);
- }
- else if (state.equals("BOOTSTRAP"))
- {
- metadata.put("count", "-1");
- record.setMapField(key, metadata);
- }
- else if (state.equals("OFFLINE"))
- {
- metadata.put("count", "-1");
- record.setMapField(key, metadata);
- }
- else if (state.equals("IDLE"))
- {
- metadata.put("count", "-1");
- record.setMapField(key, metadata);
- }
- else if (state.equals("DROPPED"))
- {
- metadata.put("count", "-1");
- record.setMapField(key, metadata);
- }
- else if (state.equals("ERROR"))
- {
- metadata.put("count", "-1");
- record.setMapField(key, metadata);
- }
- }
-
- for (String state : statePriorityList)
- {
- String key = state + ".next";
- if (state.equals("ONLINE"))
- {
- Map<String, String> metadata = new HashMap<String, String>();
- metadata.put("BOOTSTRAP", "OFFLINE");
- metadata.put("OFFLINE", "OFFLINE");
- metadata.put("DROPPED", "OFFLINE");
- metadata.put("IDLE", "OFFLINE");
- record.setMapField(key, metadata);
- }
- else if (state.equals("BOOTSTRAP"))
- {
- Map<String, String> metadata = new HashMap<String, String>();
- metadata.put("ONLINE", "ONLINE");
- metadata.put("OFFLINE", "OFFLINE");
- metadata.put("DROPPED", "OFFLINE");
- metadata.put("IDLE", "OFFLINE");
- record.setMapField(key, metadata);
- }
- else if (state.equals("OFFLINE"))
- {
- Map<String, String> metadata = new HashMap<String, String>();
- metadata.put("ONLINE", "BOOTSTRAP");
- metadata.put("BOOTSTRAP", "BOOTSTRAP");
- metadata.put("DROPPED", "IDLE");
- metadata.put("IDLE", "IDLE");
- record.setMapField(key, metadata);
- }
- else if (state.equals("IDLE"))
- {
- Map<String, String> metadata = new HashMap<String, String>();
- metadata.put("ONLINE", "OFFLINE");
- metadata.put("BOOTSTRAP", "OFFLINE");
- metadata.put("OFFLINE", "OFFLINE");
- metadata.put("DROPPED", "DROPPED");
- record.setMapField(key, metadata);
- }
- else if (state.equals("ERROR"))
- {
- Map<String, String> metadata = new HashMap<String, String>();
- metadata.put("IDLE", "IDLE");
- record.setMapField(key, metadata);
- }
- }
- List<String> stateTransitionPriorityList = new ArrayList<String>();
- stateTransitionPriorityList.add("ONLINE-OFFLINE");
- stateTransitionPriorityList.add("BOOTSTRAP-ONLINE");
- stateTransitionPriorityList.add("OFFLINE-BOOTSTRAP");
- stateTransitionPriorityList.add("BOOTSTRAP-OFFLINE");
- stateTransitionPriorityList.add("OFFLINE-IDLE");
- stateTransitionPriorityList.add("IDLE-OFFLINE");
- stateTransitionPriorityList.add("IDLE-DROPPED");
- stateTransitionPriorityList.add("ERROR-IDLED");
- record.setListField(StateModelDefinitionProperty.STATE_TRANSITION_PRIORITYLIST.toString(),
- stateTransitionPriorityList);
- return new StateModelDefinition(record);
- }
-
- public static String znrecordToString(ZNRecord record)
- {
- StringBuffer sb = new StringBuffer();
- sb.append(record.getId() + "\n");
- Map<String, String> simpleFields = record.getSimpleFields();
- if (simpleFields != null)
- {
- sb.append("simpleFields\n");
- for (String key : simpleFields.keySet())
- {
- sb.append(" " + key + "\t: " + simpleFields.get(key) + "\n");
- }
- }
-
- Map<String, List<String>> listFields = record.getListFields();
- sb.append("listFields\n");
- for (String key : listFields.keySet())
- {
- List<String> list = listFields.get(key);
- sb.append(" " + key + "\t: ");
- for (String listValue : list)
- {
- sb.append(listValue + ", ");
- }
- sb.append("\n");
- }
-
- Map<String, Map<String, String>> mapFields = record.getMapFields();
- sb.append("mapFields\n");
- for (String key : mapFields.keySet())
- {
- Map<String, String> map = mapFields.get(key);
- sb.append(" " + key + "\t: \n");
- for (String mapKey : map.keySet())
- {
- sb.append(" " + mapKey + "\t: " + map.get(mapKey) + "\n");
- }
- }
-
- return sb.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestHierarchicalDataStore.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestHierarchicalDataStore.java b/helix-core/src/test/java/com/linkedin/helix/TestHierarchicalDataStore.java
deleted file mode 100644
index 89d1631..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestHierarchicalDataStore.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed 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 com.linkedin.helix;
-
-import org.testng.annotations.Test;
-import org.testng.AssertJUnit;
-import java.io.FileFilter;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.ZNRecord;
-import com.linkedin.helix.controller.HierarchicalDataHolder;
-import com.linkedin.helix.manager.zk.ZkClient;
-
-public class TestHierarchicalDataStore extends ZkUnitTestBase
-{
- protected static ZkClient _zkClientString = null;
-
- @Test (groups = {"unitTest"})
- public void testHierarchicalDataStore()
- {
- _zkClientString = new ZkClient(ZK_ADDR, 1000, 3000);
-
- String path = "/tmp/testHierarchicalDataStore";
- FileFilter filter = null;
- // _zkClient.setZkSerializer(new ZNRecordSerializer());
-
- _zkClientString.deleteRecursive(path);
- HierarchicalDataHolder<ZNRecord> dataHolder = new HierarchicalDataHolder<ZNRecord>(
- _zkClientString, path, filter);
- dataHolder.print();
- AssertJUnit.assertFalse(dataHolder.refreshData());
-
- // write data
- add(path, "root data");
- AssertJUnit.assertTrue(dataHolder.refreshData());
- dataHolder.print();
-
- // add some children
- add(path + "/child1", "child 1 data");
- add(path + "/child2", "child 2 data");
- AssertJUnit.assertTrue(dataHolder.refreshData());
- dataHolder.print();
-
- // add some grandchildren
- add(path + "/child1" + "/grandchild1", "grand child 1 data");
- add(path + "/child1" + "/grandchild2", "grand child 2 data");
- AssertJUnit.assertTrue(dataHolder.refreshData());
- dataHolder.print();
-
- AssertJUnit.assertFalse(dataHolder.refreshData());
-
- set(path + "/child1", "new child 1 data");
- AssertJUnit.assertTrue(dataHolder.refreshData());
- dataHolder.print();
- }
-
- private void set(String path, String data)
- {
- _zkClientString.writeData(path, data);
- }
-
- private void add(String path, String data)
- {
- _zkClientString.createPersistent(path, true);
- _zkClientString.writeData(path, data);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestParticipantHealthReportCollectorImpl.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestParticipantHealthReportCollectorImpl.java b/helix-core/src/test/java/com/linkedin/helix/TestParticipantHealthReportCollectorImpl.java
deleted file mode 100644
index ca578d6..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestParticipantHealthReportCollectorImpl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed 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 com.linkedin.helix;
-
-import org.testng.annotations.Test;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-import org.testng.AssertJUnit;
-
-import com.linkedin.helix.HelixManager;
-import com.linkedin.helix.Mocks.MockHealthReportProvider;
-import com.linkedin.helix.Mocks.MockManager;
-import com.linkedin.helix.healthcheck.*;
-public class TestParticipantHealthReportCollectorImpl {
-
- protected ParticipantHealthReportCollectorImpl _providerImpl;
- protected HelixManager _manager;
- protected MockHealthReportProvider _mockProvider;
-
- @BeforeMethod (groups = {"unitTest"})
- public void setup()
- {
- _providerImpl = new ParticipantHealthReportCollectorImpl(new MockManager(), "instance_123");
- _mockProvider = new MockHealthReportProvider();
- }
-
- @Test (groups = {"unitTest"})
- public void testStart() throws Exception
- {
- _providerImpl.start();
- _providerImpl.start();
- }
-
- @Test (groups = {"unitTest"})
- public void testStop() throws Exception
- {
- _providerImpl.stop();
- _providerImpl.stop();
- }
-
- @Test (groups = {"unitTest"})
- public void testAddProvider() throws Exception
- {
- _providerImpl.removeHealthReportProvider(_mockProvider);
- _providerImpl.addHealthReportProvider(_mockProvider);
- _providerImpl.addHealthReportProvider(_mockProvider);
- }
-
- @Test (groups = {"unitTest"})
- public void testRemoveProvider() throws Exception
- {
- _providerImpl.addHealthReportProvider(_mockProvider);
- _providerImpl.removeHealthReportProvider(_mockProvider);
- _providerImpl.removeHealthReportProvider(_mockProvider);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestPerfCounters.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestPerfCounters.java b/helix-core/src/test/java/com/linkedin/helix/TestPerfCounters.java
deleted file mode 100644
index 44478d9..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestPerfCounters.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed 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 com.linkedin.helix;
-
-
-import org.testng.AssertJUnit;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.healthcheck.DefaultPerfCounters;
-
-public class TestPerfCounters {
-
- final String INSTANCE_NAME = "instance_123";
- final long AVAILABLE_CPUS = 1;
- final long FREE_PHYSICAL_MEMORY = 2;
- final long FREE_JVM_MEMORY = 3;
- final long TOTAL_JVM_MEMORY = 4;
- final double AVERAGE_SYSTEM_LOAD = 5;
-
- DefaultPerfCounters _perfCounters;
-
- @BeforeTest ()
- public void setup()
- {
- _perfCounters = new DefaultPerfCounters(INSTANCE_NAME, AVAILABLE_CPUS,
- FREE_PHYSICAL_MEMORY, FREE_JVM_MEMORY, TOTAL_JVM_MEMORY,
- AVERAGE_SYSTEM_LOAD);
- }
-
- @Test ()
- public void testGetAvailableCpus()
- {
- AssertJUnit.assertEquals(AVAILABLE_CPUS,_perfCounters.getAvailableCpus());
- }
-
- @Test ()
- public void testGetAverageSystemLoad()
- {
- AssertJUnit.assertEquals(AVERAGE_SYSTEM_LOAD,_perfCounters.getAverageSystemLoad());
- }
-
- @Test ()
- public void testGetTotalJvmMemory()
- {
- AssertJUnit.assertEquals(TOTAL_JVM_MEMORY,_perfCounters.getTotalJvmMemory());
- }
-
- @Test ()
- public void testGetFreeJvmMemory()
- {
- AssertJUnit.assertEquals(FREE_JVM_MEMORY,_perfCounters.getFreeJvmMemory());
- }
-
- @Test ()
- public void testGetFreePhysicalMemory()
- {
- AssertJUnit.assertEquals(FREE_PHYSICAL_MEMORY,_perfCounters.getFreePhysicalMemory());
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestPerformanceHealthReportProvider.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestPerformanceHealthReportProvider.java b/helix-core/src/test/java/com/linkedin/helix/TestPerformanceHealthReportProvider.java
deleted file mode 100644
index eebc0fb..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestPerformanceHealthReportProvider.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed 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 com.linkedin.helix;
-
-import java.util.Map;
-
-import org.testng.AssertJUnit;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.Mocks.MockManager;
-import com.linkedin.helix.PropertyKey.Builder;
-import com.linkedin.helix.healthcheck.PerformanceHealthReportProvider;
-import com.linkedin.helix.model.HealthStat;
-
-public class TestPerformanceHealthReportProvider {
-
- protected static final String CLUSTER_NAME = "TestCluster";
- protected final String STAT_NAME = "Stat_123";
- protected final String PARTITION_NAME = "Partition_456";
- protected final String FAKE_STAT_NAME = "Stat_ABC";
- protected final String FAKE_PARTITION_NAME = "Partition_DEF";
- protected final String STORED_STAT = "789";
- protected final String INSTANCE_NAME = "instance:1";
-
- PerformanceHealthReportProvider _healthProvider;
- MockManager _helixManager;
-
- public void incrementPartitionStat() throws Exception
- {
- _helixManager = new MockManager(CLUSTER_NAME);
- _healthProvider.incrementPartitionStat(STAT_NAME, PARTITION_NAME);
- }
-
- public void transmitReport() throws Exception
- {
- _helixManager = new MockManager(CLUSTER_NAME);
- Map<String, Map<String, String>> partitionReport = _healthProvider
- .getRecentPartitionHealthReport();
- ZNRecord record = new ZNRecord(_healthProvider.getReportName());
- if (partitionReport != null) {
- record.setMapFields(partitionReport);
- }
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
-
- Builder keyBuilder = accessor.keyBuilder();
- accessor.setProperty(keyBuilder.healthReport(INSTANCE_NAME, record.getId()), new HealthStat(record));
- }
-
- @BeforeMethod ()
- public void setup()
- {
- _healthProvider = new PerformanceHealthReportProvider();
- }
-
- @Test ()
- public void testGetRecentHealthReports() throws Exception
- {
- _healthProvider.getRecentHealthReport();
- _healthProvider.getRecentPartitionHealthReport();
- }
-
- @Test ()
- public void testIncrementPartitionStat() throws Exception
- {
- //stat does not exist yet
- _healthProvider.incrementPartitionStat(STAT_NAME, PARTITION_NAME);
- transmitReport();
- //stat does exist
- _healthProvider.incrementPartitionStat(STAT_NAME, PARTITION_NAME);
- transmitReport();
- String retrievedStat = _healthProvider.getPartitionStat(STAT_NAME, PARTITION_NAME);
- AssertJUnit.assertEquals(2.0, Double.parseDouble(retrievedStat));
-
- //set to some other value
- _healthProvider.submitPartitionStat(STAT_NAME, PARTITION_NAME, STORED_STAT);
- transmitReport();
- _healthProvider.incrementPartitionStat(STAT_NAME, PARTITION_NAME);
- transmitReport();
- retrievedStat = _healthProvider.getPartitionStat(STAT_NAME, PARTITION_NAME);
- AssertJUnit.assertEquals(Double.parseDouble(retrievedStat), Double.parseDouble(STORED_STAT)+1);
- }
-
- @Test ()
- public void testSetGetPartitionStat() throws Exception
- {
- _healthProvider.submitPartitionStat(STAT_NAME, PARTITION_NAME, STORED_STAT);
- transmitReport();
- String retrievedStat = _healthProvider.getPartitionStat(STAT_NAME, PARTITION_NAME);
- //check on correct retrieval for real stat, real partition
- AssertJUnit.assertEquals(STORED_STAT, retrievedStat);
-
- //real stat, fake partition
- retrievedStat = _healthProvider.getPartitionStat(STAT_NAME, FAKE_PARTITION_NAME);
- AssertJUnit.assertNull(retrievedStat);
-
- //fake stat, real partition
- retrievedStat = _healthProvider.getPartitionStat(FAKE_STAT_NAME, PARTITION_NAME);
- AssertJUnit.assertNull(retrievedStat);
-
- //fake stat, fake partition
- retrievedStat = _healthProvider.getPartitionStat(FAKE_STAT_NAME, FAKE_PARTITION_NAME);
- AssertJUnit.assertNull(retrievedStat);
- }
-
- @Test ()
- public void testGetPartitionHealthReport() throws Exception
- {
- //test empty map case
- Map<String, Map<String, String>> resultMap = _healthProvider.getRecentPartitionHealthReport();
- AssertJUnit.assertEquals(resultMap.size(), 0);
-
- //test non-empty case
- testSetGetPartitionStat();
- resultMap = _healthProvider.getRecentPartitionHealthReport();
- //check contains 1 stat
- AssertJUnit.assertEquals(1, resultMap.size());
- //check contains STAT_NAME STAT
- AssertJUnit.assertTrue(resultMap.keySet().contains(STAT_NAME));
- Map<String, String> statMap = resultMap.get(STAT_NAME);
- //check statMap has size 1
- AssertJUnit.assertEquals(1, statMap.size());
- //check contains PARTITION_NAME
- AssertJUnit.assertTrue(statMap.keySet().contains(PARTITION_NAME));
- //check stored val
- String statVal = statMap.get(PARTITION_NAME);
- AssertJUnit.assertEquals(statVal, STORED_STAT);
- }
-
- @Test ()
- public void testPartitionStatReset() throws Exception
- {
- incrementPartitionStat();
- //ensure stat appears
- String retrievedStat = _healthProvider.getPartitionStat(STAT_NAME, PARTITION_NAME);
- AssertJUnit.assertEquals(1.0, Double.parseDouble(retrievedStat));
- //reset partition stats
- _healthProvider.resetStats();
- transmitReport();
- retrievedStat = _healthProvider.getPartitionStat(STAT_NAME, PARTITION_NAME);
- AssertJUnit.assertEquals(null, retrievedStat);
- }
-
- @Test ()
- public void testGetReportName() throws Exception
- {
- _healthProvider.getReportName();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestPropertyPathConfig.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestPropertyPathConfig.java b/helix-core/src/test/java/com/linkedin/helix/TestPropertyPathConfig.java
deleted file mode 100644
index fd67cda..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestPropertyPathConfig.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed 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 com.linkedin.helix;
-
-import org.testng.annotations.Test;
-import org.testng.AssertJUnit;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.PropertyPathConfig;
-import com.linkedin.helix.PropertyType;
-
-
-@Test
-public class TestPropertyPathConfig
-{
- @Test
- public void testGetPath()
- {
- String actual;
- actual = PropertyPathConfig.getPath(PropertyType.IDEALSTATES, "test_cluster");
- AssertJUnit.assertEquals(actual, "/test_cluster/IDEALSTATES");
- actual = PropertyPathConfig.getPath(PropertyType.IDEALSTATES, "test_cluster","resource");
- AssertJUnit.assertEquals(actual, "/test_cluster/IDEALSTATES/resource");
-
-
- actual = PropertyPathConfig.getPath(PropertyType.INSTANCES, "test_cluster","instanceName1");
- AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1");
-
- actual = PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, "test_cluster","instanceName1");
- AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1/CURRENTSTATES");
- actual = PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, "test_cluster","instanceName1","sessionId");
- AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1/CURRENTSTATES/sessionId");
-
- actual = PropertyPathConfig.getPath(PropertyType.CONTROLLER, "test_cluster");
- AssertJUnit.assertEquals(actual, "/test_cluster/CONTROLLER");
- actual = PropertyPathConfig.getPath(PropertyType.MESSAGES_CONTROLLER, "test_cluster");
- AssertJUnit.assertEquals(actual, "/test_cluster/CONTROLLER/MESSAGES");
-
-
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestRelayIdealStateCalculator.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestRelayIdealStateCalculator.java b/helix-core/src/test/java/com/linkedin/helix/TestRelayIdealStateCalculator.java
deleted file mode 100644
index f52430c..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestRelayIdealStateCalculator.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.linkedin.helix;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.model.IdealState;
-import com.linkedin.helix.tools.IdealStateCalculatorForEspressoRelay;
-
-public class TestRelayIdealStateCalculator
-{
- @Test ()
- public void testEspressoStorageClusterIdealState() throws Exception
- {
- testEspressoStorageClusterIdealState(15, 9, 3);
- testEspressoStorageClusterIdealState(15, 6, 3);
- testEspressoStorageClusterIdealState(15, 6, 2);
- testEspressoStorageClusterIdealState(6, 4, 2);
- }
- public void testEspressoStorageClusterIdealState(int partitions, int nodes, int replica) throws Exception
- {
- List<String> storageNodes = new ArrayList<String>();
- for(int i = 0;i < partitions; i++)
- {
- storageNodes.add("localhost:123" + i);
- }
-
- List<String> relays = new ArrayList<String>();
- for(int i = 0;i < nodes; i++)
- {
- relays.add("relay:123" + i);
- }
-
- IdealState idealstate = IdealStateCalculatorForEspressoRelay.calculateRelayIdealState(storageNodes, relays, "TEST", replica, "Leader", "Standby", "LeaderStandby");
-
- Assert.assertEquals(idealstate.getRecord().getListFields().size(), idealstate.getRecord().getMapFields().size());
-
- Map<String, Integer> countMap = new TreeMap<String, Integer>();
- for(String key : idealstate.getRecord().getListFields().keySet())
- {
- Assert.assertEquals(idealstate.getRecord().getListFields().get(key).size(), idealstate.getRecord().getMapFields().get(key).size());
- List<String> list = idealstate.getRecord().getListFields().get(key);
- Map<String, String> map = idealstate.getRecord().getMapFields().get(key);
- Assert.assertEquals(list.size(), replica);
- for(String val : list)
- {
- if(!countMap.containsKey(val))
- {
- countMap.put(val, 1);
- }
- else
- {
- countMap.put(val, countMap.get(val) + 1);
- }
- Assert.assertTrue(map.containsKey(val));
- }
- }
- for(String nodeName : countMap.keySet())
- {
- Assert.assertTrue(countMap.get(nodeName) <= partitions * replica / nodes + 1);
- //System.out.println(nodeName + " " + countMap.get(nodeName));
- }
- System.out.println();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestRoutingTable.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestRoutingTable.java b/helix-core/src/test/java/com/linkedin/helix/TestRoutingTable.java
deleted file mode 100644
index 7af6536..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestRoutingTable.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed 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 com.linkedin.helix;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-import org.testng.AssertJUnit;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.ConfigScope.ConfigScopeProperty;
-import com.linkedin.helix.Mocks.MockAccessor;
-import com.linkedin.helix.model.ExternalView;
-import com.linkedin.helix.model.InstanceConfig;
-import com.linkedin.helix.spectator.RoutingTableProvider;
-
-public class TestRoutingTable
-{
- NotificationContext changeContext = null;
-
- @BeforeClass()
- public synchronized void setup()
- {
-
- final String[] array = new String[] { "localhost_8900", "localhost_8901" };
- HelixManager manager = new Mocks.MockManager() {
- private MockAccessor _mockAccessor;
-
- @Override
-// public DataAccessor getDataAccessor()
- public HelixDataAccessor getHelixDataAccessor()
- {
- if (_mockAccessor == null)
- {
- _mockAccessor = new Mocks.MockAccessor() {
- @SuppressWarnings("unchecked")
- @Override
- public <T extends HelixProperty> List<T> getChildValues(PropertyKey key)
-// public List<ZNRecord> getChildValues(PropertyType type, String... keys)
- {
- PropertyType type = key.getType();
- String[] keys = key.getParams();
- if (type == PropertyType.CONFIGS && keys != null && keys.length > 1
- && keys[1].equalsIgnoreCase(ConfigScopeProperty.PARTICIPANT.toString()))
- {
- List<InstanceConfig> configs = new ArrayList<InstanceConfig>();
- for (String instanceName : array)
- {
- InstanceConfig config = new InstanceConfig(instanceName);
- String[] splits = instanceName.split("_");
- config.setHostName(splits[0]);
- config.setPort(splits[1]);
- configs.add(config);
- }
- return (List<T>) configs;
- }
- return Collections.emptyList();
- };
- };
- }
- return _mockAccessor;
- }
- };
- changeContext = new NotificationContext(manager);
- }
-
- @Test()
- public void testNullAndEmpty()
- {
-
- RoutingTableProvider routingTable = new RoutingTableProvider();
- routingTable.onExternalViewChange(null, changeContext);
- List<ExternalView> list = Collections.emptyList();
- routingTable.onExternalViewChange(list, changeContext);
-
- }
-
- @Test()
- public void testSimple()
- {
- List<InstanceConfig> instances;
- RoutingTableProvider routingTable = new RoutingTableProvider();
- ZNRecord record = new ZNRecord("TESTDB");
-
- // one master
- add(record, "TESTDB_0", "localhost_8900", "MASTER");
- List<ExternalView> externalViewList = new ArrayList<ExternalView>();
- externalViewList.add(new ExternalView(record));
- routingTable.onExternalViewChange(externalViewList, changeContext);
-
- instances = routingTable.getInstances("TESTDB", "TESTDB_0", "MASTER");
- AssertJUnit.assertNotNull(instances);
- AssertJUnit.assertEquals(instances.size(), 1);
-
- // additions
- add(record, "TESTDB_0", "localhost_8901", "MASTER");
- add(record, "TESTDB_1", "localhost_8900", "SLAVE");
-
- externalViewList = new ArrayList<ExternalView>();
- externalViewList.add(new ExternalView(record));
- routingTable.onExternalViewChange(externalViewList, changeContext);
- instances = routingTable.getInstances("TESTDB", "TESTDB_0", "MASTER");
- AssertJUnit.assertNotNull(instances);
- AssertJUnit.assertEquals(instances.size(), 2);
-
- instances = routingTable.getInstances("TESTDB", "TESTDB_1", "SLAVE");
- AssertJUnit.assertNotNull(instances);
- AssertJUnit.assertEquals(instances.size(), 1);
-
- // updates
- add(record, "TESTDB_0", "localhost_8901", "SLAVE");
- externalViewList = new ArrayList<ExternalView>();
- externalViewList.add(new ExternalView(record));
- routingTable.onExternalViewChange(externalViewList, changeContext);
- instances = routingTable.getInstances("TESTDB", "TESTDB_0", "SLAVE");
- AssertJUnit.assertNotNull(instances);
- AssertJUnit.assertEquals(instances.size(), 1);
- }
-
- @Test()
- public void testStateUnitGroupDeletion()
- {
- List<InstanceConfig> instances;
- RoutingTableProvider routingTable = new RoutingTableProvider();
-
- List<ExternalView> externalViewList = new ArrayList<ExternalView>();
- ZNRecord record = new ZNRecord("TESTDB");
-
- // one master
- add(record, "TESTDB_0", "localhost_8900", "MASTER");
- externalViewList.add(new ExternalView(record));
- routingTable.onExternalViewChange(externalViewList, changeContext);
- instances = routingTable.getInstances("TESTDB", "TESTDB_0", "MASTER");
- AssertJUnit.assertNotNull(instances);
- AssertJUnit.assertEquals(instances.size(), 1);
-
- externalViewList.clear();
- routingTable.onExternalViewChange(externalViewList, changeContext);
- instances = routingTable.getInstances("TESTDB", "TESTDB_0", "MASTER");
- AssertJUnit.assertNotNull(instances);
- AssertJUnit.assertEquals(instances.size(), 0);
- }
-
- @Test()
- public void testGetInstanceForAllStateUnits()
- {
- List<InstanceConfig> instancesList;
- Set<InstanceConfig> instancesSet;
- InstanceConfig instancesArray[];
- RoutingTableProvider routingTable = new RoutingTableProvider();
- List<ExternalView> externalViewList = new ArrayList<ExternalView>();
- ZNRecord record = new ZNRecord("TESTDB");
-
- // one master
- add(record, "TESTDB_0", "localhost_8900", "MASTER");
- add(record, "TESTDB_1", "localhost_8900", "MASTER");
- add(record, "TESTDB_2", "localhost_8900", "MASTER");
- add(record, "TESTDB_3", "localhost_8900", "SLAVE");
- add(record, "TESTDB_4", "localhost_8900", "SLAVE");
- add(record, "TESTDB_5", "localhost_8900", "SLAVE");
-
- add(record, "TESTDB_0", "localhost_8901", "SLAVE");
- add(record, "TESTDB_1", "localhost_8901", "SLAVE");
- add(record, "TESTDB_2", "localhost_8901", "SLAVE");
- add(record, "TESTDB_3", "localhost_8901", "MASTER");
- add(record, "TESTDB_4", "localhost_8901", "MASTER");
- add(record, "TESTDB_5", "localhost_8901", "MASTER");
-
- externalViewList.add(new ExternalView(record));
- routingTable.onExternalViewChange(externalViewList, changeContext);
- instancesList = routingTable.getInstances("TESTDB", "TESTDB_0", "MASTER");
- AssertJUnit.assertNotNull(instancesList);
- AssertJUnit.assertEquals(instancesList.size(), 1);
- instancesSet = routingTable.getInstances("TESTDB", "MASTER");
- AssertJUnit.assertNotNull(instancesSet);
- AssertJUnit.assertEquals(instancesSet.size(), 2);
- instancesSet = routingTable.getInstances("TESTDB", "SLAVE");
- AssertJUnit.assertNotNull(instancesSet);
- AssertJUnit.assertEquals(instancesSet.size(), 2);
- instancesArray = new InstanceConfig[instancesSet.size()];
- instancesSet.toArray(instancesArray);
- AssertJUnit.assertEquals(instancesArray[0].getHostName(), "localhost");
- AssertJUnit.assertEquals(instancesArray[0].getPort(), "8900");
- AssertJUnit.assertEquals(instancesArray[1].getHostName(), "localhost");
- AssertJUnit.assertEquals(instancesArray[1].getPort(), "8901");
- }
-
- @Test()
- public void testMultiThread() throws Exception
- {
- final RoutingTableProvider routingTable = new RoutingTableProvider();
- List<ExternalView> externalViewList = new ArrayList<ExternalView>();
- ZNRecord record = new ZNRecord("TESTDB");
- for (int i = 0; i < 1000; i++)
- {
- add(record, "TESTDB_" + i, "localhost_8900", "MASTER");
- }
- externalViewList.add(new ExternalView(record));
- routingTable.onExternalViewChange(externalViewList, changeContext);
- Callable<Boolean> runnable = new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception
- {
-
- try
- {
- int count = 0;
- while (count < 100)
- {
- List<InstanceConfig> instancesList = routingTable.getInstances("TESTDB", "TESTDB_0",
- "MASTER");
- AssertJUnit.assertEquals(instancesList.size(), 1);
- // System.out.println(System.currentTimeMillis() + "-->"
- // + instancesList.size());
-
- Thread.sleep(5);
-
- count++;
- }
- } catch (InterruptedException e)
- {
- // e.printStackTrace();
- }
- return true;
- }
- };
- ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
- Future<Boolean> submit = executor.submit(runnable);
- int count = 0;
- while (count < 10)
- {
- try
- {
- Thread.sleep(10);
- } catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- routingTable.onExternalViewChange(externalViewList, changeContext);
- count++;
- }
-
- Boolean result = submit.get(60, TimeUnit.SECONDS);
- AssertJUnit.assertEquals(result, Boolean.TRUE);
-
- }
-
- private void add(ZNRecord record, String stateUnitKey, String instanceName, String state)
- {
- Map<String, String> stateUnitKeyMap = record.getMapField(stateUnitKey);
- if (stateUnitKeyMap == null)
- {
- stateUnitKeyMap = new HashMap<String, String>();
- record.setMapField(stateUnitKey, stateUnitKeyMap);
- }
- stateUnitKeyMap.put(instanceName, state);
- record.setMapField(stateUnitKey, stateUnitKeyMap);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestSample.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestSample.java b/helix-core/src/test/java/com/linkedin/helix/TestSample.java
deleted file mode 100644
index 8e4146f..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestSample.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed 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 com.linkedin.helix;
-
-import org.apache.zookeeper.Watcher.Event.EventType;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-/**
- *
- * @author kgopalak
- *
- */
-
-public class TestSample
-{
-
- @Test ()
- public final void testCallbackHandler()
- {
- String path = null;
- Object listener = null;
- EventType[] eventTypes = null;
-
- }
-
- @BeforeMethod ()
- public void asd()
- {
- System.out.println("In Set up");
- }
-
- @Test ()
- public void testB()
- {
- System.out.println("In method testB");
-
- }
-
- @Test ()
- public void testA()
- {
- System.out.println("In method testA");
-
- }
-
- @AfterMethod ()
- public void sfds()
- {
- System.out.println("In tear down");
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/TestShuffledIdealState.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/TestShuffledIdealState.java b/helix-core/src/test/java/com/linkedin/helix/TestShuffledIdealState.java
deleted file mode 100644
index 54420bd..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/TestShuffledIdealState.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed 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 com.linkedin.helix;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.testng.Assert;
-import org.testng.AssertJUnit;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.ZNRecord;
-import com.linkedin.helix.tools.IdealCalculatorByConsistentHashing;
-import com.linkedin.helix.tools.IdealStateCalculatorByRush;
-import com.linkedin.helix.tools.IdealStateCalculatorByShuffling;
-
-public class TestShuffledIdealState
-{
- @Test ()
- public void testInvocation() throws Exception
- {
- int partitions = 6, replicas = 2;
- String dbName = "espressoDB1";
- List<String> instanceNames = new ArrayList<String>();
- instanceNames.add("localhost_1231");
- instanceNames.add("localhost_1232");
- instanceNames.add("localhost_1233");
- instanceNames.add("localhost_1234");
-
- ZNRecord result = IdealStateCalculatorByShuffling.calculateIdealState(
- instanceNames, partitions, replicas, dbName);
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "MASTER");
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "SLAVE");
-
- ZNRecord result2 = IdealStateCalculatorByRush.calculateIdealState(instanceNames, 1, partitions, replicas, dbName);
-
- ZNRecord result3 = IdealCalculatorByConsistentHashing.calculateIdealState(instanceNames, partitions, replicas, dbName, new IdealCalculatorByConsistentHashing.FnvHash());
- IdealCalculatorByConsistentHashing.printIdealStateStats(result3, "MASTER");
- IdealCalculatorByConsistentHashing.printIdealStateStats(result3, "SLAVE");
- IdealCalculatorByConsistentHashing.printIdealStateStats(result3, "");
- IdealCalculatorByConsistentHashing.printNodeOfflineOverhead(result3);
-
- // System.out.println(result);
- ObjectMapper mapper = new ObjectMapper();
-
- // ByteArrayOutputStream baos = new ByteArrayOutputStream();
- StringWriter sw = new StringWriter();
- try
- {
- mapper.writeValue(sw, result);
- // System.out.println(sw.toString());
-
- ZNRecord zn = mapper.readValue(new StringReader(sw.toString()),
- ZNRecord.class);
- System.out.println(result.toString());
- System.out.println(zn.toString());
- AssertJUnit.assertTrue(zn.toString().equalsIgnoreCase(result.toString()));
- System.out.println();
-
- sw= new StringWriter();
- mapper.writeValue(sw, result2);
-
- ZNRecord zn2 = mapper.readValue(new StringReader(sw.toString()),
- ZNRecord.class);
- System.out.println(result2.toString());
- System.out.println(zn2.toString());
- AssertJUnit.assertTrue(zn2.toString().equalsIgnoreCase(result2.toString()));
-
- sw= new StringWriter();
- mapper.writeValue(sw, result3);
- System.out.println();
-
- ZNRecord zn3 = mapper.readValue(new StringReader(sw.toString()),
- ZNRecord.class);
- System.out.println(result3.toString());
- System.out.println(zn3.toString());
- AssertJUnit.assertTrue(zn3.toString().equalsIgnoreCase(result3.toString()));
- System.out.println();
-
- } catch (JsonGenerationException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (JsonMappingException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- @Test
- public void testShuffledIdealState()
- {
- // partitions is larger than nodes
- int partitions = 6, replicas = 2, instances = 4;
- String dbName = "espressoDB1";
- List<String> instanceNames = new ArrayList<String>();
- instanceNames.add("localhost_1231");
- instanceNames.add("localhost_1232");
- instanceNames.add("localhost_1233");
- instanceNames.add("localhost_1234");
-
- ZNRecord result = IdealStateCalculatorByShuffling.calculateIdealState(
- instanceNames, partitions, replicas, dbName);
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "MASTER");
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "SLAVE");
- Assert.assertTrue(verify(result));
-
- // partition is less than nodes
- instanceNames.clear();
- partitions = 4;
- replicas = 3;
- instances = 7;
-
- for(int i = 0; i<instances; i++)
- {
- instanceNames.add("localhost_" + (1231 + i));
- }
- result = IdealStateCalculatorByShuffling.calculateIdealState(
- instanceNames, partitions, replicas, dbName);
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "MASTER");
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "SLAVE");
- Assert.assertTrue(verify(result));
-
- // partitions is multiple of nodes
- instanceNames.clear();
- partitions = 14;
- replicas = 3;
- instances = 7;
-
- for(int i = 0; i<instances; i++)
- {
- instanceNames.add("localhost_" + (1231 + i));
- }
- result = IdealStateCalculatorByShuffling.calculateIdealState(
- instanceNames, partitions, replicas, dbName);
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "MASTER");
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "SLAVE");
- Assert.assertTrue(verify(result));
-
- // nodes are multiple of partitions
- instanceNames.clear();
- partitions = 4;
- replicas = 3;
- instances = 8;
-
- for(int i = 0; i<instances; i++)
- {
- instanceNames.add("localhost_" + (1231 + i));
- }
- result = IdealStateCalculatorByShuffling.calculateIdealState(
- instanceNames, partitions, replicas, dbName);
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "MASTER");
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "SLAVE");
- Assert.assertTrue(verify(result));
-
- // nodes are multiple of partitions
- instanceNames.clear();
- partitions = 4;
- replicas = 3;
- instances = 12;
-
- for(int i = 0; i<instances; i++)
- {
- instanceNames.add("localhost_" + (1231 + i));
- }
- result = IdealStateCalculatorByShuffling.calculateIdealState(
- instanceNames, partitions, replicas, dbName);
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "MASTER");
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "SLAVE");
- Assert.assertTrue(verify(result));
-
- // Just fits
- instanceNames.clear();
- partitions = 4;
- replicas = 2;
- instances = 12;
-
- for(int i = 0; i<instances; i++)
- {
- instanceNames.add("localhost_" + (1231 + i));
- }
- result = IdealStateCalculatorByShuffling.calculateIdealState(
- instanceNames, partitions, replicas, dbName);
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "MASTER");
- IdealCalculatorByConsistentHashing.printIdealStateStats(result, "SLAVE");
- Assert.assertTrue(verify(result));
- }
-
- boolean verify(ZNRecord result)
- {
- Map<String, Integer> masterPartitionCounts = new HashMap<String, Integer>();
- Map<String, Integer> slavePartitionCounts = new HashMap<String, Integer>();
-
- for(String key : result.getMapFields().keySet())
- {
- Map<String, String> mapField = result.getMapField(key);
- int masterCount = 0;
- for(String host: mapField.keySet())
- {
- if(mapField.get(host).equals("MASTER"))
- {
- Assert.assertTrue(masterCount == 0);
- masterCount ++;
- if(!masterPartitionCounts.containsKey(host))
- {
- masterPartitionCounts.put(host, 0);
- }
- else
- {
- masterPartitionCounts.put(host, masterPartitionCounts.get(host) + 1);
- }
- }
- else
- {
- if(!slavePartitionCounts.containsKey(host))
- {
- slavePartitionCounts.put(host, 0);
- }
- else
- {
- slavePartitionCounts.put(host, slavePartitionCounts.get(host) + 1);
- }
- }
- }
- }
-
- List<Integer> masterCounts = new ArrayList<Integer>();
- List<Integer> slaveCounts = new ArrayList<Integer>();
- masterCounts.addAll(masterPartitionCounts.values());
- slaveCounts.addAll(slavePartitionCounts.values());
- Collections.sort(masterCounts);
- Collections.sort(slaveCounts);
-
- Assert.assertTrue(masterCounts.get(masterCounts.size() - 1 ) - masterCounts.get(0) <= 1);
-
- Assert.assertTrue(slaveCounts.get(slaveCounts.size() - 1 ) - slaveCounts.get(0) <= 2);
- return true;
- }
-}