[
https://issues.apache.org/jira/browse/CASSANDRA-7177?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13991223#comment-13991223
]
Jason Brown commented on CASSANDRA-7177:
----------------------------------------
While I do see the comment in the CDL javadoc now ("This method is typically
used for debugging and testing purposes"), if you look at the implementation of
ASQ.tryAcquireSharedNanos(), it's not entirely free nor "returns straight away"
as two native calls are made. However, I'm not wedded to the
micro-optimization, and can commit either way.
> Starting threads in the OutboundTcpConnectionPool constructor causes race
> conditions
> ------------------------------------------------------------------------------------
>
> Key: CASSANDRA-7177
> URL: https://issues.apache.org/jira/browse/CASSANDRA-7177
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Reporter: Sergio Bossa
> Assignee: Sergio Bossa
> Attachments: CASSANDRA-7177.patch
>
>
> The OutboundTcpConnectionPool starts connection threads in its constructor,
> causing race conditions when MessagingService#getConnectionPool is
> concurrently called for the first time for a given address.
> I.e., here's one of the races:
> {noformat}
> WARN 12:49:03,182 Error processing
> org.apache.cassandra.metrics:type=Connection,scope=127.0.0.1,name=CommandPendingTasks
> javax.management.InstanceAlreadyExistsException:
> org.apache.cassandra.metrics:type=Connection,scope=127.0.0.1,name=CommandPendingTasks
> at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437)
> at
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898)
> at
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966)
> at
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900)
> at
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324)
> at
> com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
> at
> com.yammer.metrics.reporting.JmxReporter.registerBean(JmxReporter.java:464)
> at
> com.yammer.metrics.reporting.JmxReporter.processGauge(JmxReporter.java:438)
> at
> com.yammer.metrics.reporting.JmxReporter.processGauge(JmxReporter.java:16)
> at com.yammer.metrics.core.Gauge.processWith(Gauge.java:28)
> at
> com.yammer.metrics.reporting.JmxReporter.onMetricAdded(JmxReporter.java:395)
> at
> com.yammer.metrics.core.MetricsRegistry.notifyMetricAdded(MetricsRegistry.java:516)
> at
> com.yammer.metrics.core.MetricsRegistry.getOrAdd(MetricsRegistry.java:491)
> at
> com.yammer.metrics.core.MetricsRegistry.newGauge(MetricsRegistry.java:79)
> at com.yammer.metrics.Metrics.newGauge(Metrics.java:70)
> at
> org.apache.cassandra.metrics.ConnectionMetrics.<init>(ConnectionMetrics.java:71)
> at
> org.apache.cassandra.net.OutboundTcpConnectionPool.<init>(OutboundTcpConnectionPool.java:55)
> at
> org.apache.cassandra.net.MessagingService.getConnectionPool(MessagingService.java:498)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.2#6252)