You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by ji...@apache.org on 2020/09/29 17:39:29 UTC
[helix] branch master updated: Add host name to the Participant
History znode. (#1417)
This is an automated email from the ASF dual-hosted git repository.
jiajunwang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git
The following commit(s) were added to refs/heads/master by this push:
new 304a4e2 Add host name to the Participant History znode. (#1417)
304a4e2 is described below
commit 304a4e23e2afd085099757f182e7d5050ac96a45
Author: Jiajun Wang <jj...@linkedin.com>
AuthorDate: Tue Sep 29 10:39:17 2020 -0700
Add host name to the Participant History znode. (#1417)
Add hostname to the Participant History znode.
This is to ensure that we can track the participant instance allocation even the live instance node has been removed.
---
.../org/apache/helix/model/ParticipantHistory.java | 19 ++++++++++++++++---
.../integration/paticipant/TestInstanceHistory.java | 20 +++++++++++++++++++-
2 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/helix-core/src/main/java/org/apache/helix/model/ParticipantHistory.java b/helix-core/src/main/java/org/apache/helix/model/ParticipantHistory.java
index 9ab59c2..8b432ce 100644
--- a/helix-core/src/main/java/org/apache/helix/model/ParticipantHistory.java
+++ b/helix-core/src/main/java/org/apache/helix/model/ParticipantHistory.java
@@ -19,6 +19,8 @@ package org.apache.helix.model;
* under the License.
*/
+import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -38,6 +40,7 @@ import org.slf4j.LoggerFactory;
*/
public class ParticipantHistory extends HelixProperty {
private static Logger LOG = LoggerFactory.getLogger(ParticipantHistory.class);
+ private static final String UNKNOWN_HOST_NAME = "UnknownHostname";
private final static int HISTORY_SIZE = 20;
private enum ConfigProperty {
@@ -47,7 +50,8 @@ public class ParticipantHistory extends HelixProperty {
HISTORY,
OFFLINE,
VERSION,
- LAST_OFFLINE_TIME
+ LAST_OFFLINE_TIME,
+ HOST
}
public static long ONLINE = -1;
@@ -76,7 +80,15 @@ public class ParticipantHistory extends HelixProperty {
* @return
*/
public void reportOnline(String sessionId, String version) {
- updateSessionHistory(sessionId, version);
+ String hostname;
+ try {
+ hostname = InetAddress.getLocalHost().getHostName();
+ } catch (UnknownHostException e) {
+ LOG.error("Failed to get host name. Use {} for the participant history recording.",
+ UNKNOWN_HOST_NAME);
+ hostname = UNKNOWN_HOST_NAME;
+ }
+ updateSessionHistory(sessionId, version, hostname);
_record.setSimpleField(ConfigProperty.LAST_OFFLINE_TIME.name(), String.valueOf(ONLINE));
}
@@ -103,7 +115,7 @@ public class ParticipantHistory extends HelixProperty {
/**
* Add record to session online history list
*/
- private void updateSessionHistory(String sessionId, String version) {
+ private void updateSessionHistory(String sessionId, String version, String hostname) {
List<String> list = _record.getListField(ConfigProperty.HISTORY.name());
if (list == null) {
list = new ArrayList<>();
@@ -126,6 +138,7 @@ public class ParticipantHistory extends HelixProperty {
String dateTime = df.format(new Date(timeMillis));
sessionEntry.put(ConfigProperty.DATE.name(), dateTime);
sessionEntry.put(ConfigProperty.VERSION.name(), version);
+ sessionEntry.put(ConfigProperty.HOST.name(), hostname);
list.add(sessionEntry.toString());
}
diff --git a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestInstanceHistory.java b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestInstanceHistory.java
index 12b154c..2f6004d 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestInstanceHistory.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestInstanceHistory.java
@@ -19,6 +19,8 @@ package org.apache.helix.integration.paticipant;
* under the License.
*/
+import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.util.List;
import org.apache.helix.HelixManager;
@@ -32,7 +34,8 @@ import org.testng.annotations.Test;
public class TestInstanceHistory extends ZkStandAloneCMTestBase {
- @Test() public void testInstanceHistory() throws Exception {
+ @Test()
+ public void testInstanceHistory() throws Exception {
HelixManager manager = HelixManagerFactory
.getZKHelixManager(CLUSTER_NAME, "admin", InstanceType.ADMINISTRATOR, ZK_ADDR);
manager.connect();
@@ -44,6 +47,21 @@ public class TestInstanceHistory extends ZkStandAloneCMTestBase {
List<String> list = history.getRecord().getListField("HISTORY");
Assert.assertEquals(list.size(), 1);
+ Assert.assertTrue(list.get(0).contains("SESSION=" + _participants[0].getSessionId()));
+ Assert.assertTrue(list.get(0).contains("VERSION=" + _participants[0].getVersion()));
+
+ String hostname;
+ try {
+ hostname = InetAddress.getLocalHost().getHostName();
+ } catch (UnknownHostException ex) {
+ hostname = "UnknownHostname";
+ }
+ Assert
+ .assertTrue(list.get(0).contains("HOST=" + hostname));
+
+ Assert.assertTrue(list.get(0).contains("TIME="));
+ Assert.assertTrue(list.get(0).contains("DATE="));
+
for (int i = 0; i <= 22; i++) {
_participants[0].disconnect();
_participants[0].connect();