From 818921600833692495b3c92f7977d7584237f5bf Mon Sep 17 00:00:00 2001 From: "Jan N. Klug" Date: Mon, 3 Jul 2023 20:33:39 +0200 Subject: [PATCH 1/3] Fix wrong ready marker in ScriptEngineFactoryBundleTracker Signed-off-by: Jan N. Klug --- .../internal/ScriptEngineFactoryBundleTracker.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java index 3b4f6f4dd9f..11dfe522f27 100644 --- a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java +++ b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java @@ -65,7 +65,7 @@ public ScriptEngineFactoryBundleTracker(final @Reference ReadyService readyServi 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 @@ -126,11 +126,15 @@ public void onReadyMarkerRemoved(ReadyMarker readyMarker) { } private void checkReady() { - if (!ready && startLevelService.getStartLevel() > StartLevelService.STARTLEVEL_OSGI && allBundlesActive()) { - logger.info("All automation bundles ready."); + int startLevel = startLevelService.getStartLevel(); + boolean allBundlesActive = allBundlesActive(); + + if (!ready && startLevel >= StartLevelService.STARTLEVEL_MODEL && allBundlesActive) { + logger.debug("All automation bundles ready: {}", bundles); readyService.markReady(READY_MARKER); ready = true; } else if (ready && !allBundlesActive()) { + logger.debug("All automation bundles ready: {}", bundles); readyService.unmarkReady(READY_MARKER); ready = false; } From 2ab77f5b287e0759824e7a77006253686f0c99de Mon Sep 17 00:00:00 2001 From: "Jan N. Klug" Date: Wed, 5 Jul 2023 20:31:51 +0200 Subject: [PATCH 2/3] improve logging Signed-off-by: Jan N. Klug --- .../ScriptEngineFactoryBundleTracker.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java index 11dfe522f27..465b6293d19 100644 --- a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java +++ b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java @@ -85,8 +85,8 @@ public Bundle addingBundle(@NonNullByDefault({}) Bundle bundle, @Nullable Bundle if (isScriptingBundle(bundle)) { logger.debug("Added {}: {} ", bsn, stateToString(state)); bundles.put(bsn, state); + checkReady(); } - checkReady(); return bundle; } @@ -99,8 +99,8 @@ public void modifiedBundle(@NonNullByDefault({}) Bundle bundle, @Nullable Bundle if (isScriptingBundle(bundle)) { logger.debug("Modified {}: {}", bsn, stateToString(state)); bundles.put(bsn, state); + checkReady(); } - checkReady(); } @Override @@ -110,31 +110,34 @@ public void removedBundle(@NonNullByDefault({}) Bundle bundle, @Nullable BundleE if (isScriptingBundle(bundle)) { logger.debug("Removed {}", bsn); bundles.remove(bsn); + checkReady(); } - checkReady(); } @Override public void onReadyMarkerAdded(ReadyMarker readyMarker) { + logger.debug("Readymarker {} added", readyMarker); checkReady(); } @Override public void onReadyMarkerRemoved(ReadyMarker readyMarker) { + logger.debug("Readymarker {} removed", readyMarker); ready = false; readyService.unmarkReady(READY_MARKER); } - private void checkReady() { + private synchronized void checkReady() { int startLevel = startLevelService.getStartLevel(); boolean allBundlesActive = allBundlesActive(); + logger.trace("ready: {}, startlevel: {}, allActive: {}", ready, startLevel, allBundlesActive); if (!ready && startLevel >= StartLevelService.STARTLEVEL_MODEL && allBundlesActive) { - logger.debug("All automation bundles ready: {}", bundles); + logger.debug("Adding ready marker: All automation bundles ready ({})", bundles); readyService.markReady(READY_MARKER); ready = true; - } else if (ready && !allBundlesActive()) { - logger.debug("All automation bundles ready: {}", bundles); + } else if (ready && !allBundlesActive) { + logger.debug("Removing ready marker: Not all automation bundles ready ({})", bundles); readyService.unmarkReady(READY_MARKER); ready = false; } From 62e49213efbfeba2139ddc8c6d60814ddb73b6cf Mon Sep 17 00:00:00 2001 From: "Jan N. Klug" Date: Wed, 5 Jul 2023 20:58:09 +0200 Subject: [PATCH 3/3] fix ready marker handling Signed-off-by: Jan N. Klug --- .../internal/ScriptEngineFactoryBundleTracker.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java index 465b6293d19..69c23fecc66 100644 --- a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java +++ b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineFactoryBundleTracker.java @@ -50,18 +50,15 @@ public class ScriptEngineFactoryBundleTracker extends BundleTracker impl private final Logger logger = LoggerFactory.getLogger(ScriptEngineFactoryBundleTracker.class); private final ReadyService readyService; - private final StartLevelService startLevelService; private final Map 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) @@ -117,22 +114,23 @@ public void removedBundle(@NonNullByDefault({}) Bundle bundle, @Nullable BundleE @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 synchronized void checkReady() { - int startLevel = startLevelService.getStartLevel(); boolean allBundlesActive = allBundlesActive(); logger.trace("ready: {}, startlevel: {}, allActive: {}", ready, startLevel, allBundlesActive); - if (!ready && startLevel >= StartLevelService.STARTLEVEL_MODEL && allBundlesActive) { + if (!ready && startLevel && allBundlesActive) { logger.debug("Adding ready marker: All automation bundles ready ({})", bundles); readyService.markReady(READY_MARKER); ready = true;