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
[33/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/alerts/TestArrivingParticipantStats.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/alerts/TestArrivingParticipantStats.java b/helix-core/src/test/java/com/linkedin/helix/alerts/TestArrivingParticipantStats.java
deleted file mode 100644
index 861e6b3..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/alerts/TestArrivingParticipantStats.java
+++ /dev/null
@@ -1,485 +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.alerts;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.testng.AssertJUnit;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.HelixDataAccessor;
-import com.linkedin.helix.Mocks.MockManager;
-import com.linkedin.helix.PropertyKey.Builder;
-import com.linkedin.helix.ZNRecord;
-import com.linkedin.helix.controller.stages.HealthDataCache;
-
-public class TestArrivingParticipantStats
-{
- protected static final String CLUSTER_NAME = "TestCluster";
-
- MockManager _helixManager;
- StatsHolder _statsHolder;
-
- @BeforeMethod(groups = { "unitTest" })
- public void setup()
- {
- _helixManager = new MockManager(CLUSTER_NAME);
- _statsHolder = new StatsHolder(_helixManager, new HealthDataCache());
- }
-
- public Map<String, String> getStatFields(String value, String timestamp)
- {
- Map<String, String> statMap = new HashMap<String, String>();
- statMap.put(StatsHolder.VALUE_NAME, value);
- statMap.put(StatsHolder.TIMESTAMP_NAME, timestamp);
- return statMap;
- }
-
- public boolean statRecordContains(ZNRecord rec, String statName)
- {
- Map<String, Map<String, String>> stats = rec.getMapFields();
- return stats.containsKey(statName);
- }
-
- public boolean statRecordHasValue(ZNRecord rec, String statName, String value)
- {
- Map<String, Map<String, String>> stats = rec.getMapFields();
- Map<String, String> statFields = stats.get(statName);
- return (statFields.get(StatsHolder.VALUE_NAME).equals(value));
- }
-
- public boolean statRecordHasTimestamp(ZNRecord rec, String statName, String timestamp)
- {
- Map<String, Map<String, String>> stats = rec.getMapFields();
- Map<String, String> statFields = stats.get(statName);
- return (statFields.get(StatsHolder.TIMESTAMP_NAME).equals(timestamp));
- }
-
- // Exact matching persistent stat, but has no values yet
- @Test(groups = { "unitTest" })
- public void testAddFirstParticipantStat() throws Exception
- {
- // add a persistent stat
- String persistentStat = "accumulate()(dbFoo.partition10.latency)";
- _statsHolder.addStat(persistentStat);
-
- // generate incoming stat
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("0", "0");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "0.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "0.0"));
- }
-
- // Exact matching persistent stat, but has no values yet
- @Test(groups = { "unitTest" })
- public void testAddRepeatParticipantStat() throws Exception
- {
- // add a persistent stat
- String persistentStat = "accumulate()(dbFoo.partition10.latency)";
- _statsHolder.addStat(persistentStat);
-
- // generate incoming stat
- String incomingStatName = "dbFoo.partition10.latency";
- // apply stat once and then again
- Map<String, String> statFields = getStatFields("0", "0");
- _statsHolder.applyStat(incomingStatName, statFields);
- statFields = getStatFields("1", "10");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "1.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "10.0"));
- }
-
- // test to ensure backdated stats not applied
- @Test(groups = { "unitTest" })
- public void testBackdatedParticipantStat() throws Exception
- {
- // add a persistent stat
- String persistentStat = "accumulate()(dbFoo.partition10.latency)";
- _statsHolder.addStat(persistentStat);
-
- // generate incoming stat
- String incomingStatName = "dbFoo.partition10.latency";
- // apply stat once and then again
- Map<String, String> statFields = getStatFields("0", "0");
- _statsHolder.applyStat(incomingStatName, statFields);
- statFields = getStatFields("1", "10");
- _statsHolder.applyStat(incomingStatName, statFields);
- statFields = getStatFields("5", "15");
- _statsHolder.applyStat(incomingStatName, statFields);
- statFields = getStatFields("1", "10");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "6.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "15.0"));
- }
-
- // Exact matching persistent stat, but has no values yet
- @Test(groups = { "unitTest" })
- public void testAddFirstParticipantStatToWildCard() throws Exception
- {
- // add a persistent stat
- String persistentWildcardStat = "accumulate()(dbFoo.partition*.latency)";
- _statsHolder.addStat(persistentWildcardStat);
-
- // generate incoming stat
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("0", "0");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- String persistentStat = "accumulate()(dbFoo.partition10.latency)";
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "0.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "0.0"));
- }
-
- // test to add 2nd report to same stat
- @Test(groups = { "unitTest" })
- public void testAddSecondParticipantStatToWildCard() throws Exception
- {
- // add a persistent stat
- String persistentWildcardStat = "accumulate()(dbFoo.partition*.latency)";
- _statsHolder.addStat(persistentWildcardStat);
-
- // generate incoming stat
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("1", "0");
- _statsHolder.applyStat(incomingStatName, statFields);
- statFields = getStatFields("1", "10");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- String persistentStat = "accumulate()(dbFoo.partition10.latency)";
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "2.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "10.0"));
- }
-
- // Exact matching persistent stat, but has no values yet
- @Test(groups = { "unitTest" })
- public void testAddParticipantStatToDoubleWildCard() throws Exception
- {
- // add a persistent stat
- String persistentWildcardStat = "accumulate()(db*.partition*.latency)";
- _statsHolder.addStat(persistentWildcardStat);
-
- // generate incoming stat
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("0", "0");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- String persistentStat = "accumulate()(dbFoo.partition10.latency)";
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "0.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "0.0"));
- }
-
- @Test(groups = { "unitTest" })
- public void testAddWildcardInFirstStatToken() throws Exception
- {
- String persistentWildcardStat = "accumulate()(instance*.reportingage)";
- _statsHolder.addStat(persistentWildcardStat);
-
- // generate incoming stat
- String incomingStatName = "instance10.reportingage";
- Map<String, String> statFields = getStatFields("1", "10");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- String persistentStat = "accumulate()(instance10.reportingage)";
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "1.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "10.0"));
-
- }
-
- // test to add report to same wildcard stat, different actual stat
- @Test(groups = { "unitTest" })
- public void testAddTwoDistinctParticipantStatsToSameWildCard() throws Exception
- {
- // add a persistent stat
- String persistentWildcardStat = "accumulate()(dbFoo.partition*.latency)";
- _statsHolder.addStat(persistentWildcardStat);
-
- // generate incoming stat
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("1", "10");
- _statsHolder.applyStat(incomingStatName, statFields);
- incomingStatName = "dbFoo.partition11.latency";
- statFields = getStatFields("5", "10");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- String persistentStat = "accumulate()(dbFoo.partition10.latency)";
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "1.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "10.0"));
- persistentStat = "accumulate()(dbFoo.partition11.latency)";
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "5.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "10.0"));
- }
-
- // Exact matching persistent stat, but has no values yet
- @Test(groups = { "unitTest" })
- public void testWindowStat() throws Exception
- {
- // add a persistent stat
- String persistentWildcardStat = "window(3)(dbFoo.partition*.latency)";
- _statsHolder.addStat(persistentWildcardStat);
-
- // generate incoming stat
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("0", "0");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- String persistentStat = "window(3)(dbFoo.partition10.latency)";
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "0.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "0.0"));
-
- // add 2nd stat
- statFields = getStatFields("10", "1");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "0.0,10.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "0.0,1.0"));
-
- // add 3rd stat
- statFields = getStatFields("20", "2");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "0.0,10.0,20.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "0.0,1.0,2.0"));
-
- }
-
- @Test(groups = { "unitTest" })
- public void testWindowStatExpiration() throws Exception
- {
- String persistentWildcardStat = "window(3)(dbFoo.partition*.latency)";
- String persistentStat = "window(3)(dbFoo.partition10.latency)";
- // init with 3 elements
- testWindowStat();
-
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("30", "3");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "10.0,20.0,30.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "1.0,2.0,3.0"));
- }
-
- @Test(groups = { "unitTest" })
- public void testWindowStatStale() throws Exception
- {
- String persistentWildcardStat = "window(3)(dbFoo.partition*.latency)";
- String persistentStat = "window(3)(dbFoo.partition10.latency)";
- // init with 3 elements
- testWindowStat();
-
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("10", "1");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "0.0,10.0,20.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "0.0,1.0,2.0"));
- }
-
- // test that has 2 agg stats for same raw stat
- // Exact matching persistent stat, but has no values yet
- @Test(groups = { "unitTest" })
- public void testAddStatForTwoAggTypes() throws Exception
- {
- // add a persistent stat
- String persistentStatOne = "accumulate()(dbFoo.partition10.latency)";
- String persistentStatTwo = "window(3)(dbFoo.partition10.latency)";
- _statsHolder.addStat(persistentStatOne);
- _statsHolder.persistStats();
- _statsHolder.addStat(persistentStatTwo);
- _statsHolder.persistStats();
-
- // generate incoming stat
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("0", "0");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
-
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStatOne, "0.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStatOne, "0.0"));
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStatTwo, "0.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStatTwo, "0.0"));
- }
-
- // test merging 2 window stats, new is applied
- @Test(groups = { "unitTest" })
- public void testMergeTwoWindowsYesMerge() throws Exception
- {
- String persistentWildcardStat = "window(3)(dbFoo.partition*.latency)";
- String persistentStat = "window(3)(dbFoo.partition10.latency)";
- String incomingStatName = "dbFoo.partition10.latency";
- // init with 3 elements
- testWindowStat();
-
- // create a two tuples, value and time
- Tuple<String> valTuple = new Tuple<String>();
- Tuple<String> timeTuple = new Tuple<String>();
- valTuple.add("30.0");
- valTuple.add("40.0");
- timeTuple.add("3.0");
- timeTuple.add("4.0");
- Map<String, String> statFields =
- getStatFields(valTuple.toString(), timeTuple.toString());
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "20.0,30.0,40.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "2.0,3.0,4.0"));
- }
-
- // test merging 2 window stats, new is ignored
- @Test(groups = { "unitTest" })
- public void testMergeTwoWindowsNoMerge() throws Exception
- {
- String persistentWildcardStat = "window(3)(dbFoo.partition*.latency)";
- String persistentStat = "window(3)(dbFoo.partition10.latency)";
- String incomingStatName = "dbFoo.partition10.latency";
- // init with 3 elements
- testWindowStat();
-
- // create a two tuples, value and time
- Tuple<String> valTuple = new Tuple<String>();
- Tuple<String> timeTuple = new Tuple<String>();
- valTuple.add("0.0");
- valTuple.add("40.0");
- timeTuple.add("0.0");
- timeTuple.add("4.0");
- Map<String, String> statFields =
- getStatFields(valTuple.toString(), timeTuple.toString());
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- // check persistent stats
- HelixDataAccessor accessor = _helixManager.getHelixDataAccessor();
- Builder keyBuilder = accessor.keyBuilder();
-
- ZNRecord rec = accessor.getProperty(keyBuilder.persistantStat()).getRecord();
- System.out.println("rec: " + rec.toString());
- AssertJUnit.assertTrue(statRecordHasValue(rec, persistentStat, "0.0,10.0,20.0"));
- AssertJUnit.assertTrue(statRecordHasTimestamp(rec, persistentStat, "0.0,1.0,2.0"));
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/alerts/TestBaseStatsValidation.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/alerts/TestBaseStatsValidation.java b/helix-core/src/test/java/com/linkedin/helix/alerts/TestBaseStatsValidation.java
deleted file mode 100644
index f2f4bad..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/alerts/TestBaseStatsValidation.java
+++ /dev/null
@@ -1,181 +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.alerts;
-
-import org.testng.annotations.Test;
-import org.testng.AssertJUnit;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.HelixException;
-import com.linkedin.helix.alerts.ExpressionOperatorType;
-import com.linkedin.helix.alerts.ExpressionParser;
-
-@Test
-public class TestBaseStatsValidation {
-
- @Test
- public void testParseSingletonExpression()
- {
- String[] actual = null;
-
- String statName = "window(5)(dbFoo.partition10.latency)";
- try {
- actual = ExpressionParser.getBaseStats(statName);
- } catch (HelixException e) {
- e.printStackTrace();
- }
- AssertJUnit.assertEquals(statName, actual[0]);
- }
-
- @Test
- public void testExtraParen()
- {
- String[] actual = null;
-
- String statName = "window(5)(dbFoo.partition10.latency)()";
- boolean caughtException = false;
- try {
- actual = ExpressionParser.getBaseStats(statName);
- } catch (HelixException e) {
- caughtException = true;
- //e.printStackTrace();
- }
- AssertJUnit.assertEquals(true, caughtException);
- }
-
-
- @Test
- public void testParseSingletonWildcardExpression()
- {
- String[] actual = null;
-
- String statName = "accumulate()(dbFoo.partition*.latency)";
- try {
- actual = ExpressionParser.getBaseStats(statName);
- } catch (HelixException e) {
- e.printStackTrace();
- }
- AssertJUnit.assertEquals(statName, actual[0]);
- }
-
- @Test
- public void testParsePairOfExpressions()
- {
- String[] actual = null;
-
- String expression = "accumulate()(dbFoo.partition10.latency, dbFoo.partition10.count)";
- try {
- actual = ExpressionParser.getBaseStats(expression);
- } catch (HelixException e) {
- e.printStackTrace();
- }
- AssertJUnit.assertEquals("accumulate()(dbFoo.partition10.latency)",actual[0]);
- AssertJUnit.assertEquals("accumulate()(dbFoo.partition10.count)",actual[1]);
- }
-
-
- /*
- * SUM is not to be persisted, so pull out the pieces
- */
- @Test
- public void testSUMExpression()
- {
- String[] actual = null;
-
- String expression = "accumulate()(dbFoo.partition*.latency)|SUM";
- try {
- actual = ExpressionParser.getBaseStats(expression);
- } catch (HelixException e) {
- e.printStackTrace();
- }
- AssertJUnit.assertEquals("accumulate()(dbFoo.partition*.latency)", actual[0]);
- }
-
- @Test
- public void testSumPairExpression()
- {
- String[] actual = null;
-
- String expression = "window(5)(dbFoo.partition10.latency, dbFoo.partition11.latency)|SUM";
- try {
- actual = ExpressionParser.getBaseStats(expression);
- } catch (HelixException e) {
- e.printStackTrace();
- }
- AssertJUnit.assertEquals("window(5)(dbFoo.partition10.latency)", actual[0]);
- AssertJUnit.assertEquals("window(5)(dbFoo.partition11.latency)", actual[1]);
- }
-
- @Test
- public void testEachPairExpression()
- {
- String[] actual = null;
-
- String expression = "accumulate()(dbFoo.partition*.latency, dbFoo.partition*.count)|EACH";
- try {
- actual = ExpressionParser.getBaseStats(expression);
- } catch (HelixException e) {
- e.printStackTrace();
- }
- AssertJUnit.assertEquals("accumulate()(dbFoo.partition*.latency)", actual[0]);
- AssertJUnit.assertEquals("accumulate()(dbFoo.partition*.count)", actual[1]);
- }
-
- @Test
- public void testAccumulateExpression()
- {
- String[] actual = null;
-
- String expression = "accumulate()(dbFoo.partition10.latency)|ACCUMULATE";
- try {
- actual = ExpressionParser.getBaseStats(expression);
- } catch (HelixException e) {
- e.printStackTrace();
- }
- AssertJUnit.assertEquals("accumulate()(dbFoo.partition10.latency)", actual[0]);
- }
-
- @Test
- public void testAccumulateEachExpression()
- {
- String[] actual = null;
-
- String expression = "window(5)(dbFoo.partition*.latency)|EACH|ACCUMULATE";
- try {
- actual = ExpressionParser.getBaseStats(expression);
- } catch (HelixException e) {
- e.printStackTrace();
- }
- AssertJUnit.assertEquals("window(5)(dbFoo.partition*.latency)", actual[0]);
- }
-
- @Test
- public void testAccumulateEachPairExpression()
- {
- String[] actual = null;
-
- String expression = "accumulate()(dbFoo.partition*.latency, dbFoo.partition*.count)|EACH|ACCUMULATE|DIVIDE";
- try {
- actual = ExpressionParser.getBaseStats(expression);
- } catch (HelixException e) {
- e.printStackTrace();
- }
- AssertJUnit.assertEquals("accumulate()(dbFoo.partition*.latency)", actual[0]);
- AssertJUnit.assertEquals("accumulate()(dbFoo.partition*.count)", actual[1]);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/alerts/TestEvaluateAlerts.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/alerts/TestEvaluateAlerts.java b/helix-core/src/test/java/com/linkedin/helix/alerts/TestEvaluateAlerts.java
deleted file mode 100644
index bdaeb5f..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/alerts/TestEvaluateAlerts.java
+++ /dev/null
@@ -1,386 +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.alerts;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.testng.AssertJUnit;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.HelixException;
-import com.linkedin.helix.Mocks.MockManager;
-import com.linkedin.helix.controller.stages.HealthDataCache;
-
-public class TestEvaluateAlerts {
- protected static final String CLUSTER_NAME = "TestCluster";
-
- MockManager _helixManager;
- AlertsHolder _alertsHolder;
- StatsHolder _statsHolder;
-
- public final String EXP = AlertParser.EXPRESSION_NAME;
- public final String CMP = AlertParser.COMPARATOR_NAME;
- public final String CON = AlertParser.CONSTANT_NAME;
-
- @BeforeMethod (groups = {"unitTest"})
- public void setup()
- {
- HealthDataCache cache = new HealthDataCache();
- _helixManager = new MockManager(CLUSTER_NAME);
- _alertsHolder = new AlertsHolder(_helixManager, cache);
- _statsHolder = _alertsHolder._statsHolder;
- }
-
- public Map<String,String> getStatFields(String value, String timestamp)
- {
- Map<String, String> statMap = new HashMap<String,String>();
- statMap.put(StatsHolder.VALUE_NAME, value);
- statMap.put(StatsHolder.TIMESTAMP_NAME, timestamp);
- return statMap;
- }
-
- public String getSimpleStat() throws HelixException
- {
- String stat = "accumulate()(dbFoo.partition10.latency)";
- //_statsHolder.addStat(stat);
- return stat;
- }
-
- public String addPairOfStats() throws HelixException
- {
- String stat = "accumulate()(dbFoo.partition10.latency, dbFoo.partition11.latency)";
- _statsHolder.addStat(stat);
- _statsHolder.persistStats();
- return stat;
- }
-
- public String getWildcardStat() throws HelixException
- {
- String stat = "accumulate()(dbFoo.partition*.latency)";
- //_statsHolder.addStat(stat);
- return stat;
- }
-
- public String addSimpleAlert() throws HelixException
- {
- String alert = EXP + "(accumulate()(dbFoo.partition10.latency))"
- + CMP + "(GREATER)" + CON + "(100)";
- _alertsHolder.addAlert(alert);
- return alert;
- }
-
- public String addWildcardAlert() throws HelixException
- {
- String alert = EXP + "(accumulate()(dbFoo.partition*.latency))"
- + CMP + "(GREATER)" + CON + "(100)";
- _alertsHolder.addAlert(alert);
- return alert;
- }
-
- public String addTwoWildcardAlert() throws HelixException
- {
- String alert = EXP + "(accumulate()(dbFoo.partition*.put*))"
- + CMP + "(GREATER)" + CON + "(100)";
- _alertsHolder.addAlert(alert);
- return alert;
- }
-
-
- public String addExpandWildcardAlert() throws HelixException
- {
- String alert = EXP + "(accumulate()(dbFoo.partition*.latency)|EXPAND)"
- + CMP + "(GREATER)" + CON + "(100)";
- _alertsHolder.addAlert(alert);
- return alert;
- }
-
- public String addExpandSumAlert() throws HelixException
- {
- String alert = EXP + "(accumulate()(dbFoo.partition10.latency,dbFoo.partition11.latency)|EXPAND|SUM)"
- + CMP + "(GREATER)" + CON + "(100)";
- _alertsHolder.addAlert(alert);
- return alert;
- }
-
- public String addExpandSumWildcardAlert() throws HelixException
- {
- String alert = EXP + "(accumulate()(dbFoo.partition*.success,dbFoo.partition*.failure)|EXPAND|SUM)"
- + CMP + "(GREATER)" + CON + "(100)";
- _alertsHolder.addAlert(alert);
- return alert;
- }
-
- public String addExpandSumEachWildcardAlert() throws HelixException
- {
- String alert = EXP + "(accumulate()(dbFoo.partition*.success,dbFoo.partition*.failure)|EXPAND|SUMEACH)"
- + CMP + "(GREATER)" + CON + "(100)";
- _alertsHolder.addAlert(alert);
- return alert;
- }
-
- public String addExpandSumEachSumWildcardAlert() throws HelixException
- {
- String alert = EXP + "(accumulate()(dbFoo.partition*.success,dbFoo.partition*.failure)|EXPAND|SUMEACH|SUM)"
- + CMP + "(GREATER)" + CON + "(100)";
- _alertsHolder.addAlert(alert);
- return alert;
- }
-
- public String addArrivingSimpleStat() throws HelixException
- {
- _statsHolder.refreshStats();
- String incomingStatName = "dbFoo.partition10.latency";
- Map<String, String> statFields = getStatFields("110","0");
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
- return incomingStatName;
- }
-
- public String addArrivingPairOfStats() throws HelixException
- {
- _statsHolder.refreshStats();
- String incomingStatName1 = "dbFoo.partition10.latency";
- String incomingStatName2 = "dbFoo.partition11.latency";
- Map<String, String> statFields = getStatFields("50","0");
- _statsHolder.applyStat(incomingStatName1, statFields);
- statFields = getStatFields("51","0");
- _statsHolder.applyStat(incomingStatName2, statFields);
- _statsHolder.persistStats();
- return null;
- }
-
- @Test (groups = {"unitTest"})
- public void testSimpleAlertFires()
- {
- String alert = addSimpleAlert();
- String stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert);
- _statsHolder.refreshStats(); //need to refresh since not triggered by stats aggregation stage
- addArrivingSimpleStat();
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- boolean alertFired = alertResult.get(alert).get(AlertProcessor.noWildcardAlertKey).isFired();
- AssertJUnit.assertTrue(alertFired);
- }
-
- @Test (groups = {"unitTest"})
- public void testSimpleAlertNoStatArrivesFires()
- {
- String alert = addSimpleAlert();
- String stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert);
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- AssertJUnit.assertEquals(null, alertResult.get(AlertProcessor.noWildcardAlertKey));
- }
-
- @Test (groups = {"unitTest"})
- public void testWildcardAlertFires()
- {
- String alert = addWildcardAlert();
- String stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert);
- String incomingStatName = addArrivingSimpleStat();
-
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- String wildcardBinding = incomingStatName;
- boolean alertFired = alertResult.get(alert).get(wildcardBinding).isFired();
- AssertJUnit.assertTrue(alertFired);
- }
-
- @Test (groups = {"unitTest"})
- public void testExpandOperatorWildcardAlertFires()
- {
- String alert = addExpandWildcardAlert();
- String stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert);
- String incomingStatName = addArrivingSimpleStat();
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- String wildcardBinding = incomingStatName;
- boolean alertFired = alertResult.get(alert).get(wildcardBinding).isFired();
- AssertJUnit.assertTrue(alertFired);
- }
-
- @Test (groups = {"unitTest"})
- public void testExpandSumOperatorAlertFires()
- {
- String alert = addExpandSumAlert();
- String stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert);
- addArrivingPairOfStats();
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- boolean alertFired = alertResult.get(alert).get(AlertProcessor.noWildcardAlertKey).isFired();
- AssertJUnit.assertTrue(alertFired);
- }
-/**
- *
- * We need to re-decide how to support the feature to specify more than one stats in
- * an alert.
- *
- * Probabaly instead of
- * "(dbFoo.partition*.success,dbFoo.partition*.failure)", use the form
- * "(dbFoo.partition*.(success, failure))" as it seems that the stat source is always the
- * same.
- *
- //@Test (groups = {"unitTest"})
- public void testExpandSumOperatorWildcardAlert()
- {
- String alert = addExpandSumWildcardAlert();
- String stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert);
- String part10SuccStat = "dbFoo.partition10.success";
- String part10FailStat = "dbFoo.partition10.failure";
- String part11SuccStat = "dbFoo.partition11.success";
- String part11FailStat = "dbFoo.partition11.failure";
-
-
- Map<String, String> statFields = getStatFields("50","0");
- _statsHolder.applyStat(part10SuccStat, statFields);
- statFields = getStatFields("51","0");
- _statsHolder.applyStat(part10FailStat, statFields);
- statFields = getStatFields("50","0");
- _statsHolder.applyStat(part11SuccStat, statFields);
- statFields = getStatFields("49","0");
- _statsHolder.applyStat(part11FailStat, statFields);
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- boolean alertFired = alertResult.get(alert).get("10").isFired(); //10 should fire
- AssertJUnit.assertTrue(alertFired);
- alertFired = alertResult.get(alert).get("11").isFired(); //11 should not fire
- AssertJUnit.assertFalse(alertFired);
- }
-
- //@Test (groups = {"unitTest"})
- public void testExpandSumEachSumOperatorWildcardAlert()
- {
- String alert = addExpandSumEachSumWildcardAlert();
- String stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert);
- String part10SuccStat = "dbFoo.partition10.success";
- String part10FailStat = "dbFoo.partition10.failure";
- String part11SuccStat = "dbFoo.partition11.success";
- String part11FailStat = "dbFoo.partition11.failure";
-
-
- Map<String, String> statFields = getStatFields("50","0");
- _statsHolder.applyStat(part10SuccStat, statFields);
- statFields = getStatFields("51","0");
- _statsHolder.applyStat(part10FailStat, statFields);
- statFields = getStatFields("50","0");
- _statsHolder.applyStat(part11SuccStat, statFields);
- statFields = getStatFields("49","0");
- _statsHolder.applyStat(part11FailStat, statFields);
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- boolean alertFired = alertResult.get(alert).get(_statsHolder.getStatsList().get(0)).isFired(); //10 should fire
- AssertJUnit.assertTrue(alertFired);
- }
-
- //@Test (groups = {"unitTest"})
- public void testTwoAlerts()
- {
- //alert 1
- String alert1 = addSimpleAlert();
- String stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert1);
- addArrivingSimpleStat();
-
- //alert 2
- String alert2 = addExpandSumWildcardAlert();
- stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert2);
- String part10SuccStat = "dbFoo.partition10.success";
- String part10FailStat = "dbFoo.partition10.failure";
- String part11SuccStat = "dbFoo.partition11.success";
- String part11FailStat = "dbFoo.partition11.failure";
-
-
- Map<String, String> statFields = getStatFields("50","0");
- _statsHolder.applyStat(part10SuccStat, statFields);
- statFields = getStatFields("51","0");
- _statsHolder.applyStat(part10FailStat, statFields);
- statFields = getStatFields("50","0");
- _statsHolder.applyStat(part11SuccStat, statFields);
- statFields = getStatFields("49","0");
- _statsHolder.applyStat(part11FailStat, statFields);
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
-
- //alert 1 check
- boolean alertFired = alertResult.get(alert1).get(AlertProcessor.noWildcardAlertKey).isFired();
- AssertJUnit.assertTrue(alertFired);
-
- //alert 2 check
- alertFired = alertResult.get(alert2).get("10").isFired(); //10 should fire
- AssertJUnit.assertTrue(alertFired);
- alertFired = alertResult.get(alert2).get("11").isFired(); //11 should not fire
- AssertJUnit.assertFalse(alertFired);
-
- }
-*/
- @Test (groups = {"unitTest"})
- public void testAddWildcardInFirstStatToken() throws Exception
- {
- String alert = "EXP(decay(1)(instance*.reportingage))CMP(GREATER)CON(300)";
- _alertsHolder.addAlert(alert);
- _statsHolder.persistStats();
-
- _statsHolder.refreshStats();
- //generate incoming stat
- String incomingStatName = "instance10.reportingage";
- Map<String, String> statFields = getStatFields("301","10");
- _statsHolder.refreshStats();
-
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
-
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- String wildcardBinding = incomingStatName;
- boolean alertFired = alertResult.get(alert).get(wildcardBinding).isFired();
- AssertJUnit.assertTrue(alertFired);
- }
-
- @Test (groups = {"unitTest"})
- public void testTwoWildcardAlertFires()
- {
- //error is with * and )
- String alert = addTwoWildcardAlert();
- String stat = AlertParser.getComponent(AlertParser.EXPRESSION_NAME, alert);
- String incomingStatName = "dbFoo.partition10.putCount";
- Map<String, String> statFields = getStatFields("110","0");
- _statsHolder.refreshStats();
- _statsHolder.applyStat(incomingStatName, statFields);
- _statsHolder.persistStats();
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- String wildcardBinding = incomingStatName; //XXX: this is not going to work...need "Count" in here too.
- boolean alertFired = alertResult.get(alert).get(wildcardBinding).isFired();
- AssertJUnit.assertTrue(alertFired);
- }
-
- /* only supporting wildcards at end of components right now
- @Test (groups = {"unitTest"})
- public void testTwoWildcardsNotAtEndFires()
- {
- String alert = EXP + "(accumulate()(dbFoo.partition*.*Count))"
- + CMP + "(GREATER)" + CON + "(100)";
- _alertsHolder.addAlert(alert);
- String incomingStatName = "dbFoo.partition10.putCount";
- Map<String, String> statFields = getStatFields("110","0");
- _statsHolder.applyStat(incomingStatName, statFields);
- Map<String, Map<String, AlertValueAndStatus>> alertResult = AlertProcessor.executeAllAlerts(_alertsHolder.getAlertList(), _statsHolder.getStatsList());
- String wildcardBinding = "10,put"; //XXX: this is not going to work...need "Count" in here too.
- boolean alertFired = alertResult.get(alert).get(wildcardBinding).isFired();
- AssertJUnit.assertTrue(alertFired);
- }
- */
-
- //test using sumall
- //test using rows where some tuples are null (no stat sent)
- //test with window tuples where some windows are different lengths
- //anything else, look around at the code
-
- //next: review all older tests
- //next: actually write the fired alerts to ZK
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/alerts/TestOperators.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/alerts/TestOperators.java b/helix-core/src/test/java/com/linkedin/helix/alerts/TestOperators.java
deleted file mode 100644
index 0b84554..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/alerts/TestOperators.java
+++ /dev/null
@@ -1,289 +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.alerts;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.testng.AssertJUnit;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.alerts.SumEachOperator;
-import com.linkedin.helix.alerts.SumOperator;
-import com.linkedin.helix.alerts.Tuple;
-
-
-public class TestOperators {
-
- SumOperator _sumOp;
- SumEachOperator _sumEachOp;
-
- @BeforeMethod (groups = {"unitTest"})
- public void setup()
- {
- _sumOp = new SumOperator();
- _sumEachOp = new SumEachOperator();
- }
-
-
- @Test (groups = {"unitTest"})
- public void testTwoNulls()
- {
- Tuple<String> tup1 = null;
- Tuple<String> tup2 = null;
- List<Tuple<String>> tup1List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup2List = new ArrayList<Tuple<String>>();
- tup1List.add(tup1);
- tup2List.add(tup2);
- List<Iterator<Tuple<String>>> tupsList = new ArrayList<Iterator<Tuple<String>>>();
- tupsList.add(tup1List.iterator());
- tupsList.add(tup2List.iterator());
- List<Iterator<Tuple<String>>> result = _sumOp.execute(tupsList);
- AssertJUnit.assertEquals(1, result.size()); //should be just 1 iter
- Iterator<Tuple<String>> resultIter = result.get(0);
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup = resultIter.next();
- AssertJUnit.assertEquals(null, resultTup);
- }
-
- @Test (groups = {"unitTest"})
- public void testOneNullLeft()
- {
- Tuple<String> tup1 = null;
- Tuple<String> tup2 = new Tuple<String>();
- tup2.add("1.0");
- List<Tuple<String>> tup1List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup2List = new ArrayList<Tuple<String>>();
- tup1List.add(tup1);
- tup2List.add(tup2);
- List<Iterator<Tuple<String>>> tupsList = new ArrayList<Iterator<Tuple<String>>>();
- tupsList.add(tup1List.iterator());
- tupsList.add(tup2List.iterator());
- List<Iterator<Tuple<String>>> result = _sumOp.execute(tupsList);
- AssertJUnit.assertEquals(1, result.size()); //should be just 1 iter
- Iterator<Tuple<String>> resultIter = result.get(0);
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup = resultIter.next();
- AssertJUnit.assertEquals("1.0", resultTup.toString());
- }
-
- @Test (groups = {"unitTest"})
- public void testOneNullRight()
- {
- Tuple<String> tup1 = new Tuple<String>();
- Tuple<String> tup2 = null;
- tup1.add("1.0");
- List<Tuple<String>> tup1List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup2List = new ArrayList<Tuple<String>>();
- tup1List.add(tup1);
- tup2List.add(tup2);
- List<Iterator<Tuple<String>>> tupsList = new ArrayList<Iterator<Tuple<String>>>();
- tupsList.add(tup1List.iterator());
- tupsList.add(tup2List.iterator());
- List<Iterator<Tuple<String>>> result = _sumOp.execute(tupsList);
- AssertJUnit.assertEquals(1, result.size()); //should be just 1 iter
- Iterator<Tuple<String>> resultIter = result.get(0);
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup = resultIter.next();
- AssertJUnit.assertEquals("1.0", resultTup.toString());
- }
-
- @Test (groups = {"unitTest"})
- public void testTwoSingeltons()
- {
- Tuple<String> tup1 = new Tuple<String>();
- Tuple<String> tup2 = new Tuple<String>();
- tup1.add("1.0");
- tup2.add("2.0");
- List<Tuple<String>> tup1List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup2List = new ArrayList<Tuple<String>>();
- tup1List.add(tup1);
- tup2List.add(tup2);
- List<Iterator<Tuple<String>>> tupsList = new ArrayList<Iterator<Tuple<String>>>();
- tupsList.add(tup1List.iterator());
- tupsList.add(tup2List.iterator());
- List<Iterator<Tuple<String>>> result = _sumOp.execute(tupsList);
- AssertJUnit.assertEquals(1, result.size()); //should be just 1 iter
- Iterator<Tuple<String>> resultIter = result.get(0);
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup = resultIter.next();
- AssertJUnit.assertEquals("3.0", resultTup.toString());
- }
-
- @Test (groups = {"unitTest"})
- public void testThreeSingeltons()
- {
- Tuple<String> tup1 = new Tuple<String>();
- Tuple<String> tup2 = new Tuple<String>();
- Tuple<String> tup3 = new Tuple<String>();
- tup1.add("1.0");
- tup2.add("2.0");
- tup3.add("3.0");
- List<Tuple<String>> tup1List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup2List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup3List = new ArrayList<Tuple<String>>();
- tup1List.add(tup1);
- tup2List.add(tup2);
- tup3List.add(tup3);
- List<Iterator<Tuple<String>>> tupsList = new ArrayList<Iterator<Tuple<String>>>();
- tupsList.add(tup1List.iterator());
- tupsList.add(tup2List.iterator());
- tupsList.add(tup3List.iterator());
- List<Iterator<Tuple<String>>> result = _sumOp.execute(tupsList);
- AssertJUnit.assertEquals(1, result.size()); //should be just 1 iter
- Iterator<Tuple<String>> resultIter = result.get(0);
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup = resultIter.next();
- AssertJUnit.assertEquals("6.0", resultTup.toString());
- }
-
- @Test (groups = {"unitTest"})
- public void testThreeTriples()
- {
- Tuple<String> tup1 = new Tuple<String>();
- Tuple<String> tup2 = new Tuple<String>();
- Tuple<String> tup3 = new Tuple<String>();
- tup1.add("1.0"); tup1.add("2.0"); tup1.add("3.0");
- tup2.add("4.0"); tup2.add("5.0"); tup2.add("6.0");
- tup3.add("7.0"); tup3.add("8.0"); tup3.add("9.0");
- List<Tuple<String>> tup1List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup2List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup3List = new ArrayList<Tuple<String>>();
- tup1List.add(tup1);
- tup2List.add(tup2);
- tup3List.add(tup3);
- List<Iterator<Tuple<String>>> tupsList = new ArrayList<Iterator<Tuple<String>>>();
- tupsList.add(tup1List.iterator());
- tupsList.add(tup2List.iterator());
- tupsList.add(tup3List.iterator());
- List<Iterator<Tuple<String>>> result = _sumOp.execute(tupsList);
- AssertJUnit.assertEquals(1, result.size()); //should be just 1 iter
- Iterator<Tuple<String>> resultIter = result.get(0);
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup = resultIter.next();
- AssertJUnit.assertEquals("12.0,15.0,18.0", resultTup.toString());
- }
-
- @Test (groups = {"unitTest"})
- public void testThreeTriplesOneMissing()
- {
- Tuple<String> tup1 = new Tuple<String>();
- Tuple<String> tup2 = new Tuple<String>();
- Tuple<String> tup3 = new Tuple<String>();
- tup1.add("1.0"); tup1.add("2.0"); tup1.add("3.0");
- tup2.add("5.0"); tup2.add("6.0");
- tup3.add("7.0"); tup3.add("8.0"); tup3.add("9.0");
- List<Tuple<String>> tup1List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup2List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup3List = new ArrayList<Tuple<String>>();
- tup1List.add(tup1);
- tup2List.add(tup2);
- tup3List.add(tup3);
- List<Iterator<Tuple<String>>> tupsList = new ArrayList<Iterator<Tuple<String>>>();
- tupsList.add(tup1List.iterator());
- tupsList.add(tup2List.iterator());
- tupsList.add(tup3List.iterator());
- List<Iterator<Tuple<String>>> result = _sumOp.execute(tupsList);
- AssertJUnit.assertEquals(1, result.size()); //should be just 1 iter
- Iterator<Tuple<String>> resultIter = result.get(0);
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup = resultIter.next();
- //tuple 2 missing 1 entry, other 2 get bumped to right
- AssertJUnit.assertEquals("8.0,15.0,18.0", resultTup.toString());
- }
-
- //test multiple rows
- @Test (groups = {"unitTest"})
- public void testThreeTriplesOneMissingTwoRows()
- {
- Tuple<String> tup1Dot1 = new Tuple<String>();
- Tuple<String> tup2Dot1 = new Tuple<String>();
- Tuple<String> tup3Dot1 = new Tuple<String>();
- Tuple<String> tup1Dot2 = new Tuple<String>();
- Tuple<String> tup2Dot2 = new Tuple<String>();
- Tuple<String> tup3Dot2 = new Tuple<String>();
- tup1Dot1.add("1.0"); tup1Dot1.add("2.0"); tup1Dot1.add("3.0");
- tup2Dot1.add("5.0"); tup2Dot1.add("6.0");
- tup3Dot1.add("7.0"); tup3Dot1.add("8.0"); tup3Dot1.add("9.0");
- tup1Dot2.add("10.0"); tup1Dot2.add("11.0"); tup1Dot2.add("12.0");
- tup2Dot2.add("13.0"); tup2Dot2.add("14.0"); tup2Dot2.add("15.0");
- tup3Dot2.add("16.0"); tup3Dot2.add("17.0"); tup3Dot2.add("18.0");
- List<Tuple<String>> tup1List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup2List = new ArrayList<Tuple<String>>();
- List<Tuple<String>> tup3List = new ArrayList<Tuple<String>>();
- tup1List.add(tup1Dot1);
- tup2List.add(tup2Dot1);
- tup3List.add(tup3Dot1);
- tup1List.add(tup1Dot2);
- tup2List.add(tup2Dot2);
- tup3List.add(tup3Dot2);
- List<Iterator<Tuple<String>>> tupsList = new ArrayList<Iterator<Tuple<String>>>();
- tupsList.add(tup1List.iterator());
- tupsList.add(tup2List.iterator());
- tupsList.add(tup3List.iterator());
- List<Iterator<Tuple<String>>> result = _sumOp.execute(tupsList);
- AssertJUnit.assertEquals(1, result.size()); //should be just 1 iter
- Iterator<Tuple<String>> resultIter = result.get(0);
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup1 = resultIter.next();
- //tuple 2 missing 1 entry, other 2 get bumped to right
- AssertJUnit.assertEquals("8.0,15.0,18.0", resultTup1.toString());
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup2 = resultIter.next();
- AssertJUnit.assertEquals("39.0,42.0,45.0", resultTup2.toString());
- }
-
- @Test (groups = {"unitTest"})
- public void testSumAll()
- {
- Tuple<String> tup1 = new Tuple<String>();
- Tuple<String> tup2 = new Tuple<String>();
- Tuple<String> tup3 = new Tuple<String>();
- Tuple<String> tup4 = new Tuple<String>();
- Tuple<String> tup5 = new Tuple<String>();
- Tuple<String> tup6 = new Tuple<String>();
- tup1.add("1.0"); tup2.add("2.0"); tup3.add("3.0");
- tup4.add("4.0"); tup5.add("5.0"); tup6.add("6.0");
- List<Tuple<String>> list1 = new ArrayList<Tuple<String>>();
- List<Tuple<String>> list2 = new ArrayList<Tuple<String>>();
- List<Tuple<String>> list3 = new ArrayList<Tuple<String>>();
- list1.add(tup1); list1.add(tup4);
- list2.add(tup2); list2.add(tup5);
- list3.add(tup3); list3.add(tup6);
-
- List<Iterator<Tuple<String>>> tupsList = new ArrayList<Iterator<Tuple<String>>>();
- tupsList.add(list1.iterator());
- tupsList.add(list2.iterator());
- tupsList.add(list3.iterator());
- List<Iterator<Tuple<String>>> result = _sumEachOp.execute(tupsList);
- AssertJUnit.assertEquals(3, result.size()); //should be just 1 iter
- Iterator<Tuple<String>> resultIter = result.get(0);
- AssertJUnit.assertTrue(resultIter.hasNext());
- Tuple<String>resultTup1 = resultIter.next();
- AssertJUnit.assertEquals("5.0", resultTup1.toString());
- resultIter = result.get(1);
- AssertJUnit.assertTrue(resultIter.hasNext());
- resultTup1 = resultIter.next();
- AssertJUnit.assertEquals("7.0", resultTup1.toString());
- resultIter = result.get(2);
- AssertJUnit.assertTrue(resultIter.hasNext());
- resultTup1 = resultIter.next();
- AssertJUnit.assertEquals("9.0", resultTup1.toString());
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/alerts/TestStatsMatch.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/alerts/TestStatsMatch.java b/helix-core/src/test/java/com/linkedin/helix/alerts/TestStatsMatch.java
deleted file mode 100644
index ba0b35f..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/alerts/TestStatsMatch.java
+++ /dev/null
@@ -1,105 +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.alerts;
-
-import org.testng.annotations.Test;
-import org.testng.AssertJUnit;
-import org.testng.Assert;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.HelixException;
-import com.linkedin.helix.alerts.ExpressionParser;
-
-@Test
-public class TestStatsMatch {
-
- @Test
- public void testExactMatch()
- {
-
- String persistedStatName = "window(5)(dbFoo.partition10.latency)";
- String incomingStatName = "dbFoo.partition10.latency";
- AssertJUnit.assertTrue(ExpressionParser.isIncomingStatExactMatch(persistedStatName, incomingStatName));
- }
-
- @Test
- public void testSingleWildcardMatch()
- {
-
- String persistedStatName = "window(5)(dbFoo.partition*.latency)";
- String incomingStatName = "dbFoo.partition10.latency";
- AssertJUnit.assertTrue(ExpressionParser.isIncomingStatWildcardMatch(persistedStatName, incomingStatName));
- }
-
- @Test
- public void testDoubleWildcardMatch()
- {
-
- String persistedStatName = "window(5)(db*.partition*.latency)";
- String incomingStatName = "dbFoo.partition10.latency";
- AssertJUnit.assertTrue(ExpressionParser.isIncomingStatWildcardMatch(persistedStatName, incomingStatName));
- }
-
- @Test
- public void testWildcardMatchNoWildcard()
- {
-
- String persistedStatName = "window(5)(dbFoo.partition10.latency)";
- String incomingStatName = "dbFoo.partition10.latency";
- AssertJUnit.assertFalse(ExpressionParser.isIncomingStatWildcardMatch(persistedStatName, incomingStatName));
- }
-
- @Test
- public void testWildcardMatchTooManyFields()
- {
-
- String persistedStatName = "window(5)(dbFoo.partition*.latency)";
- String incomingStatName = "dbFoo.tableBar.partition10.latency";
- AssertJUnit.assertFalse(ExpressionParser.isIncomingStatWildcardMatch(persistedStatName, incomingStatName));
- }
-
- @Test
- public void testWildcardMatchTooFewFields()
- {
-
- String persistedStatName = "window(5)(dbFoo.partition*.latency)";
- String incomingStatName = "dbFoo.latency";
- AssertJUnit.assertFalse(ExpressionParser.isIncomingStatWildcardMatch(persistedStatName, incomingStatName));
- }
-
-
- @Test
- public void testBadWildcardRepeated()
- {
-
- String persistedStatName = "window(5)(dbFoo.partition**4.latency)";
- String incomingStatName = "dbFoo.partition10.latency";
- boolean match = ExpressionParser.isIncomingStatWildcardMatch(persistedStatName, incomingStatName);
-
- AssertJUnit.assertFalse(match);
- }
-
- @Test
- public void testBadWildcardNotAtEnd()
- {
-
- String persistedStatName = "window(5)(dbFoo.*partition.latency)";
- String incomingStatName = "dbFoo.partition10.latency";
- boolean match = ExpressionParser.isIncomingStatWildcardMatch(persistedStatName, incomingStatName);
-
- AssertJUnit.assertFalse(match);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/controller/TestControllerRebalancingTimer.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/controller/TestControllerRebalancingTimer.java b/helix-core/src/test/java/com/linkedin/helix/controller/TestControllerRebalancingTimer.java
deleted file mode 100644
index d86fd0d..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/controller/TestControllerRebalancingTimer.java
+++ /dev/null
@@ -1,286 +0,0 @@
-package com.linkedin.helix.controller;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.HelixDataAccessor;
-import com.linkedin.helix.HelixException;
-import com.linkedin.helix.PropertyKey.Builder;
-import com.linkedin.helix.TestHelper;
-import com.linkedin.helix.TestHelper.StartCMResult;
-import com.linkedin.helix.ZNRecord;
-import com.linkedin.helix.integration.ZkStandAloneCMTestBase;
-import com.linkedin.helix.josql.JsqlQueryListProcessor;
-import com.linkedin.helix.manager.zk.ZNRecordSerializer;
-import com.linkedin.helix.manager.zk.ZkClient;
-import com.linkedin.helix.model.ExternalView;
-import com.linkedin.helix.model.HealthStat;
-import com.linkedin.helix.model.IdealState;
-import com.linkedin.helix.model.IdealState.IdealStateProperty;
-import com.linkedin.helix.tools.ClusterSetup;
-import com.linkedin.helix.tools.ClusterStateVerifier;
-import com.linkedin.helix.tools.ClusterStateVerifier.BestPossAndExtViewZkVerifier;
-import com.linkedin.helix.tools.ClusterStateVerifier.MasterNbInExtViewVerifier;
-
-public class TestControllerRebalancingTimer extends ZkStandAloneCMTestBase
-{
- private static Logger LOG =
- Logger.getLogger(TestControllerRebalancingTimer.class);
-
- @Override
- @BeforeClass
- public void beforeClass() throws Exception
- {
-// Logger.getRootLogger().setLevel(Level.INFO);
- System.out.println("START " + CLASS_NAME + " at "
- + new Date(System.currentTimeMillis()));
-
- _zkClient = new ZkClient(ZK_ADDR);
- _zkClient.setZkSerializer(new ZNRecordSerializer());
- String namespace = "/" + CLUSTER_NAME;
- if (_zkClient.exists(namespace))
- {
- _zkClient.deleteRecursive(namespace);
- }
- _setupTool = new ClusterSetup(ZK_ADDR);
-
- // setup storage cluster
- _setupTool.addCluster(CLUSTER_NAME, true);
- _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, STATE_MODEL);
- for (int i = 0; i < NODE_NR; i++)
- {
- String storageNodeName = PARTICIPANT_PREFIX + ":" + (START_PORT + i);
- _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
- }
- _setupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, 3);
- IdealState idealState = _setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, TEST_DB);
- idealState.getRecord().setSimpleField(IdealStateProperty.REBALANCE_TIMER_PERIOD.toString(), "500");
-
- String scnTableQuery = "SELECT T1.instance as instance, T1.mapField as partition, T1.gen as gen, T1.seq as seq " +
- "FROM explodeMap(`INSTANCES/*/HEALTHREPORT/scnTable`) AS T1" +
- " JOIN LIVEINSTANCES as T2 using (T1.instance, T2.id)";
-
- String rankQuery = "SELECT instance, partition, gen, seq, T1.listIndex AS instanceRank " +
- " FROM scnTable JOIN explodeList(`IDEALSTATES/" + TEST_DB + "`) AS T1 " +
- "USING (scnTable.instance, T1.listVal) WHERE scnTable.partition=T1.listField";
-
- String masterSelectionQuery = "SELECT instance, partition, instanceRank, gen, (T.maxSeq-seq) AS seqDiff, seq FROM rankTable JOIN " +
- " (SELECT partition, max(to_number(seq)) AS maxSeq FROM rankTable GROUP BY partition) AS T USING(rankTable.partition, T.partition) " +
- " WHERE to_number(seqDiff) < 10 " +
- " ORDER BY partition, to_number(gen) desc, to_number(instanceRank), to_number(seqDiff)";
-
- StringBuffer combinedQueryStringList = new StringBuffer();
- combinedQueryStringList.append(scnTableQuery + JsqlQueryListProcessor.SEPARATOR+"scnTable;");
- combinedQueryStringList.append(rankQuery + JsqlQueryListProcessor.SEPARATOR+"rankTable;");
- combinedQueryStringList.append(masterSelectionQuery);
-
- String command = "-zkSvr " + ZK_ADDR + " -addResourceProperty "+ CLUSTER_NAME + " " + TEST_DB + " " + IdealState.QUERY_LIST.toString() + " "
- ;//+ "\""+ combinedQueryStringList.toString() +"\"";
- String[] args = command.split(" ");
-
- List<String> argsList = new ArrayList<String>();
- argsList.addAll(Arrays.asList(args));
- argsList.add("\""+ combinedQueryStringList.toString() +"\"");
- String[] allArgs = new String[argsList.size()];
- argsList.toArray(allArgs);
- ClusterSetup.processCommandLineArgs(allArgs);
-
- command = "-zkSvr " + ZK_ADDR + " -addResourceProperty "+ CLUSTER_NAME + " " + TEST_DB + " " + IdealState.IdealStateProperty.REBALANCE_TIMER_PERIOD.toString() + " 500";
-
- ClusterSetup.processCommandLineArgs(command.split(" "));
-
-
- // start dummy participants
- for (int i = 0; i < NODE_NR; i++)
- {
- String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
- if (_startCMResultMap.get(instanceName) != null)
- {
- LOG.error("fail to start particpant:" + instanceName
- + "(participant with same name already exists)");
- }
- else
- {
- StartCMResult result =
- TestHelper.startDummyProcess(ZK_ADDR, CLUSTER_NAME, instanceName);
- _startCMResultMap.put(instanceName, result);
- }
- }
-
- // start controller
- String controllerName = CONTROLLER_PREFIX + "_0";
- StartCMResult startResult =
- TestHelper.startController(CLUSTER_NAME,
- controllerName,
- ZK_ADDR,
- HelixControllerMain.STANDALONE);
- _startCMResultMap.put(controllerName, startResult);
-
- boolean result =
- ClusterStateVerifier.verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR,
- CLUSTER_NAME));
-
- result =
- ClusterStateVerifier.verifyByZkCallback(new BestPossAndExtViewZkVerifier(ZK_ADDR,
- CLUSTER_NAME));
- Assert.assertTrue(result);
- }
-
- @Test
- public void testMasterSelectionBySCN() throws Exception
- {
- String controllerName = CONTROLLER_PREFIX + "_0";
- StartCMResult startResult =
- _startCMResultMap.get(controllerName);
- HelixDataAccessor accessor = startResult._manager.getHelixDataAccessor();
-
- IdealState idealState = _setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, TEST_DB);
- Map<String, ZNRecord> scnTableMap = new HashMap<String, ZNRecord>();
- for (int i = 0; i < NODE_NR; i++)
- {
- String instance = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
- ZNRecord scnRecord = new ZNRecord("scnTable");
- scnRecord.setSimpleField("instance", instance);
- scnTableMap.put(instance, scnRecord);
- }
- String instanceDead = PARTICIPANT_PREFIX + "_" + (START_PORT + 0);
- for(int j = 0; j < _PARTITIONS; j++)
- {
- int seq = 50;
- String partition = TEST_DB + "_" + j;
- List<String> idealStatePrefList =
- idealState.getPreferenceList(partition);
- String idealStateMaster = idealStatePrefList.get(0);
- // Switch the scn order of the partitions mastered on instanceDead
- if(idealStateMaster.equals(instanceDead))
- {
- for(int x = 0; x < idealStatePrefList.size(); x++)
- {
- String instance = idealStatePrefList.get(x);
- ZNRecord scnRecord = scnTableMap.get(instance);
- if(!scnRecord.getMapFields().containsKey(partition))
- {
- scnRecord.setMapField(partition, new HashMap<String, String>());
- }
- Map<String, String> scnDetails = scnRecord.getMapField(partition);
- scnDetails.put("gen", "4");
- if(x > 0)
- {
- scnDetails.put("seq", "" + (seq - 22 + 11 *(x)));
- }
- else
- {
- scnDetails.put("seq", "100");
- }
- }
- }
- }
-
- for(String instanceName : scnTableMap.keySet())
- {
- Builder kb = accessor.keyBuilder();
- accessor.setProperty(kb.healthReport(instanceName, "scnTable"), new HealthStat(scnTableMap.get(instanceName)));
- }
-
- // kill a node, after a while the master should be the last one in the ideal state pref list
-
- _startCMResultMap.get(instanceDead)._manager.disconnect();
- _startCMResultMap.get(instanceDead)._thread.interrupt();
-
- Thread.sleep(1000);
-
- boolean verifyResult =
- ClusterStateVerifier.verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR,
- CLUSTER_NAME));
- Assert.assertTrue(verifyResult);
- Builder kb = accessor.keyBuilder();
- ExternalView ev = accessor.getProperty(kb.externalView(TEST_DB));
- for(String partitionName : idealState.getPartitionSet())
- {
- List<String> prefList = idealState.getPreferenceList(partitionName);
- if(prefList.get(0).equals(instanceDead))
- {
- String last = prefList.get(prefList.size() - 1);
- Assert.assertTrue(ev.getStateMap(partitionName).get(last).equals("MASTER"));
- }
- }
-
- // Bring up the previous dead node, but as the SCN is the last for all the
- // master partitions on it, the master partitions should be still on the last if the prefList
- StartCMResult result =
- TestHelper.startDummyProcess(ZK_ADDR, CLUSTER_NAME, instanceDead);
- _startCMResultMap.put(instanceDead, result);
-
- Thread.sleep(1000);
- verifyResult =
- ClusterStateVerifier.verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR,
- CLUSTER_NAME));
- Assert.assertTrue(verifyResult);
- for(String partitionName : idealState.getPartitionSet())
- {
- List<String> prefList = idealState.getPreferenceList(partitionName);
- if(prefList.get(0).equals(instanceDead))
- {
- String last = prefList.get(prefList.size() - 1);
- Assert.assertTrue(ev.getStateMap(partitionName).get(last).equals("MASTER"));
- }
- }
- // Reset the scn of the partitions
- for(int j = 0; j < _PARTITIONS; j++)
- {
- String partition = TEST_DB + "_" + j;
- List<String> idealStatePrefList =
- idealState.getPreferenceList(partition);
- String idealStateMaster = idealStatePrefList.get(0);
- // Switch back the scn to the same
- if(idealStateMaster.equals(instanceDead))
- {
- for(int x = 0; x < idealStatePrefList.size(); x++)
- {
- String instance = idealStatePrefList.get(x);
- ZNRecord scnRecord = scnTableMap.get(instance);
- if(!scnRecord.getMapFields().containsKey(partition))
- {
- scnRecord.setMapField(partition, new HashMap<String, String>());
- }
- Map<String, String> scnDetails = scnRecord.getMapField(partition);
- scnDetails.put("gen", "4");
- scnDetails.put("seq", "100");
- }
- }
- }
- // set the scn to normal -- same order as the priority list
- for(String instanceName : scnTableMap.keySet())
- {
- kb = accessor.keyBuilder();
- accessor.setProperty(kb.healthReport(instanceName, "scnTable"), new HealthStat(scnTableMap.get(instanceName)));
- }
- Thread.sleep(1000);
- verifyResult =
- ClusterStateVerifier.verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR,
- CLUSTER_NAME));
- Assert.assertTrue(verifyResult);
- // should be reverted to normal
- ev = accessor.getProperty(kb.externalView(TEST_DB));
- for(String partitionName : idealState.getPartitionSet())
- {
- List<String> prefList = idealState.getPreferenceList(partitionName);
- if(prefList.get(0).equals(instanceDead))
- {
- String last = prefList.get(prefList.size() - 1);
- Assert.assertTrue(ev.getStateMap(partitionName).get(last).equals("SLAVE"));
- Assert.assertTrue(ev.getStateMap(partitionName).get(prefList.get(1)).equals("SLAVE"));
- Assert.assertTrue(ev.getStateMap(partitionName).get(prefList.get(0)).equals("MASTER"));
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/controller/TestControllerRebalancingTimerPeriod.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/controller/TestControllerRebalancingTimerPeriod.java b/helix-core/src/test/java/com/linkedin/helix/controller/TestControllerRebalancingTimerPeriod.java
deleted file mode 100644
index 2a2c856..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/controller/TestControllerRebalancingTimerPeriod.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.linkedin.helix.controller;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.HelixDataAccessor;
-import com.linkedin.helix.HelixException;
-import com.linkedin.helix.PropertyKey.Builder;
-import com.linkedin.helix.TestHelper;
-import com.linkedin.helix.TestHelper.StartCMResult;
-import com.linkedin.helix.ZNRecord;
-import com.linkedin.helix.integration.ZkStandAloneCMTestBase;
-import com.linkedin.helix.josql.JsqlQueryListProcessor;
-import com.linkedin.helix.manager.zk.ZNRecordSerializer;
-import com.linkedin.helix.manager.zk.ZkClient;
-import com.linkedin.helix.model.ExternalView;
-import com.linkedin.helix.model.HealthStat;
-import com.linkedin.helix.model.IdealState;
-import com.linkedin.helix.model.IdealState.IdealStateProperty;
-import com.linkedin.helix.tools.ClusterSetup;
-import com.linkedin.helix.tools.ClusterStateVerifier;
-import com.linkedin.helix.tools.ClusterStateVerifier.BestPossAndExtViewZkVerifier;
-import com.linkedin.helix.tools.ClusterStateVerifier.MasterNbInExtViewVerifier;
-
-public class TestControllerRebalancingTimerPeriod extends ZkStandAloneCMTestBase
-{
- private static Logger LOG =
- Logger.getLogger(TestControllerRebalancingTimerPeriod.class);
-
- @Override
- @BeforeClass
- public void beforeClass() throws Exception
- {
-// Logger.getRootLogger().setLevel(Level.INFO);
- System.out.println("START " + CLASS_NAME + " at "
- + new Date(System.currentTimeMillis()));
-
- _zkClient = new ZkClient(ZK_ADDR);
- _zkClient.setZkSerializer(new ZNRecordSerializer());
- String namespace = "/" + CLUSTER_NAME;
- if (_zkClient.exists(namespace))
- {
- _zkClient.deleteRecursive(namespace);
- }
- _setupTool = new ClusterSetup(ZK_ADDR);
-
- // setup storage cluster
- _setupTool.addCluster(CLUSTER_NAME, true);
- _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, STATE_MODEL);
- for (int i = 0; i < NODE_NR; i++)
- {
- String storageNodeName = PARTICIPANT_PREFIX + ":" + (START_PORT + i);
- _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
- }
- _setupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, 3);
- IdealState idealState = _setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, TEST_DB);
- idealState.getRecord().setSimpleField(IdealStateProperty.REBALANCE_TIMER_PERIOD.toString(), "500");
-
- String scnTableQuery = "SELECT T1.instance as instance, T1.mapField as partition, T1.gen as gen, T1.seq as seq " +
- "FROM explodeMap(`INSTANCES/*/HEALTHREPORT/scnTable`) AS T1" +
- " JOIN LIVEINSTANCES as T2 using (T1.instance, T2.id)";
-
- String rankQuery = "SELECT instance, partition, gen, seq, T1.listIndex AS instanceRank " +
- " FROM scnTable JOIN explodeList(`IDEALSTATES/" + TEST_DB + "`) AS T1 " +
- "USING (scnTable.instance, T1.listVal) WHERE scnTable.partition=T1.listField";
-
- String masterSelectionQuery = "SELECT instance, partition, instanceRank, gen, (T.maxSeq-seq) AS seqDiff, seq FROM rankTable JOIN " +
- " (SELECT partition, max(to_number(seq)) AS maxSeq FROM rankTable GROUP BY partition) AS T USING(rankTable.partition, T.partition) " +
- " WHERE to_number(seqDiff) < 10 " +
- " ORDER BY partition, to_number(gen) desc, to_number(instanceRank), to_number(seqDiff)";
-
- StringBuffer combinedQueryStringList = new StringBuffer();
- combinedQueryStringList.append(scnTableQuery + JsqlQueryListProcessor.SEPARATOR+"scnTable;");
- combinedQueryStringList.append(rankQuery + JsqlQueryListProcessor.SEPARATOR+"rankTable;");
- combinedQueryStringList.append(masterSelectionQuery);
-
- String command = "-zkSvr " + ZK_ADDR + " -addResourceProperty "+ CLUSTER_NAME + " " + TEST_DB + " " + IdealState.QUERY_LIST.toString() + " "
- ;//+ "\""+ combinedQueryStringList.toString() +"\"";
- String[] args = command.split(" ");
-
- List<String> argsList = new ArrayList<String>();
- argsList.addAll(Arrays.asList(args));
- argsList.add("\""+ combinedQueryStringList.toString() +"\"");
- String[] allArgs = new String[argsList.size()];
- argsList.toArray(allArgs);
- ClusterSetup.processCommandLineArgs(allArgs);
-
- command = "-zkSvr " + ZK_ADDR + " -addResourceProperty "+ CLUSTER_NAME + " " + TEST_DB + " " + IdealState.IdealStateProperty.REBALANCE_TIMER_PERIOD.toString() + " 500";
-
- ClusterSetup.processCommandLineArgs(command.split(" "));
-
-
- // start dummy participants
- for (int i = 0; i < NODE_NR; i++)
- {
- String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
- if (_startCMResultMap.get(instanceName) != null)
- {
- LOG.error("fail to start particpant:" + instanceName
- + "(participant with same name already exists)");
- }
- else
- {
- StartCMResult result =
- TestHelper.startDummyProcess(ZK_ADDR, CLUSTER_NAME, instanceName);
- _startCMResultMap.put(instanceName, result);
- }
- }
-
- // start controller
- String controllerName = CONTROLLER_PREFIX + "_0";
- StartCMResult startResult =
- TestHelper.startController(CLUSTER_NAME,
- controllerName,
- ZK_ADDR,
- HelixControllerMain.STANDALONE);
- _startCMResultMap.put(controllerName, startResult);
-
- boolean result =
- ClusterStateVerifier.verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR,
- CLUSTER_NAME));
-
- result =
- ClusterStateVerifier.verifyByZkCallback(new BestPossAndExtViewZkVerifier(ZK_ADDR,
- CLUSTER_NAME));
- Assert.assertTrue(result);
- }
-
- @Test
- public void TestRebalancingTimer() throws Exception
- {
- String controllerName = CONTROLLER_PREFIX + "_0";
- GenericHelixController controller = new GenericHelixController();
- _startCMResultMap.get(controllerName)._manager.addIdealStateChangeListener(controller);
-
- Assert.assertTrue(controller._rebalanceTimer != null);
- Assert.assertEquals(controller._timerPeriod, 500);
-
- String command = "-zkSvr " + ZK_ADDR + " -addResourceProperty "+ CLUSTER_NAME + " " + TEST_DB + " " + IdealState.IdealStateProperty.REBALANCE_TIMER_PERIOD.toString() + " 200";
-
- ClusterSetup.processCommandLineArgs(command.split(" "));
-
- Thread.sleep(1000);
- Assert.assertTrue(controller._rebalanceTimer != null);
- Assert.assertEquals(controller._timerPeriod, 200);
- _startCMResultMap.get(controllerName)._manager.disconnect();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/test/java/com/linkedin/helix/controller/stages/BaseStageTest.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/com/linkedin/helix/controller/stages/BaseStageTest.java b/helix-core/src/test/java/com/linkedin/helix/controller/stages/BaseStageTest.java
deleted file mode 100644
index 47b5501..0000000
--- a/helix-core/src/test/java/com/linkedin/helix/controller/stages/BaseStageTest.java
+++ /dev/null
@@ -1,172 +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.controller.stages;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
-import com.linkedin.helix.HelixDataAccessor;
-import com.linkedin.helix.HelixManager;
-import com.linkedin.helix.Mocks;
-import com.linkedin.helix.PropertyKey.Builder;
-import com.linkedin.helix.ZNRecord;
-import com.linkedin.helix.controller.pipeline.Stage;
-import com.linkedin.helix.controller.pipeline.StageContext;
-import com.linkedin.helix.model.IdealState;
-import com.linkedin.helix.model.IdealState.IdealStateModeProperty;
-import com.linkedin.helix.model.LiveInstance;
-import com.linkedin.helix.model.Resource;
-import com.linkedin.helix.model.StateModelDefinition;
-import com.linkedin.helix.tools.StateModelConfigGenerator;
-
-public class BaseStageTest
-{
- protected HelixManager manager;
- protected HelixDataAccessor accessor;
- protected ClusterEvent event;
-
- @BeforeClass()
- public void beforeClass()
- {
- String className = this.getClass().getName();
- System.out.println("START " + className.substring(className.lastIndexOf('.') + 1)
- + " at "+ new Date(System.currentTimeMillis()));
- }
-
- @AfterClass()
- public void afterClass()
- {
- String className = this.getClass().getName();
- System.out.println("END " + className.substring(className.lastIndexOf('.') + 1)
- + " at "+ new Date(System.currentTimeMillis()));
- }
-
- @BeforeMethod()
- public void setup()
- {
- String clusterName = "testCluster-" + UUID.randomUUID().toString();
- manager = new Mocks.MockManager(clusterName);
- accessor = manager.getHelixDataAccessor();
- event = new ClusterEvent("sampleEvent");
- }
-
- protected List<IdealState> setupIdealState(int nodes, String[] resources,
- int partitions, int replicas)
- {
- List<IdealState> idealStates = new ArrayList<IdealState>();
- List<String> instances = new ArrayList<String>();
- for (int i = 0; i < nodes; i++)
- {
- instances.add("localhost_" + i);
- }
-
- for (int i = 0; i < resources.length; i++)
- {
- String resourceName = resources[i];
- ZNRecord record = new ZNRecord(resourceName);
- for (int p = 0; p < partitions; p++)
- {
- List<String> value = new ArrayList<String>();
- for (int r = 0; r < replicas; r++)
- {
- value.add("localhost_" + (p + r + 1) % nodes);
- }
- record.setListField(resourceName + "_" + p, value);
- }
- IdealState idealState = new IdealState(record);
- idealState.setStateModelDefRef("MasterSlave");
- idealState.setIdealStateMode(IdealStateModeProperty.AUTO.toString());
- idealState.setNumPartitions(partitions);
- idealStates.add(idealState);
-
-// System.out.println(idealState);
-
- Builder keyBuilder = accessor.keyBuilder();
-
- accessor.setProperty(keyBuilder.idealStates(resourceName), idealState);
- }
- return idealStates;
- }
-
- protected void setupLiveInstances(int numLiveInstances)
- {
- // setup liveInstances
- for (int i = 0; i < numLiveInstances; i++)
- {
- LiveInstance liveInstance = new LiveInstance("localhost_" + i);
- liveInstance.setSessionId("session_" + i);
-
- Builder keyBuilder = accessor.keyBuilder();
- accessor.setProperty(keyBuilder.liveInstance("localhost_" + i), liveInstance);
- }
- }
-
- protected void runStage(ClusterEvent event, Stage stage)
- {
- event.addAttribute("helixmanager", manager);
- StageContext context = new StageContext();
- stage.init(context);
- stage.preProcess();
- try
- {
- stage.process(event);
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- stage.postProcess();
- }
-
- protected void setupStateModel()
- {
- ZNRecord masterSlave = new StateModelConfigGenerator()
- .generateConfigForMasterSlave();
-
- Builder keyBuilder = accessor.keyBuilder();
- accessor.setProperty(keyBuilder.stateModelDef(masterSlave.getId()), new StateModelDefinition(masterSlave));
-
- ZNRecord leaderStandby = new StateModelConfigGenerator()
- .generateConfigForLeaderStandby();
- accessor.setProperty(keyBuilder.stateModelDef(leaderStandby.getId()), new StateModelDefinition(leaderStandby));
-
- ZNRecord onlineOffline = new StateModelConfigGenerator()
- .generateConfigForOnlineOffline();
- accessor.setProperty(keyBuilder.stateModelDef(onlineOffline.getId()), new StateModelDefinition(onlineOffline));
- }
-
- protected Map<String, Resource> getResourceMap()
- {
- Map<String, Resource> resourceMap = new HashMap<String, Resource>();
- Resource testResource = new Resource("testResourceName");
- testResource.setStateModelDefRef("MasterSlave");
- testResource.addPartition("testResourceName_0");
- testResource.addPartition("testResourceName_1");
- testResource.addPartition("testResourceName_2");
- testResource.addPartition("testResourceName_3");
- testResource.addPartition("testResourceName_4");
- resourceMap.put("testResourceName", testResource);
-
- return resourceMap;
- }
-}