in src/main/java/org/apache/sling/installer/provider/jcr/impl/JcrInstaller.java [412:502]
public void runOneCycle(final InstallerConfig cfg, final Session session) {
logger.debug("Running watch cycle.");
try {
boolean didRefresh = false;
if (cfg.anyWatchFolderNeedsScan()) {
session.refresh(false);
didRefresh = true;
if (scanningIsPaused(cfg, session)) {
if (!pauseMessageLogged) {
// Avoid flooding the logs every 500 msec so log at info level once
logger.info("Detected signal for pausing the JCR Provider i.e. child nodes found under path {}. " +
"JCR Provider scanning would not be performed", cfg.getPauseScanNodePath());
pauseMessageLogged = true;
}
try {
Thread.sleep(JcrInstaller.RUN_LOOP_DELAY_MSEC);
} catch (InterruptedException ignored) {
logger.debug("InterruptedException in scanningIsPaused block");
}
return;
} else if (pauseMessageLogged) {
pauseMessageLogged = false;
}
}
// Rescan WatchedFolders if needed
boolean scanWf = false;
for (final WatchedFolder wf : cfg.cloneWatchedFolders()) {
if (!wf.needsScan()) {
continue;
}
scanWf = true;
if (!didRefresh) {
session.refresh(false);
didRefresh = true;
}
counters.incrementAndGet(SCAN_FOLDERS_COUNTER);
final WatchedFolder.ScanResult sr = wf.scan();
boolean toDo = false;
if (sr.toAdd.size() > 0) {
logger.info("Registering resource with OSGi installer: {}", sr.toAdd);
toDo = true;
}
if (sr.toRemove.size() > 0) {
logger.info("Removing resource from OSGi installer: {}", sr.toRemove);
toDo = true;
}
if (toDo) {
installer.updateResources(URL_SCHEME, sr.toAdd.toArray(new InstallableResource[sr.toAdd.size()]),
sr.toRemove.toArray(new String[sr.toRemove.size()]));
}
}
// Update list of WatchedFolder if we got any relevant events,
// or if there were any WatchedFolder events
if (scanWf || updateFoldersListTimer.expired()) {
if (!didRefresh) {
session.refresh(false);
didRefresh = true;
}
updateFoldersListTimer.reset();
counters.incrementAndGet(UPDATE_FOLDERS_LIST_COUNTER);
final List<String> toRemove = updateFoldersList(cfg, session);
if (toRemove.size() > 0) {
logger.info("Removing resource from OSGi installer (folder deleted): {}", toRemove);
installer.updateResources(URL_SCHEME, null,
toRemove.toArray(new String[toRemove.size()]));
}
}
} catch (final Exception e) {
logger.warn("Exception in runOneCycle()", e);
}
if (backgroundThread.active.get()) {
synchronized (backgroundThread.lock) {
try {
backgroundThread.lock.wait(RUN_LOOP_DELAY_MSEC);
} catch (final InterruptedException ignore) {
Thread.currentThread().interrupt();
}
}
}
counters.incrementAndGet(RUN_LOOP_COUNTER);
}