You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ud...@apache.org on 2018/08/13 17:45:08 UTC

[geode] branch feature/Micrometer updated: No more changes until Spring Data examples completed

This is an automated email from the ASF dual-hosted git repository.

udo pushed a commit to branch feature/Micrometer
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/feature/Micrometer by this push:
     new 1540b24  No more changes until Spring Data examples completed
1540b24 is described below

commit 1540b24751b5a6df9a8d952833f2ad76963fa466
Author: Udo Kohlmeyer <uk...@pivotal.io>
AuthorDate: Mon Aug 13 10:44:53 2018 -0700

    No more changes until Spring Data examples completed
---
 .../cache/client/internal/ConnectionStats.java     |  2 +-
 .../org/apache/geode/statistics/StatsFactory.java  | 23 ++++++----
 .../cache/client/internal/ConnectionStatsImpl.java |  1 -
 geode-core/src/main/kotlin/Client.kt               | 50 +++++++++++++++++++++
 geode-core/src/main/kotlin/Server.kt               | 30 +++----------
 geode-micrometer-stats/build.gradle.kts            | 12 ++---
 .../connection/MicrometerClientSendStats.kt        |  0
 .../connection/MicrometerClientStats.kt            |  0
 .../connection/MicrometerConnectionStats.kt        | 52 +++++++++++++---------
 .../{ => client}/connection/MicrometerPoolStats.kt |  1 -
 .../micrometer/impl/MicrometerMeterGroup.kt        |  3 +-
 .../micrometer/impl/MicrometerStatisticsManager.kt | 18 +++++++-
 12 files changed, 128 insertions(+), 64 deletions(-)

diff --git a/geode-common/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java b/geode-common/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java
index 3471a5e..c33bf0c 100644
--- a/geode-common/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java
+++ b/geode-common/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java
@@ -1,10 +1,10 @@
 package org.apache.geode.cache.client.internal;
 
+import org.apache.geode.internal.cache.PoolStats;
 import org.apache.geode.internal.cache.tier.sockets.MessageStats;
 import org.apache.geode.statistics.StatisticsFactory;
 
 public interface ConnectionStats extends MessageStats {
-  void initializeStats(StatisticsFactory factory);
 
   long startGet();
 
diff --git a/geode-common/src/main/java/org/apache/geode/statistics/StatsFactory.java b/geode-common/src/main/java/org/apache/geode/statistics/StatsFactory.java
index 4ce3c81..cc3b1be 100644
--- a/geode-common/src/main/java/org/apache/geode/statistics/StatsFactory.java
+++ b/geode-common/src/main/java/org/apache/geode/statistics/StatsFactory.java
@@ -1,5 +1,6 @@
 package org.apache.geode.statistics;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -254,9 +255,11 @@ public class StatsFactory {
         name);
   }
 
-  public static OffHeapStorageStats createOffHeapStorageStatsImpl(StatisticsFactory statisticsFactory,
-                                                                 String name) {
-    return (OffHeapStorageStats) resolveInstanceFromClass(OffHeapStorageStats.class, statisticsFactory,
+  public static OffHeapStorageStats createOffHeapStorageStatsImpl(
+      StatisticsFactory statisticsFactory,
+      String name) {
+    return (OffHeapStorageStats) resolveInstanceFromClass(OffHeapStorageStats.class,
+        statisticsFactory,
         name);
   }
 
@@ -284,10 +287,12 @@ public class StatsFactory {
       String locatorName, PoolStats poolStats) {
     Class<? extends StatsImplementor> resolvedLocatorClassImpl;
     try {
-      resolvedLocatorClassImpl = resolvedStatsImplForClass.get(LocatorStats.class);
-      StatsImplementor statsImplementor = resolvedLocatorClassImpl
-          .getDeclaredConstructor(StatisticsFactory.class, String.class, PoolStats.class)
-          .newInstance(statisticsFactory, locatorName, poolStats);
+      resolvedLocatorClassImpl = resolvedStatsImplForClass.get(ConnectionStats.class);
+      StatsImplementor
+          statsImplementor =
+          resolvedLocatorClassImpl
+              .getDeclaredConstructor(StatisticsFactory.class, String.class, PoolStats.class)
+              .newInstance(statisticsFactory, locatorName, poolStats);
       statsImplementor.initializeImplementor(statisticsFactory);
       statsImplementor.registerStatsImplementor(statisticsFactory);
       return statsImplementor;
@@ -299,7 +304,7 @@ public class StatsFactory {
 
   private StatsImplementor createInstanceFromClass(Class<?> interfaceClazz,
                                                    StatisticsFactory statisticsFactory,
-                                                   String locatorName) {
+                                                   String name) {
     Class<? extends StatsImplementor> resolvedLocatorClassImpl;
     try {
       resolvedLocatorClassImpl = resolvedStatsImplForClass.get(interfaceClazz);
@@ -308,7 +313,7 @@ public class StatsFactory {
       }
       StatsImplementor statsImplementor = resolvedLocatorClassImpl
           .getDeclaredConstructor(StatisticsFactory.class, String.class)
-          .newInstance(statisticsFactory, locatorName);
+          .newInstance(statisticsFactory, name);
       statsImplementor.initializeImplementor(statisticsFactory);
       statsImplementor.registerStatsImplementor(statisticsFactory);
       return statsImplementor;
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionStatsImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionStatsImpl.java
index 9db496b..1755d19c2 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionStatsImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionStatsImpl.java
@@ -437,7 +437,6 @@ public class ConnectionStatsImpl implements ConnectionStats, GFSStatsImplementor
   // into a total value for all operations.
   private static int[] opIds;
 
-  @Override
   public void initializeStats(StatisticsFactory factory) {
     try {
       type = factory.createType("ClientStats", "Statistics about client to server communication",
diff --git a/geode-core/src/main/kotlin/Client.kt b/geode-core/src/main/kotlin/Client.kt
new file mode 100644
index 0000000..02f398b
--- /dev/null
+++ b/geode-core/src/main/kotlin/Client.kt
@@ -0,0 +1,50 @@
+import org.apache.geode.cache.CacheFactory
+import org.apache.geode.cache.RegionShortcut
+import org.apache.geode.cache.client.ClientCacheFactory
+import org.apache.geode.cache.client.ClientRegionShortcut
+import org.apache.geode.distributed.ConfigurationProperties
+import java.io.File
+import java.util.*
+import java.util.stream.IntStream
+
+fun main(args: Array<String>) {
+    val properties = Properties().apply {
+        setProperty("mcast-port", "0")
+        setProperty("statistic-sampling-enabled", "true")
+    }
+    val cache = ClientCacheFactory(properties).addPoolLocator("localhost", 44550).create()
+
+    val regionFactory = cache.createClientRegionFactory<String, String>(ClientRegionShortcut.PROXY)
+    regionFactory.setStatisticsEnabled(true)
+    val region1 = regionFactory.create("Region1")
+
+    val regionFactory2 = cache.createClientRegionFactory<String, String>(ClientRegionShortcut.PROXY)
+    regionFactory2.setStatisticsEnabled(true)
+    val region2 = regionFactory2.create("Region3")
+
+    val random = Random()
+    IntStream.range(0, Int.MAX_VALUE).parallel().forEach { count ->
+
+        region1[count.toString()] = region1.size.toString()
+
+        for (value in 0..random.nextInt(25)) {
+            region2[(value*count).toString()] = value.toString()
+        }
+
+        if (random.nextBoolean()) {
+            for (value in 0..random.nextInt(35)) {
+                region1[count.toString()]
+                region2.destroy((value*count).toString())
+            }
+        } else {
+            for (value in 0..random.nextInt(10)) {
+                region2[count.toString()]
+                region1.destroy((value*count).toString())
+            }
+        }
+        Thread.sleep(100)
+
+        println("Processed value $count")
+
+    }
+}
\ No newline at end of file
diff --git a/geode-core/src/main/kotlin/Server.kt b/geode-core/src/main/kotlin/Server.kt
index 48c3fbe..7b4ff19 100644
--- a/geode-core/src/main/kotlin/Server.kt
+++ b/geode-core/src/main/kotlin/Server.kt
@@ -15,6 +15,11 @@ fun main(args: Array<String>) {
         setProperty(ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION, "false")
     }
     val cache = CacheFactory(properties).create()
+    cache.addCacheServer().apply{
+        port=0
+        bindAddress="localhost"
+    }.start()
+
 
     val diskStoreFactory = cache.createDiskStoreFactory()
     diskStoreFactory.setDiskDirs(arrayOf(File("/tmp")))
@@ -36,27 +41,6 @@ fun main(args: Array<String>) {
     regionFactory2.setDiskStoreName(diskStore2Name)
     val region2 = regionFactory2.create("Region3")
 
-    if (System.getProperty("populateData")?.toBoolean() == true) {
-        val random = Random()
-        IntStream.range(0, Int.MAX_VALUE).forEach {
-            region1[it.toString()] = region1.size.toString()
-
-            for (int in 0..random.nextInt(5)) {
-                region2[region2.size.toString()] = region2.size.toString()
-            }
-
-            if (random.nextBoolean()){
-                for (int in 0..random.nextInt(5)) {
-                    region1[it.toString()]
-                }
-            }else{
-                for (int in 0..random.nextInt(5)) {
-                    region2[it.toString()]
-                }
-            }
-            Thread.sleep(100)
-
-            println("Processed value $it")
-        }
-    }
+    val manager = cache.resourceManager
+    val op = manager.createRebalanceFactory().start()
 }
\ No newline at end of file
diff --git a/geode-micrometer-stats/build.gradle.kts b/geode-micrometer-stats/build.gradle.kts
index ca30d69..2886244 100644
--- a/geode-micrometer-stats/build.gradle.kts
+++ b/geode-micrometer-stats/build.gradle.kts
@@ -13,12 +13,12 @@ repositories {
 }
 
 dependencies {
-    compile(kotlin("stdlib-jdk8"))
-    compile(group = "io.micrometer", name = "micrometer-core", version = "1.0.5")
-    compile(group = "io.micrometer", name = "micrometer-registry-influx", version = "1.0.5")
-    compile(group = "io.micrometer", name = "micrometer-registry-jmx", version = "1.0.5")
-    compile(group = "io.micrometer", name = "micrometer-registry-prometheus", version = "1.0.5")
-    compileOnly( project(":geode-common"))
+    implementation(kotlin("stdlib-jdk8"))
+    implementation(group = "io.micrometer", name = "micrometer-core", version = "1.0.5")
+    implementation(group = "io.micrometer", name = "micrometer-registry-influx", version = "1.0.5")
+    implementation(group = "io.micrometer", name = "micrometer-registry-jmx", version = "1.0.5")
+    implementation(group = "io.micrometer", name = "micrometer-registry-prometheus", version = "1.0.5")
+    implementation( project(":geode-common"))
 }
 
 tasks.withType<KotlinCompile> {
diff --git a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerClientSendStats.kt b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerClientSendStats.kt
similarity index 100%
rename from geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerClientSendStats.kt
rename to geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerClientSendStats.kt
diff --git a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerClientStats.kt b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerClientStats.kt
similarity index 100%
rename from geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerClientStats.kt
rename to geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerClientStats.kt
diff --git a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerConnectionStats.kt b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerConnectionStats.kt
similarity index 96%
rename from geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerConnectionStats.kt
rename to geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerConnectionStats.kt
index a21bdb8..8a6c6b6 100644
--- a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerConnectionStats.kt
+++ b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerConnectionStats.kt
@@ -1,57 +1,69 @@
 package org.apache.geode.statistics.client.connection
 
 import org.apache.geode.cache.client.internal.ConnectionStats
+import org.apache.geode.internal.cache.PoolStats
 import org.apache.geode.statistics.StatisticsFactory
 import org.apache.geode.statistics.internal.micrometer.ScalarStatisticsMeter
 import org.apache.geode.statistics.internal.micrometer.impl.CounterStatisticMeter
 import org.apache.geode.statistics.internal.micrometer.impl.MicrometerMeterGroup
-import org.apache.geode.statistics.micrometer.MicrometerStatsImplementor
 import org.apache.geode.statistics.util.NOW_NANOS
 
+class MicrometerConnectionStats(private val statisticsFactory: StatisticsFactory?, private val poolName: String, private var poolStats: PoolStats) :
+        MicrometerMeterGroup(statisticsFactory, "ClientConnectionStats-$poolName"), ConnectionStats {
 
-abstract class MicrometerConnectionStats(statisticsFactory: StatisticsFactory?, private val poolName: String, private val poolStats: MicrometerPoolStats) :
-        MicrometerMeterGroup(statisticsFactory, "ClientConnectionStats"), ConnectionStats {
+    private val clientStats: MicrometerClientStats = MicrometerClientStats(statisticsFactory, poolName)
+    private val clientSendStats: MicrometerClientSendStats = MicrometerClientSendStats(statisticsFactory, poolName)
 
-    private val clientStats: MicrometerClientStats
-    private val clientSendStats: MicrometerClientSendStats
-
-    init {
-        this.clientStats = MicrometerClientStats(statisticsFactory,poolName)
-        this.clientSendStats = MicrometerClientSendStats(statisticsFactory,poolName)
+    override fun registerStatsImplementor(factory: StatisticsFactory?) {
+        registerMeterGroup(clientStats)
+        registerMeterGroup(clientSendStats)
+        super.registerStatsImplementor(factory)
 
     }
 
-    override fun initializeStats(factory: StatisticsFactory?) {
+    override fun initializeStaticMeters() {
+        clientStats.initializeStaticMeters()
+        clientSendStats.initializeStaticMeters()
     }
 
     private fun startOperation(clientInProgressMeter: ScalarStatisticsMeter, clientSendInProgressMeter: ScalarStatisticsMeter): Long {
         clientInProgressMeter.increment()
         clientSendInProgressMeter.increment()
         startClientOp()
-        return System.nanoTime()
+        return NOW_NANOS
     }
 
     private fun endOperationStats(startTime: Long, timedOut: Boolean, failed: Boolean,
                                   inProgressMeter: ScalarStatisticsMeter, failureMeter: ScalarStatisticsMeter,
                                   successMeter: ScalarStatisticsMeter, timer: CounterStatisticMeter,
                                   timeoutMeter: ScalarStatisticsMeter) {
-        val timeInNanos = System.nanoTime() - startTime
+        val timeInNanos = NOW_NANOS - startTime
         endClientOp(timeInNanos, timedOut, failed)
         inProgressMeter.decrement()
-        if (failed) {
-            failureMeter.increment()
-        } else if (timedOut) {
-            timeoutMeter.increment()
-        } else {
-            successMeter.increment()
+        when {
+            failed -> {
+                failureMeter.increment()
+                timer.increment(timeInNanos)
+                return
+            }
+            timedOut -> {
+                timeoutMeter.increment()
+                timer.increment(timeInNanos)
+                return
+            }
+            else -> {
+                successMeter.increment()
+                timer.increment(timeInNanos)
+
+            }
         }
-        timer.increment(timeInNanos)
+
     }
 
     private fun endOperationSendStats(startTime: Long, failed: Boolean,
                                       inProgressMeter: ScalarStatisticsMeter, failureMeter: ScalarStatisticsMeter,
                                       successMeter: ScalarStatisticsMeter, timer: CounterStatisticMeter) {
-        val timeInNanos = System.nanoTime() - startTime
+        val timeInNanos = NOW_NANOS - startTime
         endClientOpSend(timeInNanos, failed)
         inProgressMeter.decrement()
         if (failed) {
diff --git a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerPoolStats.kt b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerPoolStats.kt
similarity index 99%
rename from geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerPoolStats.kt
rename to geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerPoolStats.kt
index 4cbabbb..540bcef 100644
--- a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/connection/MicrometerPoolStats.kt
+++ b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/client/connection/MicrometerPoolStats.kt
@@ -5,7 +5,6 @@ import org.apache.geode.statistics.StatisticsFactory
 import org.apache.geode.statistics.internal.micrometer.impl.CounterStatisticMeter
 import org.apache.geode.statistics.internal.micrometer.impl.GaugeStatisticMeter
 import org.apache.geode.statistics.internal.micrometer.impl.MicrometerMeterGroup
-import org.apache.geode.statistics.micrometer.MicrometerStatsImplementor
 import org.apache.geode.statistics.util.NOW_NANOS
 
 class MicrometerPoolStats(statisticsFactory: StatisticsFactory?,val poolName: String) :
diff --git a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/internal/micrometer/impl/MicrometerMeterGroup.kt b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/internal/micrometer/impl/MicrometerMeterGroup.kt
index f6a5fde..097bbd7 100644
--- a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/internal/micrometer/impl/MicrometerMeterGroup.kt
+++ b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/internal/micrometer/impl/MicrometerMeterGroup.kt
@@ -6,7 +6,8 @@ import org.apache.geode.statistics.StatisticsFactory
 import org.apache.geode.statistics.internal.micrometer.StatisticsMeterGroup
 import org.apache.geode.statistics.micrometer.MicrometerStatsImplementor
 
-abstract class MicrometerMeterGroup(private val statisticsFactory: StatisticsFactory?, private val groupName: String) : StatisticsMeterGroup, MeterBinder,MicrometerStatsImplementor {
+abstract class MicrometerMeterGroup(private val statisticsFactory: StatisticsFactory?, private val groupName: String) : StatisticsMeterGroup, MeterBinder,
+        MicrometerStatsImplementor {
     private val registeredMeters = mutableListOf<MicrometerStatisticMeter>()
     private val registeredMeterGroups = mutableListOf<MicrometerMeterGroup>()
 
diff --git a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/internal/micrometer/impl/MicrometerStatisticsManager.kt b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/internal/micrometer/impl/MicrometerStatisticsManager.kt
index 2b2f9b9..e12cfb6 100644
--- a/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/internal/micrometer/impl/MicrometerStatisticsManager.kt
+++ b/geode-micrometer-stats/src/main/kotlin/org/apache/geode/statistics/internal/micrometer/impl/MicrometerStatisticsManager.kt
@@ -4,6 +4,13 @@ import com.sun.net.httpserver.HttpServer
 import io.micrometer.core.instrument.Clock
 import io.micrometer.core.instrument.Meter
 import io.micrometer.core.instrument.MeterRegistry
+import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics
+import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics
+import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics
+import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics
+import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics
+import io.micrometer.core.instrument.binder.system.ProcessorMetrics
+import io.micrometer.core.instrument.binder.system.UptimeMetrics
 import io.micrometer.core.instrument.composite.CompositeMeterRegistry
 import io.micrometer.core.instrument.config.MeterFilter
 import io.micrometer.core.instrument.config.MeterFilterReply
@@ -46,6 +53,13 @@ object MicrometerStatisticsManager : StatisticsManager {
     init {
 //        meterRegistries.forEach { meterRegistry.add(it) }
         meterRegistry.config().commonTags("serverName", serverName)
+        JvmGcMetrics().bindTo(meterRegistry)
+        JvmThreadMetrics().bindTo(meterRegistry)
+        JvmMemoryMetrics().bindTo(meterRegistry)
+        ClassLoaderMetrics().bindTo(meterRegistry)
+        FileDescriptorMetrics().bindTo(meterRegistry)
+        ProcessorMetrics().bindTo(meterRegistry)
+        UptimeMetrics().bindTo(meterRegistry)
     }
 
     override fun registerMeterRegistry(meterRegistry: MeterRegistry) {
@@ -88,8 +102,8 @@ object MicrometerStatisticsManager : StatisticsManager {
 
     private fun createInfluxDB(): InfluxMeterRegistry {
         val config = object : InfluxConfig {
-            override fun step(): Duration = Duration.ofSeconds(10)
-            override fun db(): String = "mydb"
+            override fun step(): Duration = Duration.ofSeconds(1)
+            override fun db(): String = "mydb2"
             override fun get(k: String): String? = null
         }
         return InfluxMeterRegistry(config, Clock.SYSTEM)