This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit 6057b9c323b7d5e6a5638497a1925a75888598a4 Author: Alex Heneveld <[email protected]> AuthorDate: Tue Sep 14 14:57:23 2021 +0100 tweak to cancelling and deleting tasks --- .../apache/brooklyn/api/mgmt/rebind/RebindManager.java | 3 +++ .../core/mgmt/ha/HighAvailabilityManagerImpl.java | 9 +++++---- .../mgmt/internal/NonDeploymentManagementContext.java | 5 +++++ .../brooklyn/core/mgmt/rebind/RebindIteration.java | 9 +-------- .../brooklyn/core/mgmt/rebind/RebindManagerImpl.java | 17 ++++++++--------- 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/RebindManager.java b/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/RebindManager.java index d9d4422..79fc49f 100644 --- a/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/RebindManager.java +++ b/api/src/main/java/org/apache/brooklyn/api/mgmt/rebind/RebindManager.java @@ -97,6 +97,9 @@ public interface RebindManager { * Interrupts any current activity and waits for it to cease. */ public void stopReadOnly(); + @Beta + public void stopEntityTasksAndCleanUp(String reason, Duration delayBeforeCancelling, Duration delayBeforeAbandoning); + public boolean isReadOnly(); /** diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerImpl.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerImpl.java index d3ad012..9bbd00e 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerImpl.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/ha/HighAvailabilityManagerImpl.java @@ -990,9 +990,6 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager { * (e.g. during the periodic rebind as hot_stanby we will not repeatedly clear the brooklyn-managed-bundles). */ protected void clearManagedItems(ManagementTransitionMode mode) { - // note, tasks are cancelled prior to this, when coming from RO mode, via - // RebindManagerImpl.stopEntityAndDoneTasksBeforeRebinding - // log this because it may be surprising, it is just HA transitions, // not symmetric with usual single-node start LOG.info("Clearing all managed items on transition to "+mode); @@ -1022,7 +1019,11 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager { ((BasicBrooklynTypeRegistry)managementContext.getTypeRegistry()).clear(); managementContext.getCatalogInitialization().clearBrooklynManagedBundles(); - ((LocalManagementContext)managementContext).getGarbageCollector().gcTasks(); + // note, tasks are also cancelled prior to this when coming from RO mode, via + // RebindManagerImpl.stopReadOnly call to same method + managementContext.getRebindManager().stopEntityTasksAndCleanUp("when clearing mgmt on HA change", + Duration.millis(500), + Duration.seconds(2)); } /** Starts hot standby or hot backup, in foreground diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java index 5613e91..e88e08e 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java @@ -603,6 +603,11 @@ public class NonDeploymentManagementContext implements ManagementContextInternal } @Override + public void stopEntityTasksAndCleanUp(String reason, Duration delayBeforeCancelling, Duration delayBeforeAbandoning) { + // no-op + } + + @Override public void reset() { throw new IllegalStateException("Non-deployment context "+NonDeploymentManagementContext.this+" is not valid for this operation."); } diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java index bf28d65..cf96700 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindIteration.java @@ -20,8 +20,6 @@ package org.apache.brooklyn.core.mgmt.rebind; import static com.google.common.base.Preconditions.checkNotNull; import java.util.function.Supplier; -import java.util.stream.Collectors; -import org.apache.brooklyn.api.mgmt.Task; import static org.apache.brooklyn.core.BrooklynFeatureEnablement.FEATURE_AUTO_FIX_CATALOG_REF_ON_REBIND; import static org.apache.brooklyn.core.BrooklynFeatureEnablement.FEATURE_BACKWARDS_COMPATIBILITY_INFER_CATALOG_ITEM_ON_REBIND; import static org.apache.brooklyn.core.catalog.internal.CatalogUtils.newClassLoadingContextForCatalogItems; @@ -44,7 +42,6 @@ import org.apache.brooklyn.api.catalog.CatalogItem; import org.apache.brooklyn.api.entity.Application; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.location.Location; -import org.apache.brooklyn.api.mgmt.ExecutionContext; import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext; import org.apache.brooklyn.api.mgmt.ha.ManagementNodeState; import org.apache.brooklyn.api.mgmt.rebind.RebindContext; @@ -85,7 +82,6 @@ import org.apache.brooklyn.core.entity.EntityInternal; import org.apache.brooklyn.core.feed.AbstractFeed; import org.apache.brooklyn.core.location.AbstractLocation; import org.apache.brooklyn.core.location.internal.LocationInternal; -import org.apache.brooklyn.core.mgmt.BrooklynTaskTags; import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContextSequential; import org.apache.brooklyn.core.mgmt.classloading.JavaBrooklynClassLoadingContext; import org.apache.brooklyn.core.mgmt.ha.OsgiManager; @@ -113,8 +109,6 @@ import org.apache.brooklyn.util.collections.MutableList; import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.core.ClassLoaderUtils; import org.apache.brooklyn.util.core.flags.FlagUtils; -import org.apache.brooklyn.util.core.task.BasicExecutionContext; -import org.apache.brooklyn.util.core.task.BasicExecutionManager; import org.apache.brooklyn.util.core.task.Tasks; import org.apache.brooklyn.util.exceptions.Exceptions; import org.apache.brooklyn.util.guava.Maybe; @@ -122,7 +116,6 @@ import org.apache.brooklyn.util.javalang.Reflections; import org.apache.brooklyn.util.osgi.VersionedName; import org.apache.brooklyn.util.stream.InputStreamSource; import org.apache.brooklyn.util.text.Strings; -import org.apache.brooklyn.util.time.CountdownTimer; import org.apache.brooklyn.util.time.Duration; import org.apache.brooklyn.util.time.Time; import org.slf4j.Logger; @@ -265,7 +258,7 @@ public abstract class RebindIteration { protected void doRun() throws Exception { if (readOnlyRebindCount.get() > 1) { // prevent leaking - rebindManager.stopEntityAndDoneTasksBeforeRebinding("before next read-only rebind", Duration.seconds(10), Duration.seconds(20)); + rebindManager.stopEntityTasksAndCleanUp("before next read-only rebind", Duration.seconds(10), Duration.seconds(20)); } loadManifestFiles(); diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java index 781a8c1..899e10b 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/RebindManagerImpl.java @@ -47,7 +47,6 @@ import org.apache.brooklyn.api.mgmt.rebind.mementos.TreeNode; import org.apache.brooklyn.api.objs.BrooklynObject; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.core.BrooklynFeatureEnablement; -import org.apache.brooklyn.core.BrooklynVersion; import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.core.enricher.AbstractEnricher; import org.apache.brooklyn.core.entity.Entities; @@ -398,18 +397,18 @@ public class RebindManagerImpl implements RebindManager { } readOnlyTask = null; LOG.debug("Stopped read-only rebinding ("+this+"), mgmt "+managementContext.getManagementNodeId()); + + // short waits when promoting + stopEntityTasksAndCleanUp("when stopping hot proxy read-only mode", + Duration.seconds(2), + Duration.seconds(5)); + // note, items are subsequently unmanaged via: + // HighAvailabilityManagerImpl.clearManagedItems } - // short waits when promoting - stopEntityAndDoneTasksBeforeRebinding("when stopping hot proxy read-only mode", - Duration.seconds(2), - Duration.seconds(5)); - // note, items are subsequently unmanaged via: - // HighAvailabilityManagerImpl.clearManagedItems } - public void stopEntityAndDoneTasksBeforeRebinding(String reason, Duration delayBeforeCancelling, Duration delayBeforeAbandoning) { + public void stopEntityTasksAndCleanUp(String reason, Duration delayBeforeCancelling, Duration delayBeforeAbandoning) { // TODO inputs should be configurable - if (!managementContext.isRunning() || managementContext.getExecutionManager().isShutdown()) { return; }
