public synchronized void start() { checkState(backgroundTask == null, "QueryTracker already started"); backgroundTask = queryManagementExecutor.scheduleWithFixedDelay(() -> { try { failAbandonedQueries(); } catch (Throwable e) { log.error(e, "Error cancelling abandoned queries"); } try { enforceTimeLimits(); } catch (Throwable e) { log.error(e, "Error enforcing query timeout limits"); } try { removeExpiredQueries(); } catch (Throwable e) { log.error(e, "Error removing expired queries"); } try { pruneExpiredQueries(); } catch (Throwable e) { log.error(e, "Error pruning expired queries"); } }, 1, 1, TimeUnit.SECONDS); }