[ https://issues.apache.org/jira/browse/CASSANDRA-16228?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ekaterina Dimitrova updated CASSANDRA-16228: -------------------------------------------- Test and Documentation Plan: https://issues.apache.org/jira/browse/CASSANDRA-16228?focusedCommentId=17221755&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17221755 Status: Patch Available (was: In Progress) > Fix race condition on ColumnFamilyStore and TableMetrics initialization that > makes MetricListener to see an instance in an unknown state > ---------------------------------------------------------------------------------------------------------------------------------------- > > Key: CASSANDRA-16228 > URL: https://issues.apache.org/jira/browse/CASSANDRA-16228 > Project: Cassandra > Issue Type: Bug > Components: Observability/Metrics > Reporter: Ekaterina Dimitrova > Assignee: Ekaterina Dimitrova > Priority: Normal > Fix For: 3.0.x, 3.11.x, 4.0-beta > > > There is a dependency between TableMetrics, SecondaryIndexManager and Tracker > which requires certain order of the operations in ColumnFamilyStore > constructor. > The following test will be added to ColumnFamilyMetricTest to show the issue: > {code:java} > @Test > public void testStartupRaceConditionOnMetricListeners() > { > // Since the ColumnFamilyStore instance reference escapes during the > construction > // we have a race condition and listeners can see an instance that is in an > unknown state. > // This test just check that all callbacks can access the data without > throwing any exception. > registerMetricListener(); > SchemaLoader.createKeyspace("Keyspace2", > KeyspaceParams.simple(1), > SchemaLoader.standardCFMD("Keyspace2", "Standard2")); > } > private void registerMetricListener() > { > CassandraMetricsRegistry.Metrics.addListener(new > MetricRegistryListener.Base() > { > @Override > public void onGaugeAdded(String name, Gauge<?> gauge) > { > gauge.getValue(); > } > @Override > public void onGaugeRemoved(String name) > { > } > @Override > public void onCounterAdded(String name, Counter counter) > { > counter.getCount(); > } > @Override > public void onCounterRemoved(String name) > { > } > @Override > public void onHistogramAdded(String name, Histogram histogram) > { > histogram.getCount(); > } > @Override > public void onHistogramRemoved(String name) > { > } > @Override > public void onMeterAdded(String name, Meter meter) > { > meter.getCount(); > } > @Override > public void onMeterRemoved(String name) > { > } > @Override > public void onTimerAdded(String name, Timer timer) > { > timer.getCount(); > } > @Override > public void onTimerRemoved(String name) > { > } > });{code} > *NOTE:* In order to be able to run the test and use registerMetricListener() > method a small modification to requests in CacheMetrics is needed. This will > be submitted and further explained with a coming patch. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org