Code Monkey home page Code Monkey logo

finagle-metrics's Introduction

Hi there ๐Ÿ‘‹

Rodrigo's github stats

๐Ÿ“ซ Reach me at:

Twitter Badge Linkedin Badge Facebook  Badge

finagle-metrics's People

Contributors

bryanv avatar pmatpadi avatar rlazoti avatar schrepfler avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

finagle-metrics's Issues

Duplicate gauge registration

Hi,

I tried using finagle-metrics 0.10 along with Finagle 7.1.0 and I get bombarded with:

java.lang.IllegalArgumentException: A metric named clnt.some-client-name.connections already exists
        at com.codahale.metrics.MetricRegistry.register(MetricRegistry.java:91)
        at com.twitter.finagle.metrics.MetricsStatsReceiver$MetricGauge.<init>(MetricsStatsReceiver.scala:27)
        at com.twitter.finagle.metrics.MetricsStatsReceiver.addGauge(MetricsStatsReceiver.scala:51)
        at com.twitter.finagle.stats.BroadcastStatsReceiver$Two$$anon$1.<init>(BroadcastStatsReceiver.scala:29)
...

I was unable to reproduce this locally, but it happens all the time on a server with real traffic. Probably because the problem requires many concurrent requests to become manifest.

My suspicions fall on this block of code. Although the calls inside the MetricGauge are synchronized, the calls to addGauge are not.

Can it be that multiple clients are calling addGauge all at once and each manages to invoke metrics.register independently?

2.12-ification

Now that 2.12 is stable, could you start cross-publishing for 2.12? finagle-core is cross-published for 2.12 starting with 6.41.0.

Scoverage issue

Hello,
This is a pretty strange bug report but after upgrading to 0.0.4 we're seeing the following errors when generating coverageReports with scoverage. This is with finagle 6.40 and scalatest 3.0.0.

[info] service.FeatureTest  *** ABORTED ***
[info]   java.lang.ExceptionInInitializerError:
[info]   at com.twitter.finagle.util.DefaultTimer$.<init>(HashedWheelTimer.scala:170)
[info]   at com.twitter.finagle.util.DefaultTimer$.<clinit>(HashedWheelTimer.scala)
[info]   at com.twitter.finagle.stats.JsonExporter.<init>(JsonExporter.scala:65)
[info]   at com.twitter.finagle.stats.MetricsExporter.<init>(MetricsStatsReceiver.scala:334)
[info]   at com.twitter.finagle.stats.MetricsExporter.<init>(MetricsStatsReceiver.scala:338)
[info]   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[info]   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[info]   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[info]   at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
[info]   at java.lang.Class.newInstance(Class.java:442)
[info]   ...
[info]   Cause: java.io.FileNotFoundException: /Users/rodrigolazoti/Projects/Framework/Scala/finagle-metrics/target/scala-2.11/scoverage-data/scoverage.measurements.145 (No such file or directory)
[info]   at java.io.FileOutputStream.open0(Native Method)
[info]   at java.io.FileOutputStream.open(FileOutputStream.java:270)
[info]   at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
[info]   at java.io.FileWriter.<init>(FileWriter.java:107)
[info]   at scoverage.Invoker$$anonfun$1.apply(Invoker.scala:42)
[info]   at scoverage.Invoker$$anonfun$1.apply(Invoker.scala:42)
[info]   at scala.collection.concurrent.TrieMap.getOrElseUpdate(TrieMap.scala:901)
[info]   at scoverage.Invoker$.invoked(Invoker.scala:42)
[info]   at com.twitter.finagle.metrics.MetricsStatsReceiver.stat(MetricsStatsReceiver.scala:49)
[info]   at com.twitter.finagle.stats.BroadcastStatsReceiver$Two.stat(BroadcastStatsReceiver.scala:24)
[info]   ...
java.lang.ExceptionInInitializerError
    at com.twitter.finagle.util.DefaultTimer$.<init>(HashedWheelTimer.scala:170)
    at com.twitter.finagle.util.DefaultTimer$.<clinit>(HashedWheelTimer.scala)
    at com.twitter.finagle.stats.JsonExporter.<init>(JsonExporter.scala:65)
    at com.twitter.finagle.stats.MetricsExporter.<init>(MetricsStatsReceiver.scala:334)
    at com.twitter.finagle.stats.MetricsExporter.<init>(MetricsStatsReceiver.scala:338)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at com.twitter.app.LoadService$$anonfun$5.apply(LoadService.scala:74)
    at com.twitter.app.LoadService$$anonfun$5.apply(LoadService.scala:63)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
    at com.twitter.app.LoadService$.apply(LoadService.scala:63)
    at com.twitter.finagle.util.LoadService$.apply(LoadService.scala:14)
    at com.twitter.finagle.http.HttpMuxer$.<init>(HttpMuxer.scala:122)
    at com.twitter.finagle.http.HttpMuxer$.<clinit>(HttpMuxer.scala)
    at com.twitter.server.Lifecycle$class.$init$(Lifecycle.scala:14)
    at service.ApplicationServer.<init>(ApplicationServer.scala:15)
    at service.FeatureTest .<init>(FeatureTest.scala:24)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:435)
    at sbt.TestRunner.runTest$1(TestFramework.scala:76)
    at sbt.TestRunner.run(TestFramework.scala:85)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:202)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:202)
    at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:185)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:202)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:202)
    at sbt.TestFunction.apply(TestFramework.scala:207)
    at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
    at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
    at sbt.std.Transform$$anon$4.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: /Users/rodrigolazoti/Projects/Framework/Scala/finagle-metrics/target/scala-2.11/scoverage-data/scoverage.measurements.145 (No such file or directory)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileWriter.<init>(FileWriter.java:107)
    at scoverage.Invoker$$anonfun$1.apply(Invoker.scala:42)
    at scoverage.Invoker$$anonfun$1.apply(Invoker.scala:42)
    at scala.collection.concurrent.TrieMap.getOrElseUpdate(TrieMap.scala:901)
    at scoverage.Invoker$.invoked(Invoker.scala:42)
    at com.twitter.finagle.metrics.MetricsStatsReceiver.stat(MetricsStatsReceiver.scala:49)
    at com.twitter.finagle.stats.BroadcastStatsReceiver$Two.stat(BroadcastStatsReceiver.scala:24)
    at com.twitter.finagle.stats.StatsReceiverProxy$class.stat(StatsReceiverProxy.scala:9)
    at com.twitter.finagle.stats.LoadedStatsReceiver$.stat(LoadedStatsReceiver.scala:9)
    at com.twitter.finagle.stats.NameTranslatingStatsReceiver.stat(NameTranslatingStatsReceiver.scala:29)
    at com.twitter.finagle.stats.StatsReceiverProxy$class.stat(StatsReceiverProxy.scala:9)
    at com.twitter.finagle.stats.FinagleStatsReceiver$.stat(LoadedStatsReceiver.scala:36)
    at com.twitter.finagle.stats.NameTranslatingStatsReceiver.stat(NameTranslatingStatsReceiver.scala:29)
    at com.twitter.finagle.util.TimerStats$.deviation(TimerStats.scala:27)
    at com.twitter.finagle.util.HashedWheelTimer$.<init>(HashedWheelTimer.scala:155)
    at com.twitter.finagle.util.HashedWheelTimer$.<clinit>(HashedWheelTimer.scala)
    at com.twitter.finagle.util.DefaultTimer$.<init>(HashedWheelTimer.scala:170)
    at com.twitter.finagle.util.DefaultTimer$.<clinit>(HashedWheelTimer.scala)
    at com.twitter.finagle.stats.JsonExporter.<init>(JsonExporter.scala:65)
    at com.twitter.finagle.stats.MetricsExporter.<init>(MetricsStatsReceiver.scala:334)
    at com.twitter.finagle.stats.MetricsExporter.<init>(MetricsStatsReceiver.scala:338)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at com.twitter.app.LoadService$$anonfun$5.apply(LoadService.scala:74)
    at com.twitter.app.LoadService$$anonfun$5.apply(LoadService.scala:63)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
    at com.twitter.app.LoadService$.apply(LoadService.scala:63)
    at com.twitter.finagle.util.LoadService$.apply(LoadService.scala:14)
    at com.twitter.finagle.http.HttpMuxer$.<init>(HttpMuxer.scala:122)
    at com.twitter.finagle.http.HttpMuxer$.<clinit>(HttpMuxer.scala)
    at com.twitter.server.Lifecycle$class.$init$(Lifecycle.scala:14)
    at service.ApplicationServer.<init>(ApplicationServer.scala:15)
    at service.FeatureTest .<init>(FeatureTest .scala:24)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:435)
    at sbt.TestRunner.runTest$1(TestFramework.scala:76)
    at sbt.TestRunner.run(TestFramework.scala:85)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:202)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:202)
    at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:185)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:202)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:202)
    at sbt.TestFunction.apply(TestFramework.scala:207)
    at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
    at sbt.Tests$$anonfun$9.apply(Tests.scala:216)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
    at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:44)
    at sbt.std.Transform$$anon$4.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[error] Could not run test service.FeatureTest : java.lang.ExceptionInInitializerError

A metric named clnt.dispatcher.serial.queue_size already exists

Hey,

Even after applying the synchronized block for adding Gauge, I still get the exception about metric name is already exists
java.lang.IllegalArgumentException: A metric named clnt.dispatcher.serial.queue_size already exists at com.codahale.metrics.MetricRegistry.register(MetricRegistry.java:91) at com.twitter.finagle.metrics.MetricsStatsReceiver$MetricGauge.<init>(MetricsStatsReceiver.scala:46) at com.twitter.finagle.metrics.MetricsStatsReceiver.addGauge(MetricsStatsReceiver.scala:76) at com.twitter.finagle.stats.StatsReceiverProxy.addGauge(StatsReceiverProxy.scala:10) at com.twitter.finagle.stats.StatsReceiverProxy.addGauge$(StatsReceiverProxy.scala:10) at com.twitter.finagle.stats.LoadedStatsReceiver$.addGauge(LoadedStatsReceiver.scala:9) at com.twitter.finagle.stats.NameTranslatingStatsReceiver.addGauge(NameTranslatingStatsReceiver.scala:32) at com.twitter.finagle.stats.StatsReceiverProxy.addGauge(StatsReceiverProxy.scala:10) at com.twitter.finagle.stats.StatsReceiverProxy.addGauge$(StatsReceiverProxy.scala:10) at com.twitter.finagle.stats.ClientStatsReceiver$.addGauge(LoadedStatsReceiver.scala:46)
Any idea what could cause this case?

Potential data race in MetricsGauge

Hello,
I see that a similar issue had been logged in issue #2, the fix for which was to remove matching gauges prior to adding a new value. This seems to work in the general case but I've run into an issue where occassionally we'll see an issue such as A metric named clnt.some_label.queue_size already exists. Especially when using Future.join or Future.collect which leads me to believe there is a data race between when the metric is checked and when it is actually written. I forked the repository and wrapped the call with this.synchronized{} which appears to have fixed my own issue.

disable some metrics in finagle

when i exported finagle internal metrics to codahale, i found so many metrics that i don't care about. could i disable some metrics?

Finagle-metrics 0.0.9 is breaking when running under 2.12.0

Looks like there was a breaking API change in Finagle.
Seeing this in the logs and the startup fails

java.lang.AbstractMethodError: Method com/twitter/finagle/metrics/MetricsStatsReceiver.stat(Lcom/twitter/finagle/stats/Verbosity;Lscala/collection/Seq;)Lcom/twitter/finagle/stats/Stat; is abstract

finagle v6.35: HttpClient: IllegalArgumentException: A metric named inet.dns.queue_size already exists

Http Client runtime exception thrown at startup under finagle v6.35:
e.g.

Http.newService("172.18.10.98:9191")

results in IllegalArgumentException: A metric named inet.dns.queue_size already exists

oOo
sbt dependancies:

scalaVersion := "2.11.8"

val finagleVersion = "6.35.0"

libraryDependencies ++=
Seq("com.twitter" %% "finagle-core" ,
"com.twitter" %% "finagle-http" ).map(_ % finagleVersion withSources())

libraryDependencies ++= Seq("com.github.rlazoti" % "finagle-metrics_2.11" % "0.0.2")

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.