[ https://issues.apache.org/jira/browse/CASSANDRA-16228?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Benjamin Lerer updated CASSANDRA-16228: --------------------------------------- Status: Ready to Commit (was: Review In Progress) > TableMetrics are exposed before ColumnFamilyStore is fully initialized > ---------------------------------------------------------------------- > > 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 > > > The {{ColumnFamilyStore}} exposes the {{TableMetrics}} before it is fully > initialized, due to that it is possible to perform a call via the metrics > that access uninitialized part of the {{ColumnFamilyStore}}. > The following test can 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} > While looking into that ticket we also discovered a problem with the used of > {{Metered}} in {{CacheMetrics}}. > Metrics reporter looks for metrics classes that are instance of the standard > codahale classes. Due to that, other Metered implementations are not be > exposed through the reporter. This ticket will also address that issue. -- 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