@Override void logWaitOnOperationsSevere(Logger alertLogger, long severeAlertMS) { super.logWaitOnOperationsSevere(alertLogger, severeAlertMS); synchronized (this) { logger .debug("Waiting for these threads: {}", previousVersionOperationThreads); logger .debug("New version threads are {}", currentVersionOperationThreads); } }
void waitForCurrentOperations(Logger alertLogger, long warnMS, long severeAlertMS) { // this may wait longer than it should if the membership version changes, dumping // more operations into the previousVersionOpCount final long startTime = System.currentTimeMillis(); final long warnTime = startTime + warnMS; final long severeAlertTime = startTime + severeAlertMS; boolean warned = false; boolean severeAlertIssued = false; while (operationsAreInProgress()) { // The advisor's close() method will set the pVOC to zero. This loop // must not terminate due to cache closure until that happens. try { Thread.sleep(50); } catch (InterruptedException e) { throw new GemFireIOException("State flush interrupted"); } long now = System.currentTimeMillis(); if ((!warned) && System.currentTimeMillis() >= warnTime) { warned = true; logWaitOnOperationsWarning(alertLogger, warnMS); } else if (warned && !severeAlertIssued && (now >= severeAlertTime)) { logWaitOnOperationsSevere(alertLogger, severeAlertMS); severeAlertIssued = true; } } if (warned) { alertLogger.info("Wait for current operations completed"); } }