@Override public void onConfigurationChange(Configuration conf) { super.onConfigurationChange(conf); int newSize = conf.getInt(OLD_WALS_CLEANER_THREAD_SIZE, DEFAULT_OLD_WALS_CLEANER_THREAD_SIZE); if (newSize == oldWALsCleaner.size()) { if (LOG.isDebugEnabled()) { LOG.debug("Size from configuration is the same as previous which is " + newSize + ", no need to update."); } return; } interruptOldWALsCleaner(); oldWALsCleaner = createOldWalsCleaner(newSize); cleanerThreadTimeoutMsec = conf.getLong(OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, DEFAULT_OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC); cleanerThreadCheckIntervalMsec = conf.getLong(OLD_WALS_CLEANER_THREAD_CHECK_INTERVAL_MSEC, DEFAULT_OLD_WALS_CLEANER_THREAD_CHECK_INTERVAL_MSEC); }
private List<Thread> createOldWalsCleaner(int size) { LOG.info("Creating OldWALs cleaners with size=" + size); List<Thread> oldWALsCleaner = new ArrayList<>(size); for (int i = 0; i < size; i++) { Thread cleaner = new Thread(() -> deleteFile()); cleaner.setName("OldWALsCleaner-" + i); cleaner.setDaemon(true); cleaner.start(); oldWALsCleaner.add(cleaner); } return oldWALsCleaner; }
HConstants.HREGION_OLDLOGDIR_NAME); FileSystem fs = TEST_UTIL.getDFSCluster().getFileSystem(); LogCleaner cleaner = new LogCleaner(3000, server, conf, fs, oldWALsDir); assertEquals(LogCleaner.DEFAULT_OLD_WALS_CLEANER_THREAD_SIZE, cleaner.getSizeOfCleaners()); assertEquals(LogCleaner.DEFAULT_OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, cleaner.getCleanerThreadTimeoutMsec()); assertEquals(LogCleaner.DEFAULT_OLD_WALS_CLEANER_THREAD_CHECK_INTERVAL_MSEC, cleaner.getCleanerThreadCheckIntervalMsec()); assertEquals(numOfFiles, status.length); Thread thread = new Thread(() -> cleaner.chore()); thread.setDaemon(true); thread.start(); conf.setLong(LogCleaner.OLD_WALS_CLEANER_THREAD_CHECK_INTERVAL_MSEC, threadCheckIntervalToChange); cleaner.onConfigurationChange(conf); assertEquals(sizeToChange, cleaner.getSizeOfCleaners()); assertEquals(threadTimeoutToChange, cleaner.getCleanerThreadTimeoutMsec()); assertEquals(threadCheckIntervalToChange, cleaner.getCleanerThreadCheckIntervalMsec());
LogCleaner cleaner = new LogCleaner(1000, server, conf, fs, oldLogDir); cleaner.chore();
new LogCleaner(cleanerInterval, this, conf, getMasterWalManager().getFileSystem(), getMasterWalManager().getOldLogDir());
int cleanerInterval = conf.getInt("hbase.master.cleaner.interval", 60 * 1000); this.logCleaner = new LogCleaner(cleanerInterval, this, conf, getMasterFileSystem().getFileSystem(), getMasterFileSystem().getOldLogDir()); Threads.setDaemonThreadRunning(logCleaner.getThread(), n + ".oldLogCleaner");
/** * @param period the period of time to sleep between each run * @param stopper the stopper * @param conf configuration to use * @param fs handle to the FS * @param oldLogDir the path to the archived logs */ public LogCleaner(final int period, final Stoppable stopper, Configuration conf, FileSystem fs, Path oldLogDir) { super("LogsCleaner", period, stopper, conf, fs, oldLogDir, HBASE_MASTER_LOGCLEANER_PLUGINS); this.pendingDelete = new LinkedBlockingQueue<>(); int size = conf.getInt(OLD_WALS_CLEANER_THREAD_SIZE, DEFAULT_OLD_WALS_CLEANER_THREAD_SIZE); this.oldWALsCleaner = createOldWalsCleaner(size); this.cleanerThreadTimeoutMsec = conf.getLong(OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, DEFAULT_OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC); this.cleanerThreadCheckIntervalMsec = conf.getLong(OLD_WALS_CLEANER_THREAD_CHECK_INTERVAL_MSEC, DEFAULT_OLD_WALS_CLEANER_THREAD_CHECK_INTERVAL_MSEC); }
if (this.logCleaner != null) this.logCleaner.cancel(true); if (this.hfileCleaner != null) this.hfileCleaner.cancel(true); if (this.quotaManager != null) this.quotaManager.stop();
HConstants.HREGION_OLDLOGDIR_NAME); FileSystem fs = TEST_UTIL.getDFSCluster().getFileSystem(); LogCleaner cleaner = new LogCleaner(3000, server, conf, fs, oldWALsDir); assertEquals(LogCleaner.DEFAULT_OLD_WALS_CLEANER_THREAD_SIZE, cleaner.getSizeOfCleaners()); assertEquals(LogCleaner.DEFAULT_OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, cleaner.getCleanerThreadTimeoutMsec()); assertEquals(LogCleaner.DEFAULT_OLD_WALS_CLEANER_THREAD_CHECK_INTERVAL_MSEC, cleaner.getCleanerThreadCheckIntervalMsec()); assertEquals(numOfFiles, status.length); Thread thread = new Thread(() -> cleaner.chore()); thread.setDaemon(true); thread.start(); conf.setLong(LogCleaner.OLD_WALS_CLEANER_THREAD_CHECK_INTERVAL_MSEC, threadCheckIntervalToChange); cleaner.onConfigurationChange(conf); assertEquals(sizeToChange, cleaner.getSizeOfCleaners()); assertEquals(threadTimeoutToChange, cleaner.getCleanerThreadTimeoutMsec()); assertEquals(threadCheckIntervalToChange, cleaner.getCleanerThreadCheckIntervalMsec());
LogCleaner cleaner = new LogCleaner(1000, server, conf, fs, oldLogDir); cleaner.chore();
new LogCleaner(cleanerInterval, this, conf, getMasterFileSystem().getFileSystem(), getMasterFileSystem().getOldLogDir());