You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Ekaterina Dimitrova (Jira)" <ji...@apache.org> on 2020/10/27 14:47:00 UTC

[jira] [Created] (CASSANDRA-16228) Fixing race condition on ColumnFamilyStore and TableMetrics initialization that makes MetricListener to see an instance in an unknown state

Ekaterina Dimitrova created CASSANDRA-16228:
-----------------------------------------------

             Summary: Fixing 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
            Reporter: Ekaterina Dimitrova


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 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-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org