Skip to content

Commit 81bab63

Browse files
Evgenii Slutckiijenkins
authored andcommitted
strato concurrent tests
1. making strato related tests concurrent as they are timing out on CI at this point 2. adding syncronized to Hotspot snapshot method as it is not thread safe. in particular when we lookup GC name we call PerfStringCounter that calls super PerfByteArrayCounter that resets buffer position to 0. if called concurrently one thread will read the counter resetting position to buffer length and we get BufferUnderflow i.e. race condition https://github.com/AdoptOpenJDK/openjdk-jdk11u/blob/master/src/java.management/share/classes/sun/management/counter/perf/PerfByteArrayCounter.java#L53 https://github.com/AdoptOpenJDK/openjdk-jdk11u/blob/master/src/java.management/share/classes/sun/management/counter/perf/PerfStringCounter.java#L64 Stack trace: https://ton.pdxa.twitter.com/scoot/prod_d70f787a-276c-4db8-7e76-36016e1ef442_08fbec44-75f9-482d-7f87-b240c9af3c1e/stdlog ``` generated columnDescs match generated ops(com.twitter.strato.config.compile_tests.ColumnDescTest) java.nio.BufferUnderflowException at java.base/java.nio.DirectByteBuffer.get(DirectByteBuffer.java:294) at java.base/java.nio.ByteBuffer.get(ByteBuffer.java:770) at java.management/sun.management.counter.perf.PerfByteArrayCounter.byteArrayValue(PerfByteArrayCounter.java:57) at java.management/sun.management.counter.perf.PerfStringCounter.stringValue(PerfStringCounter.java:64) at java.management/sun.management.counter.perf.PerfStringCounter.getValue(PerfStringCounter.java:58) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at com.twitter.jvm.Hotspot.$anonfun$getGc$5(Hotspot.scala:90) at scala.Option.map(Option.scala:230) at com.twitter.jvm.Hotspot.$anonfun$getGc$4(Hotspot.scala:90) at com.twitter.jvm.Hotspot.$anonfun$getGc$4$adapted(Hotspot.scala:89) at scala.Option.flatMap(Option.scala:271) at com.twitter.jvm.Hotspot.$anonfun$getGc$2(Hotspot.scala:89) at com.twitter.jvm.Hotspot.$anonfun$getGc$2$adapted(Hotspot.scala:88) at scala.Option.flatMap(Option.scala:271) at com.twitter.jvm.Hotspot.getGc(Hotspot.scala:88) at com.twitter.jvm.Hotspot.snap(Hotspot.scala:149) at com.twitter.strato.config.loading.ConfigResourceMonitoring$.collect(ConfigResourceMonitoring.scala:55) at com.twitter.strato.config.loading.CompiledStratoCatalog.<init>(CompiledStratoCatalog.scala:56) at com.twitter.strato.config.loading.CompiledStratoCatalog$.apply(CompiledStratoCatalog.scala:493) at com.twitter.strato.test.config.ConfigTestCatalog$$anon$1.mkConfigCatalog(ConfigTestCatalog.scala:333) at com.twitter.strato.test.config.ConfigTestCatalog$.apply(ConfigTestCatalog.scala:159) at com.twitter.strato.test.config.StratoConfigSuite.mkCatalog(StratoConfigSuite.scala:164) at com.twitter.strato.config.compile_tests.ColumnDescTest.$anonfun$new$1(ColumnDescTest.scala:18) at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23) at com.twitter.servo.testing.prop.PropertySuite.$anonfun$test$1(PropertySuite.scala:71) ``` Differential Revision: https://phabricator.twitter.biz/D1188541
1 parent 7d74b9c commit 81bab63

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

util-jvm/src/main/scala/com/twitter/jvm/Hotspot.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ import com.twitter.conversions.StorageUnitOps._
44
import com.twitter.conversions.DurationOps._
55
import com.twitter.util.Time
66
import java.lang.management.ManagementFactory
7-
import java.util.logging.{Level, Logger}
8-
import javax.management.openmbean.{CompositeData, CompositeDataSupport}
9-
import javax.management.{
10-
Notification,
11-
NotificationEmitter,
12-
NotificationListener,
13-
ObjectName,
14-
RuntimeMBeanException
15-
}
7+
import java.util.logging.Level
8+
import java.util.logging.Logger
9+
import javax.management.openmbean.CompositeData
10+
import javax.management.openmbean.CompositeDataSupport
11+
import javax.management.Notification
12+
import javax.management.NotificationEmitter
13+
import javax.management.NotificationListener
14+
import javax.management.ObjectName
15+
import javax.management.RuntimeMBeanException
1616
import javax.naming.OperationNotSupportedException
1717
import scala.jdk.CollectionConverters._
1818
import scala.language.reflectiveCalls
@@ -115,7 +115,7 @@ class Hotspot extends Jvm {
115115
}
116116
}
117117

118-
def snap: Snapshot = {
118+
def snap: Snapshot = synchronized {
119119
val cs = counters("")
120120
val heap = for {
121121
invocations <- cs.get("sun.gc.collector.0.invocations").map(long)

0 commit comments

Comments
 (0)