You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by jx...@apache.org on 2017/06/22 22:57:22 UTC
[03/50] [abbrv] helix git commit: Persist controller leader change
history with timestamp for each leader controller.
Persist controller leader change history with timestamp for each leader controller.
Project: http://git-wip-us.apache.org/repos/asf/helix/repo
Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/998a7bd0
Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/998a7bd0
Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/998a7bd0
Branch: refs/heads/master
Commit: 998a7bd0ce9f7041ec7b47d9415aaf32f59e108f
Parents: ac74e1d
Author: Lei Xia <lx...@linkedin.com>
Authored: Wed Oct 12 18:15:10 2016 -0700
Committer: Lei Xia <lx...@linkedin.com>
Committed: Wed Feb 8 09:56:55 2017 -0800
----------------------------------------------------------------------
.../org/apache/helix/model/LeaderHistory.java | 11 ++--
.../integration/TestControllerHistory.java | 59 ++++++++++++++++++++
2 files changed, 66 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/helix/blob/998a7bd0/helix-core/src/main/java/org/apache/helix/model/LeaderHistory.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/model/LeaderHistory.java b/helix-core/src/main/java/org/apache/helix/model/LeaderHistory.java
index 5b3b5d5..2d66104 100644
--- a/helix-core/src/main/java/org/apache/helix/model/LeaderHistory.java
+++ b/helix-core/src/main/java/org/apache/helix/model/LeaderHistory.java
@@ -35,12 +35,13 @@ import org.apache.helix.ZNRecord;
* The history of instances that have served as the leader controller
*/
public class LeaderHistory extends HelixProperty {
- private final static int HISTORY_SIZE = 8;
+ private final static int HISTORY_SIZE = 10;
private enum ConfigProperty {
HISTORY,
TIME,
- DATE
+ DATE,
+ CONTROLLER
}
public LeaderHistory(String id) {
@@ -71,7 +72,6 @@ public class LeaderHistory extends HelixProperty {
list.add(instanceName);
// TODO: remove above in future when we confirmed no one consumes it */
-
List<String> historyList = _record.getListField(ConfigProperty.HISTORY.name());
if (historyList == null) {
historyList = new ArrayList<String>();
@@ -85,12 +85,15 @@ public class LeaderHistory extends HelixProperty {
Map<String, String> historyEntry = new HashMap<String, String>();
long currentTime = System.currentTimeMillis();
- DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSS");
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
String dateTime = df.format(new Date(currentTime));
+ historyEntry.put(ConfigProperty.CONTROLLER.name(), instanceName);
historyEntry.put(ConfigProperty.TIME.name(), String.valueOf(currentTime));
historyEntry.put(ConfigProperty.DATE.name(), dateTime);
+
+ historyList.add(historyEntry.toString());
}
@Override
http://git-wip-us.apache.org/repos/asf/helix/blob/998a7bd0/helix-core/src/test/java/org/apache/helix/integration/TestControllerHistory.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestControllerHistory.java b/helix-core/src/test/java/org/apache/helix/integration/TestControllerHistory.java
new file mode 100644
index 0000000..b078c96
--- /dev/null
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestControllerHistory.java
@@ -0,0 +1,59 @@
+package org.apache.helix.integration;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import org.apache.helix.HelixManager;
+import org.apache.helix.HelixManagerFactory;
+import org.apache.helix.InstanceType;
+import org.apache.helix.PropertyKey;
+import org.apache.helix.integration.manager.ClusterControllerManager;
+import org.apache.helix.model.LeaderHistory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.List;
+
+public class TestControllerHistory extends ZkStandAloneCMTestBase {
+
+ @Test()
+ public void testControllerLeaderHistory() throws Exception {
+ HelixManager manager = HelixManagerFactory
+ .getZKHelixManager(CLUSTER_NAME, "admin", InstanceType.ADMINISTRATOR, ZK_ADDR);
+ manager.connect();
+
+ PropertyKey.Builder keyBuilder = new PropertyKey.Builder(CLUSTER_NAME);
+ PropertyKey propertyKey = keyBuilder.controllerLeaderHistory();
+ LeaderHistory leaderHistory = manager.getHelixDataAccessor().getProperty(propertyKey);
+ Assert.assertNotNull(leaderHistory);
+ List<String> list = leaderHistory.getRecord().getListField("HISTORY");
+ Assert.assertEquals(list.size(), 1);
+
+ for (int i = 0; i <= 12; i++) {
+ _controller.syncStop();
+ _controller = new ClusterControllerManager(ZK_ADDR, CLUSTER_NAME, "Controller-" + i);
+ _controller.syncStart();
+ }
+
+ leaderHistory = manager.getHelixDataAccessor().getProperty(propertyKey);
+ Assert.assertNotNull(leaderHistory);
+ list = leaderHistory.getRecord().getListField("HISTORY");
+ Assert.assertEquals(list.size(), 10);
+ manager.disconnect();
+ }
+}