This is an automated email from the ASF dual-hosted git repository. boglesby pushed a commit to branch support/1.14 in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/support/1.14 by this push: new 5644b85 GEODE-9372: Added createSenderTime and createSenderInProgress stats (#6608) 5644b85 is described below commit 5644b85c65e136d65cfe92f8dd3888a148cd925c Author: Barry Oglesby <bogle...@users.noreply.github.com> AuthorDate: Mon Jun 14 08:30:44 2021 -1000 GEODE-9372: Added createSenderTime and createSenderInProgress stats (#6608) (cherry picked from commit f0e6e0d9c2b299e31fd20dea47703b019fc66f31) --- .../apache/geode/distributed/internal/DMStats.java | 3 ++- .../distributed/internal/DistributionStats.java | 23 +++++++++++++++++++++- .../internal/LonerDistributionManager.java | 7 ++++++- .../apache/geode/internal/tcp/ConnectionTable.java | 6 ++++-- .../internal/DistributionStatsTest.java | 16 ++++++++++++--- 5 files changed, 47 insertions(+), 8 deletions(-) diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DMStats.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DMStats.java index 0f880b2..a2c9532 100644 --- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DMStats.java +++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DMStats.java @@ -263,7 +263,7 @@ public interface DMStats extends MembershipStatistics { /** * @since GemFire 4.1 */ - void incSenders(boolean shared, boolean preserveOrder); + void incSenders(boolean shared, boolean preserveOrder, long start); /** * @since GemFire 4.1 @@ -560,4 +560,5 @@ public interface DMStats extends MembershipStatistics { long getUdpFinalCheckResponsesReceived(); + long startSenderCreate(); } diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java index b08a512..e4fdaf55 100644 --- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java +++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java @@ -112,6 +112,8 @@ public class DistributionStats implements DMStats { private static final int sharedUnorderedSenderConnectionsId; private static final int threadOrderedSenderConnectionsId; private static final int threadUnorderedSenderConnectionsId; + static final int senderCreateTimeId; + static final int senderCreatesInProgressId; private static final int syncSocketWritesInProgressId; private static final int syncSocketWriteTimeId; @@ -443,6 +445,11 @@ public class DistributionStats implements DMStats { final String udpFinalCheckResponsesReceivedDesc = "UDP final check responses that this member has received."; + final String senderCreatesDesc = + "Total amount of time, in nanoseconds, spent creating a sender."; + final String senderCreatesInProgressDesc = + "Current number of sender creations in progress."; + StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton(); type = f.createType(statName, statDescription, new StatisticDescriptor[] { @@ -515,6 +522,8 @@ public class DistributionStats implements DMStats { f.createIntCounter("failedConnects", failedConnectsDesc, "connects"), f.createIntCounter("reconnectAttempts", reconnectAttemptsDesc, "connects"), f.createIntCounter("senderTimeouts", lostConnectionLeaseDesc, "expirations"), + f.createLongCounter("senderCreateTime", senderCreatesDesc, "nanoseconds"), + f.createLongGauge("senderCreatesInProgress", senderCreatesInProgressDesc, "operations"), f.createIntGauge("syncSocketWritesInProgress", "Current number of synchronous/blocking socket write calls in progress.", "writes"), @@ -796,6 +805,8 @@ public class DistributionStats implements DMStats { sharedUnorderedSenderConnectionsId = type.nameToId("sendersSU"); threadOrderedSenderConnectionsId = type.nameToId("sendersTO"); threadUnorderedSenderConnectionsId = type.nameToId("sendersTU"); + senderCreateTimeId = type.nameToId("senderCreateTime"); + senderCreatesInProgressId = type.nameToId("senderCreatesInProgress"); syncSocketWritesInProgressId = type.nameToId("syncSocketWritesInProgress"); syncSocketWriteTimeId = type.nameToId("syncSocketWriteTime"); @@ -1658,7 +1669,13 @@ public class DistributionStats implements DMStats { } @Override - public void incSenders(boolean shared, boolean preserveOrder) { + public long startSenderCreate() { + stats.incLong(senderCreatesInProgressId, 1); + return getTime(); + } + + @Override + public void incSenders(boolean shared, boolean preserveOrder, long start) { if (shared) { if (preserveOrder) { stats.incInt(sharedOrderedSenderConnectionsId, 1); @@ -1672,6 +1689,10 @@ public class DistributionStats implements DMStats { stats.incInt(threadUnorderedSenderConnectionsId, 1); } } + if (enableClockStats) { + stats.incLong(senderCreateTimeId, getTime() - start); + } + stats.incLong(senderCreatesInProgressId, -1); } @Override diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java index 08dab41..bb2bca0 100644 --- a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java +++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java @@ -533,7 +533,12 @@ public class LonerDistributionManager implements DistributionManager { public void incLostLease() {} @Override - public void incSenders(boolean shared, boolean preserveOrder) {} + public long startSenderCreate() { + return 0L; + } + + @Override + public void incSenders(boolean shared, boolean preserveOrder, long start) {} @Override public void decSenders(boolean shared, boolean preserveOrder) {} diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/ConnectionTable.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/ConnectionTable.java index eb738cc..160cbe5 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/tcp/ConnectionTable.java +++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/ConnectionTable.java @@ -278,9 +278,10 @@ public class ConnectionTable { // handle new pending connection Connection con = null; try { + long senderCreateStartTime = owner.getStats().startSenderCreate(); con = Connection.createSender(owner.getMembership(), this, preserveOrder, id, sharedResource, startTime, ackThreshold, ackSAThreshold); - owner.getStats().incSenders(sharedResource, preserveOrder); + owner.getStats().incSenders(sharedResource, preserveOrder, senderCreateStartTime); } finally { // our connection failed to notify anyone waiting for our pending con if (con == null) { @@ -443,12 +444,13 @@ public class ConnectionTable { } // OK, we have to create a new connection. + long senderCreateStartTime = owner.getStats().startSenderCreate(); result = Connection.createSender(owner.getMembership(), this, true, id, false, startTime, ackTimeout, ackSATimeout); + owner.getStats().incSenders(false, true, senderCreateStartTime); if (logger.isDebugEnabled()) { logger.debug("ConnectionTable: created an ordered connection: {}", result); } - owner.getStats().incSenders(false, true); // Update the list of connections owned by this thread.... diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionStatsTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionStatsTest.java index e47516d..0d7acee 100644 --- a/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionStatsTest.java +++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionStatsTest.java @@ -15,6 +15,7 @@ package org.apache.geode.distributed.internal; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -22,7 +23,6 @@ import static org.mockito.Mockito.verify; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.mockito.Mockito; import org.apache.geode.Statistics; @@ -47,8 +47,8 @@ public class DistributionStatsTest { public void endReplyWait() { distributionStats.endReplyWait(12000000, 12); - verify(mockStats).incLong(eq(DistributionStats.replyWaitTimeId), Mockito.anyLong()); - verify(mockStats).incLong(eq(DistributionStats.replyWaitMaxTimeId), Mockito.anyLong()); + verify(mockStats).incLong(eq(DistributionStats.replyWaitTimeId), anyLong()); + verify(mockStats).incLong(eq(DistributionStats.replyWaitMaxTimeId), anyLong()); } @Test @@ -67,4 +67,14 @@ public class DistributionStatsTest { verify(mockStats).incInt(DistributionStats.serialQueueBytesId, 50000000); verify(mockStats).incInt(DistributionStats.serialQueueBytesId, 20000000); } + + @Test + public void startSenderCreate() { + long startTime = distributionStats.startSenderCreate(); + verify(mockStats).incLong(DistributionStats.senderCreatesInProgressId, 1); + assertThat(startTime).isNotEqualTo(0); + distributionStats.incSenders(false, true, startTime); + verify(mockStats).incLong(DistributionStats.senderCreatesInProgressId, -1); + verify(mockStats).incLong(eq(DistributionStats.senderCreateTimeId), anyLong()); + } }