You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2020/04/01 18:21:50 UTC
[geode] branch feature/GEODE-7926 created (now ba6436d)
This is an automated email from the ASF dual-hosted git repository.
bschuchardt pushed a change to branch feature/GEODE-7926
in repository https://gitbox.apache.org/repos/asf/geode.git.
at ba6436d GEODE-7926: GMSMemberData is doing unnecessary reverse-DNS lookups
This branch includes the following new commits:
new ba6436d GEODE-7926: GMSMemberData is doing unnecessary reverse-DNS lookups
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[geode] 01/01: GEODE-7926: GMSMemberData is doing unnecessary
reverse-DNS lookups
Posted by bs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
bschuchardt pushed a commit to branch feature/GEODE-7926
in repository https://gitbox.apache.org/repos/asf/geode.git
commit ba6436debc4ed23b670435d9c1ab1b12846d6238
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Wed Apr 1 11:17:19 2020 -0700
GEODE-7926: GMSMemberData is doing unnecessary reverse-DNS lookups
The hostname established in GMSMemberData by its serialization method
isn't important for Membership communications. There's no reason to do
an InetAddress -> hostname lookup in this method, and it's slowing
things down when sending messages via JGroups.
---
.../membership/gms/GMSMemberDataJUnitTest.java | 49 +++++++++++-----------
.../internal/membership/gms/GMSMemberData.java | 4 +-
2 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java
index b50dcf2..592465e 100644
--- a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberDataJUnitTest.java
@@ -14,11 +14,7 @@
*/
package org.apache.geode.distributed.internal.membership.gms;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -35,6 +31,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
+import org.apache.geode.internal.inet.LocalHostUtil;
import org.apache.geode.internal.serialization.BufferDataOutputStream;
import org.apache.geode.internal.serialization.DSFIDSerializer;
import org.apache.geode.internal.serialization.DSFIDSerializerFactory;
@@ -58,13 +55,13 @@ public class GMSMemberDataJUnitTest {
@Test
public void testEqualsNotSameType() {
GMSMemberData member = new GMSMemberData();
- assertFalse(member.equals("Not a GMSMemberData"));
+ assertThat(member).isNotEqualTo("Not a GMSMemberData");
}
@Test
public void testEqualsIsSame() {
GMSMemberData member = new GMSMemberData();
- assertTrue(member.equals(member));
+ assertThat(member).isEqualTo(member);
}
@Test
@@ -72,7 +69,7 @@ public class GMSMemberDataJUnitTest {
GMSMemberData member = new GMSMemberData();
UUID uuid = new UUID(0, 0);
member.setUUID(uuid);
- assertEquals(0, member.compareTo(member));
+ assertThat(member.compareTo(member)).isZero();
}
private GMSMemberData createGMSMember(byte[] inetAddress, int viewId, long msb, long lsb) {
@@ -89,7 +86,7 @@ public class GMSMemberDataJUnitTest {
public void testCompareToInetAddressIsLongerThan() {
GMSMemberData member1 = createGMSMember(new byte[] {1, 1, 1, 1, 1}, 1, 1, 1);
GMSMemberData member2 = createGMSMember(new byte[] {1, 1, 1, 1}, 1, 1, 1);
- assertEquals(1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isGreaterThan(0);
}
@Test
@@ -100,7 +97,7 @@ public class GMSMemberDataJUnitTest {
member1.getVersionOrdinal(),
member1.getUuidMostSignificantBits(), member1.getUuidLeastSignificantBits(),
member1.getVmViewId());
- assertEquals(0, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isZero();
}
@Test
@@ -109,70 +106,70 @@ public class GMSMemberDataJUnitTest {
GMSMemberData member2 = new GMSMemberData(member1.getInetAddress(), member1.getMembershipPort(),
member1.getVersionOrdinal(), member1.getUuidMostSignificantBits(),
member1.getUuidLeastSignificantBits(), 100);
- assertEquals(false, member1.equals(member2));
+ assertThat(member1).isNotEqualTo(member2);
}
@Test
public void testCompareToInetAddressIsShorterThan() {
GMSMemberData member1 = createGMSMember(new byte[] {1, 1, 1, 1}, 1, 1, 1);
GMSMemberData member2 = createGMSMember(new byte[] {1, 1, 1, 1, 1}, 1, 1, 1);
- assertEquals(-1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isLessThan(0);
}
@Test
public void testCompareToInetAddressIsGreater() {
GMSMemberData member1 = createGMSMember(new byte[] {1, 2, 1, 1, 1}, 1, 1, 1);
GMSMemberData member2 = createGMSMember(new byte[] {1, 1, 1, 1, 1}, 1, 1, 1);
- assertEquals(1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isGreaterThan(0);
}
@Test
public void testCompareToInetAddressIsLessThan() {
GMSMemberData member1 = createGMSMember(new byte[] {1, 1, 1, 1, 1}, 1, 1, 1);
GMSMemberData member2 = createGMSMember(new byte[] {1, 2, 1, 1, 1}, 1, 1, 1);
- assertEquals(-1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isLessThan(0);
}
@Test
public void testCompareToMyViewIdLarger() {
GMSMemberData member1 = createGMSMember(new byte[] {1}, 2, 1, 1);
GMSMemberData member2 = createGMSMember(new byte[] {1}, 1, 1, 1);
- assertEquals(1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isGreaterThan(0);
}
@Test
public void testCompareToTheirViewIdLarger() {
GMSMemberData member1 = createGMSMember(new byte[] {1}, 1, 1, 1);
GMSMemberData member2 = createGMSMember(new byte[] {1}, 2, 1, 1);
- assertEquals(-1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isLessThan(0);
}
@Test
public void testCompareToMyMSBLarger() {
GMSMemberData member1 = createGMSMember(new byte[] {1}, 1, 2, 1);
GMSMemberData member2 = createGMSMember(new byte[] {1}, 1, 1, 1);
- assertEquals(1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isGreaterThan(0);
}
@Test
public void testCompareToTheirMSBLarger() {
GMSMemberData member1 = createGMSMember(new byte[] {1}, 1, 1, 1);
GMSMemberData member2 = createGMSMember(new byte[] {1}, 1, 2, 1);
- assertEquals(-1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isLessThan(0);
}
@Test
public void testCompareToMyLSBLarger() {
GMSMemberData member1 = createGMSMember(new byte[] {1}, 1, 1, 2);
GMSMemberData member2 = createGMSMember(new byte[] {1}, 1, 1, 1);
- assertEquals(1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isGreaterThan(0);
}
@Test
public void testCompareToTheirLSBLarger() {
GMSMemberData member1 = createGMSMember(new byte[] {1}, 1, 1, 1);
GMSMemberData member2 = createGMSMember(new byte[] {1}, 1, 1, 2);
- assertEquals(-1, member1.compareTo(member2));
+ assertThat(member1.compareTo(member2)).isLessThan(0);
}
@Test
@@ -180,7 +177,7 @@ public class GMSMemberDataJUnitTest {
GMSMemberData member = new GMSMemberData();
UUID uuid = new UUID(0, 0);
member.setUUID(uuid);
- assertNull(member.getUUID());
+ assertThat(member.getUUID()).isNull();
}
@Test
@@ -188,7 +185,7 @@ public class GMSMemberDataJUnitTest {
GMSMemberData member = new GMSMemberData();
UUID uuid = new UUID(1, 1);
member.setUUID(uuid);
- assertNotNull(member.getUUID());
+ assertThat(member.getUUID()).isNotNull();
}
/**
@@ -204,6 +201,7 @@ public class GMSMemberDataJUnitTest {
public void testGMSMemberBackwardCompatibility() throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
GMSMemberData member = new GMSMemberData();
+ member.setInetAddr(LocalHostUtil.getLocalHost());
DataOutput dataOutput = new DataOutputStream(baos);
SerializationContext serializationContext = dsfidSerializer
.createSerializationContext(dataOutput);
@@ -216,7 +214,10 @@ public class GMSMemberDataJUnitTest {
.createDeserializationContext(dataInput);
GMSMemberData newMember = new GMSMemberData();
newMember.readEssentialData(dataInput, deserializationContext);
- assertEquals(member.getVmKind(), newMember.getVmKind());
+ assertThat(newMember.getVmKind()).isEqualTo(member.getVmKind());
+ assertThat(newMember.getInetAddress()).isNotNull();
+ assertThat(newMember.getInetAddress().getHostAddress()).isEqualTo(newMember.getHostName());
+
// vmKind should not be transmitted to a member with version GFE_90 or earlier
dataOutput = new BufferDataOutputStream(Version.GFE_90);
@@ -227,7 +228,7 @@ public class GMSMemberDataJUnitTest {
dataInput = new VersionedDataInputStream(stream, Version.GFE_90);
newMember = new GMSMemberData();
newMember.readEssentialData(dataInput, deserializationContext);
- assertEquals(0, newMember.getVmKind());
+ assertThat(newMember.getVmKind()).isZero();
}
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
index b951191..ad00642 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberData.java
@@ -589,7 +589,9 @@ public class GMSMemberData implements MemberData, Comparable<GMSMemberData> {
this.inetAddr = StaticSerialization.readInetAddress(in);
if (this.inetAddr != null) {
- this.hostName = inetAddr.getHostName();
+ // use address as hostname at this level. getHostName() will do a reverse-dns lookup,
+ // which is very expensive
+ this.hostName = inetAddr.getHostAddress();
}
this.udpPort = in.readInt();
this.vmViewId = in.readInt();