You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2021/09/14 21:56:39 UTC
[brooklyn-server] 20/27: add option to clear orig mgmt state,
and test that it is doing what is expected
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 <al...@cloudsoftcorp.com>
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