Source:
<code>public void runWithFlags(boolean force, boolean suspendMajor, boolean suspendMinor) { long threadStart = MathUtils.nowInNano(); if (force) { LOG.info("Garbage collector thread forced to perform GC before expiry of wait time."); } compactor.cleanUpAndRecover(); try { entryLogMetaMap = extractMetaFromEntryLogs(entryLogMetaMap); doGcLedgers(); doGcEntryLogs(); if (suspendMajor) { LOG.info("Disk almost full, suspend major compaction to slow down filling disk."); } if (suspendMinor) { LOG.info("Disk full, suspend minor compaction to slow down filling disk."); } long curTime = System.currentTimeMillis(); if (enableMajorCompaction && (!suspendMajor) && (force || curTime - lastMajorCompactionTime > majorCompactionInterval)) { LOG.info("Enter major compaction, suspendMajor {}", suspendMajor); majorCompacting.set(true); doCompactEntryLogs(majorCompactionThreshold); lastMajorCompactionTime = System.currentTimeMillis(); lastMinorCompactionTime = lastMajorCompactionTime; gcStats.getMajorCompactionCounter().inc(); majorCompacting.set(false); } else if (enableMinorCompaction && (!suspendMinor) && (force || curTime - lastMinorCompactionTime > minorCompactionInterval)) { LOG.info("Enter minor compaction, suspendMinor {}", suspendMinor); minorCompacting.set(true); doCompactEntryLogs(minorCompactionThreshold); lastMinorCompactionTime = System.currentTimeMillis(); gcStats.getMinorCompactionCounter().inc(); minorCompacting.set(false); } if (force) { if (forceGarbageCollection.compareAndSet(true, false)) { LOG.info("{} Set forceGarbageCollection to false after force GC to make it forceGC-able again.", Thread.currentThread().getName()); } } <START> gcStats.getGcThreadRuntime().registerSuccessfulEvent(MathUtils.nowInNano() - threadStart, <END> TimeUnit.NANOSECONDS); } catch (EntryLogMetadataMapException e) { LOG.error("Error in entryLog-metadatamap, Failed to complete GC/Compaction due to entry-log {}", e.getMessage(), e); } }</code><technical_language>i dont get swallowing exception explicitly. If callers of runWithFlags, is called 'safeRun' this method is submitted executor, recreate thread if is terminated of a failure</technical_language>

Target:
public void runWithFlags(boolean force, boolean suspendMajor, boolean suspendMinor) { long threadStart = MathUtils.nowInNano(); if (force) { LOG.info("Garbage collector thread forced to perform GC before expiry of wait time."); } compactor.cleanUpAndRecover(); try { extractMetaFromEntryLogs(); doGcLedgers(); doGcEntryLogs(); if (suspendMajor) { LOG.info("Disk almost full, suspend major compaction to slow down filling disk."); } if (suspendMinor) { LOG.info("Disk full, suspend minor compaction to slow down filling disk."); } long curTime = System.currentTimeMillis(); if (enableMajorCompaction && (!suspendMajor) && (force || curTime - lastMajorCompactionTime > majorCompactionInterval)) { LOG.info("Enter major compaction, suspendMajor {}", suspendMajor); majorCompacting.set(true); doCompactEntryLogs(majorCompactionThreshold); lastMajorCompactionTime = System.currentTimeMillis(); lastMinorCompactionTime = lastMajorCompactionTime; gcStats.getMajorCompactionCounter().inc(); majorCompacting.set(false); } else if (enableMinorCompaction && (!suspendMinor) && (force || curTime - lastMinorCompactionTime > minorCompactionInterval)) { LOG.info("Enter minor compaction, suspendMinor {}", suspendMinor); minorCompacting.set(true); doCompactEntryLogs(minorCompactionThreshold); lastMinorCompactionTime = System.currentTimeMillis(); gcStats.getMinorCompactionCounter().inc(); minorCompacting.set(false); } if (force && forceGarbageCollection.compareAndSet(true, false)) { LOG.info("{} Set forceGarbageCollection to false after force GC to make it forceGC-able again.", Thread.currentThread().getName()); } gcStats.getGcThreadRuntime().registerSuccessfulEvent(MathUtils.nowInNano() - threadStart, TimeUnit.NANOSECONDS); } catch (EntryLogMetadataMapException e) { LOG.error("Error in entryLog-metadatamap, Failed to complete GC/Compaction due to entry-log {}", e.getMessage(), e); } }