haosenchen opened a new pull request, #8648:
URL: https://github.com/apache/hbase/pull/8648

   Backport of the registry-cleanup mechanism only. The per-table 
MetricsTableLatenciesImpl.histogramsByTable and
   MetricsTableQueryMeterImpl.metersByTable are populated on first access but 
never cleaned up when a table leaves the RegionServer (drop / disable / move / 
region close). For short-lived tables (e.g. hourly tables with a 7-day 
retention window) this leaks both the maps and the per-table entries under the 
sub=TableLatencies JMX bean without bound.
   
   * MetricsTableLatencies / MetricsTableQueryMeter: add deleteTable(...) on 
both interfaces and their impls.
   * MetricsTableLatenciesImpl: switch histogramsByTable to ConcurrentHashMap + 
computeIfAbsent (also closes a pre-existing TODO) and implement 
deleteTable(String) which removes the entry AND unregisters the 12 
MutableTimeHistogram / MutableSizeHistogram objects from the underlying 
DynamicMetricsRegistry via removeMetric(baseName). removeMetric is used rather 
than removeHistogramMetrics because the histogram is stored under baseName 
itself and the 14 suffix metrics (_num_ops / _sum_ops / _min / _max / _mean / 
*_percentile) are produced dynamically at snapshot time -- 
removeHistogramMetrics only tries to remove baseName + 8 fixed suffix keys that 
never actually exist in the map, so it is a no-op for MutableHistogram entries.
   * MetricsTableQueryMeterImpl: implement deleteTable(TableName) that removes 
the entry and unregisters both read/write meters from the shared MetricRegistry.
   * RegionServerTableMetrics: expose a single deleteTable(TableName) that 
forwards to both cleanup paths.
   * MetricsRegionServer: expose getRegionServerTableMetrics() so the cleanup 
driver can reach the container.
   * MetricsTableWrapperAggregateImpl.TableMetricsWrapperRunnable: compute 
onlineTables at the top of run(), take the difference with a new lastSeenTables 
snapshot, and invoke RegionServerTableMetrics.deleteTable() for every table 
that has left the RegionServer since the previous scheduled run. The cleanup 
path runs before the aggregate metrics collection body so it also fires for 
users that only enabled per-table latency / query meters and not the aggregate 
table metrics.
   
   Tests
   -----
   * TestMetricsTableLatencies#testDeleteTableRemovesAllLatencyHistograms (new, 
unit): verifies that all 12 histogram families of the dropped table disappear, 
other tables are untouched, re-adding samples lazily re-registers the 
histograms, and deleting an unknown table is a no-op.
   
   * TestMetricsTableWrapperCleanup (new, MediumTests, end-to-end): wires a 
mocked HRegionServer + real RegionServerTableMetrics + real 
MetricsTableLatenciesImpl and hand-drives two rounds of 
TableMetricsWrapperRunnable across an online-regions transition {keep_table, 
drop_table} -> {keep_table}. Asserts that every latency histogram and both 
query meters of drop_table have vanished from the metrics registry / JMX 
snapshot after round 2 while keep_table is preserved.
   
   Notes
   -----
   HBASE-27681 (the upstream fix for HBASE-27486 on branch-2.6+) is not 
backported wholesale because it renames the JMX beans (sub=TableLatencies -> 
sub=TableRequests_<table>) which is not backward-compatible for existing 
monitoring. This change intentionally keeps the JMX bean names and metric key 
layout stable and only backports the registry cleanup mechanism.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to