Github user HeartSaVioR commented on a diff in the pull request:
https://github.com/apache/storm/pull/2504#discussion_r162543795
--- Diff:
storm-server/src/main/java/org/apache/storm/metricstore/rocksdb/MetricsCleaner.java
---
@@ -0,0 +1,101 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.storm.metricstore.rocksdb;
+
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Meter;
+import org.apache.storm.metric.StormMetricsRegistry;
+import org.apache.storm.metricstore.FilterOptions;
+import org.apache.storm.metricstore.MetricException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class for removing expired metrics and unused metadata from the RocksDB
store.
+ */
+public class MetricsCleaner implements Runnable, AutoCloseable {
+ private static final Logger LOG =
LoggerFactory.getLogger(MetricsCleaner.class);
+ private static long DEFAULT_SLEEP_MS = 4L * 60L * 60L * 1000L;
+ private RocksDbStore store;
+ private long retentionHours;
+ private volatile boolean shutdown = false;
+ private long sleepMs = DEFAULT_SLEEP_MS;
+ private Meter failureMeter;
+ private long purgeTimestamp = 0L;
+
+ MetricsCleaner(RocksDbStore store, int retentionHours, int
hourlyPeriod, Meter failureMeter) {
+ this.store = store;
+ this.retentionHours = retentionHours;
+ if (hourlyPeriod > 0) {
+ this.sleepMs = hourlyPeriod * 60L * 60L * 1000L;
+ }
+ this.failureMeter = failureMeter;
+
+ Gauge<Long> gauge = new Gauge<Long>() {
+ @Override
+ public Long getValue() {
+ return purgeTimestamp;
+ }
+ };
+
StormMetricsRegistry.registerProvidedGauge("MetricsCleaner:purgeTimestamp",
gauge);
+ }
+
+ @Override
+ public void close() {
+ shutdown = true;
+ }
+
+ @Override
+ public void run() {
+ while (true) {
+ if (shutdown) {
--- End diff --
Is this a reason to have separate if statement instead of `while
(!shutdown)`?
---