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 f6c5d85e0e00ed5949d0854ba9339551007e9883 Author: Alex Heneveld <[email protected]> AuthorDate: Tue Sep 14 15:08:54 2021 +0100 add option to clear orig mgmt state, and test that it is doing what is expected --- .../core/mgmt/ha/HighAvailabilityManagerImpl.java | 3 ++- .../apache/brooklyn/core/mgmt/rebind/RebindOptions.java | 6 ++++++ .../brooklyn/core/mgmt/rebind/RebindTestFixture.java | 6 +++++- .../apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java | 11 ++++++++++- .../brooklyn/feed/windows/WinRmCommandSensorTest.java | 15 +++++++++++++-- 5 files changed, 36 insertions(+), 5 deletions(-) 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 9bbd00e..8c63775 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 @@ -989,7 +989,8 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager { * which is comparatively more expensive, so we only do it when we stop being a hotProxy or when we are demoted * (e.g. during the periodic rebind as hot_stanby we will not repeatedly clear the brooklyn-managed-bundles). */ - protected void clearManagedItems(ManagementTransitionMode mode) { + @VisibleForTesting + public void clearManagedItems(ManagementTransitionMode mode) { // 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); diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindOptions.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindOptions.java index 72e956f..14e40cb 100644 --- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindOptions.java +++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindOptions.java @@ -39,6 +39,7 @@ import com.google.common.collect.Iterables; public class RebindOptions { public boolean checkSerializable; + public boolean clearOrigManagementContext; public boolean terminateOrigManagementContext; public RebindExceptionHandler exceptionHandler = RebindExceptionHandlerImpl.builder().strict().build(); public ManagementContext origManagementContext; @@ -58,6 +59,7 @@ public class RebindOptions { public static RebindOptions create(RebindOptions options) { RebindOptions result = create(); result.checkSerializable(options.checkSerializable); + result.clearOrigManagementContext(options.clearOrigManagementContext); result.terminateOrigManagementContext(options.terminateOrigManagementContext); result.exceptionHandler(options.exceptionHandler); result.origManagementContext(options.origManagementContext); @@ -80,6 +82,10 @@ public class RebindOptions { this.terminateOrigManagementContext = val; return this; } + public RebindOptions clearOrigManagementContext(boolean val) { + this.clearOrigManagementContext = val; + return this; + } public RebindOptions defaultExceptionHandler() { this.exceptionHandler = null; return this; diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java index b09aba6..b2296e8 100644 --- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java +++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestFixture.java @@ -18,6 +18,7 @@ */ package org.apache.brooklyn.core.mgmt.rebind; +import static com.google.common.base.Preconditions.checkNotNull; import java.io.File; import java.io.IOException; import java.util.List; @@ -38,7 +39,10 @@ import org.apache.brooklyn.core.entity.EntityPredicates; import org.apache.brooklyn.core.entity.StartableApplication; import org.apache.brooklyn.core.entity.trait.Startable; import org.apache.brooklyn.core.internal.BrooklynProperties; +import org.apache.brooklyn.core.mgmt.ha.HighAvailabilityManagerImpl; +import org.apache.brooklyn.core.mgmt.internal.BrooklynObjectManagementMode; import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext; +import org.apache.brooklyn.core.mgmt.internal.ManagementTransitionMode; import org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore; import org.apache.brooklyn.core.mgmt.persist.FileBasedObjectStore; import org.apache.brooklyn.core.mgmt.persist.PersistMode; @@ -123,7 +127,7 @@ public abstract class RebindTestFixture<T extends StartableApplication> { return true; } - /** As {@link #createNewManagementContext(File)} using the default memento dir */ + /** As {@link #createNewManagementContext(File, Map)} using the default memento dir */ protected LocalManagementContext createNewManagementContext() { return createNewManagementContext(mementoDir, null); } diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java index 4107735..128d50c 100644 --- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java +++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java @@ -45,9 +45,12 @@ import org.apache.brooklyn.api.objs.Identifiable; import org.apache.brooklyn.core.entity.EntityInternal; import org.apache.brooklyn.core.internal.BrooklynProperties; import org.apache.brooklyn.core.location.internal.LocationInternal; +import org.apache.brooklyn.core.mgmt.ha.HighAvailabilityManagerImpl; import org.apache.brooklyn.core.mgmt.ha.ManagementPlaneSyncRecordPersisterToObjectStore; +import org.apache.brooklyn.core.mgmt.internal.BrooklynObjectManagementMode; import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext; import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal; +import org.apache.brooklyn.core.mgmt.internal.ManagementTransitionMode; import org.apache.brooklyn.core.mgmt.persist.BrooklynMementoPersisterToObjectStore; import org.apache.brooklyn.core.mgmt.persist.FileBasedObjectStore; import org.apache.brooklyn.core.mgmt.persist.PersistMode; @@ -354,6 +357,7 @@ public class RebindTestUtils { boolean hasHaPersister = newManagementContext != null && newManagementContext.getHighAvailabilityManager().getPersister() != null; boolean checkSerializable = options.checkSerializable; boolean terminateOrigManagementContext = options.terminateOrigManagementContext; + boolean clearOrigManagementContext = options.clearOrigManagementContext; Function<BrooklynMementoPersister, Void> stateTransformer = options.stateTransformer; LOG.info("Rebinding app, using mementoDir " + mementoDir + "; object store " + objectStore); @@ -385,11 +389,16 @@ public class RebindTestUtils { RebindTestUtils.checkCurrentMementoSerializable(origManagementContext); } + if (clearOrigManagementContext) { + checkNotNull(origManagementContext, "must supply origManagementContext with terminateOrigManagementContext"); + ((HighAvailabilityManagerImpl)origManagementContext.getHighAvailabilityManager()).clearManagedItems( + ManagementTransitionMode.transitioning(BrooklynObjectManagementMode.MANAGED_PRIMARY, BrooklynObjectManagementMode.UNMANAGED_PERSISTED) ); + } if (terminateOrigManagementContext) { checkNotNull(origManagementContext, "must supply origManagementContext with terminateOrigManagementContext"); origManagementContext.terminate(); } - + if (mementoDirBackup != null) { FileUtil.copyDir(mementoDir, mementoDirBackup); FileUtil.setFilePermissionsTo700(mementoDirBackup); diff --git a/software/winrm/src/test/java/org/apache/brooklyn/feed/windows/WinRmCommandSensorTest.java b/software/winrm/src/test/java/org/apache/brooklyn/feed/windows/WinRmCommandSensorTest.java index 75e10c4..543570f 100644 --- a/software/winrm/src/test/java/org/apache/brooklyn/feed/windows/WinRmCommandSensorTest.java +++ b/software/winrm/src/test/java/org/apache/brooklyn/feed/windows/WinRmCommandSensorTest.java @@ -22,9 +22,11 @@ import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.entity.EntitySpec; import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.api.location.LocationSpec; +import org.apache.brooklyn.api.mgmt.ha.HighAvailabilityMode; import org.apache.brooklyn.api.sensor.AttributeSensor; import org.apache.brooklyn.core.entity.EntityAsserts; import org.apache.brooklyn.core.entity.RecordingSensorEventListener; +import org.apache.brooklyn.core.mgmt.rebind.RebindOptions; import org.apache.brooklyn.core.mgmt.rebind.RebindTestFixtureWithApp; import org.apache.brooklyn.core.sensor.Sensors; import org.apache.brooklyn.core.sensor.http.HttpRequestSensor; @@ -65,6 +67,12 @@ public class WinRmCommandSensorTest extends RebindTestFixtureWithApp { RecordingWinRmTool.clear(); } + @Override + protected TestApplication rebind() throws Exception { + // trigger demotion to stop threads + return rebind(RebindOptions.create().clearOrigManagementContext(true)); + } + @Test public void testRebind() throws Exception { RecordingWinRmTool.setCustomResponse(".*mycommand.*", new RecordingWinRmTool.CustomResponse(0, "myval", "")); @@ -81,9 +89,12 @@ public class WinRmCommandSensorTest extends RebindTestFixtureWithApp { TestApplication app2 = rebind(); - entity = app2.getChildren().iterator().next(); + Entity entity2 = app2.getChildren().iterator().next(); RecordingWinRmTool.setCustomResponse(".*mycommand.*", new RecordingWinRmTool.CustomResponse(0, "myval2", "")); - EntityAsserts.assertAttributeEqualsEventually(entity, Sensors.newStringSensor("mysensor"), "myval2"); + EntityAsserts.assertAttributeEqualsEventually(entity2, Sensors.newStringSensor("mysensor"), "myval2"); + + // entity is not updated + EntityAsserts.assertAttributeEquals(entity, Sensors.newStringSensor("mysensor"), "myval"); } // "Integration" because takes a second
