mirror of
https://github.com/danieldemus/openhab-core.git
synced 2026-07-29 12:34:22 +02:00
Fix wrong ready marker in ScriptEngineFactoryBundleTracker (#3683)
* Fix wrong ready marker in ScriptEngineFactoryBundleTracker * fix ready marker handling Signed-off-by: Jan N. Klug <github@klug.nrw>
This commit is contained in:
+18
-13
@@ -50,22 +50,19 @@ public class ScriptEngineFactoryBundleTracker extends BundleTracker<Bundle> impl
|
||||
private final Logger logger = LoggerFactory.getLogger(ScriptEngineFactoryBundleTracker.class);
|
||||
|
||||
private final ReadyService readyService;
|
||||
private final StartLevelService startLevelService;
|
||||
|
||||
private final Map<String, Integer> bundles = new ConcurrentHashMap<>();
|
||||
private boolean startLevel = false;
|
||||
private boolean ready = false;
|
||||
|
||||
@Activate
|
||||
public ScriptEngineFactoryBundleTracker(final @Reference ReadyService readyService,
|
||||
final @Reference StartLevelService startLevelService, BundleContext bc) {
|
||||
public ScriptEngineFactoryBundleTracker(final @Reference ReadyService readyService, BundleContext bc) {
|
||||
super(bc, STATE_MASK, null);
|
||||
this.readyService = readyService;
|
||||
this.startLevelService = startLevelService;
|
||||
|
||||
this.open();
|
||||
|
||||
readyService.registerTracker(this, new ReadyMarkerFilter().withType(StartLevelService.STARTLEVEL_MARKER_TYPE)
|
||||
.withIdentifier(Integer.toString(StartLevelService.STARTLEVEL_OSGI)));
|
||||
.withIdentifier(Integer.toString(StartLevelService.STARTLEVEL_MODEL)));
|
||||
}
|
||||
|
||||
@Deactivate
|
||||
@@ -85,8 +82,8 @@ public class ScriptEngineFactoryBundleTracker extends BundleTracker<Bundle> impl
|
||||
if (isScriptingBundle(bundle)) {
|
||||
logger.debug("Added {}: {} ", bsn, stateToString(state));
|
||||
bundles.put(bsn, state);
|
||||
checkReady();
|
||||
}
|
||||
checkReady();
|
||||
|
||||
return bundle;
|
||||
}
|
||||
@@ -99,8 +96,8 @@ public class ScriptEngineFactoryBundleTracker extends BundleTracker<Bundle> impl
|
||||
if (isScriptingBundle(bundle)) {
|
||||
logger.debug("Modified {}: {}", bsn, stateToString(state));
|
||||
bundles.put(bsn, state);
|
||||
checkReady();
|
||||
}
|
||||
checkReady();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -110,27 +107,35 @@ public class ScriptEngineFactoryBundleTracker extends BundleTracker<Bundle> impl
|
||||
if (isScriptingBundle(bundle)) {
|
||||
logger.debug("Removed {}", bsn);
|
||||
bundles.remove(bsn);
|
||||
checkReady();
|
||||
}
|
||||
checkReady();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReadyMarkerAdded(ReadyMarker readyMarker) {
|
||||
logger.debug("Readymarker {} added", readyMarker);
|
||||
startLevel = true;
|
||||
checkReady();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReadyMarkerRemoved(ReadyMarker readyMarker) {
|
||||
logger.debug("Readymarker {} removed", readyMarker);
|
||||
startLevel = false;
|
||||
ready = false;
|
||||
readyService.unmarkReady(READY_MARKER);
|
||||
}
|
||||
|
||||
private void checkReady() {
|
||||
if (!ready && startLevelService.getStartLevel() > StartLevelService.STARTLEVEL_OSGI && allBundlesActive()) {
|
||||
logger.info("All automation bundles ready.");
|
||||
private synchronized void checkReady() {
|
||||
boolean allBundlesActive = allBundlesActive();
|
||||
logger.trace("ready: {}, startlevel: {}, allActive: {}", ready, startLevel, allBundlesActive);
|
||||
|
||||
if (!ready && startLevel && allBundlesActive) {
|
||||
logger.debug("Adding ready marker: All automation bundles ready ({})", bundles);
|
||||
readyService.markReady(READY_MARKER);
|
||||
ready = true;
|
||||
} else if (ready && !allBundlesActive()) {
|
||||
} else if (ready && !allBundlesActive) {
|
||||
logger.debug("Removing ready marker: Not all automation bundles ready ({})", bundles);
|
||||
readyService.unmarkReady(READY_MARKER);
|
||||
ready = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user