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)