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 2014/11/19 18:47:58 UTC
[03/13] incubator-brooklyn git commit: clean up logic for HA
start+change mode
clean up logic for HA start+change mode
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/b0bb61ab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/b0bb61ab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/b0bb61ab
Branch: refs/heads/master
Commit: b0bb61abee4d8ad187dee56c746be233c6ad5111
Parents: 6127a75
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Nov 18 19:40:51 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Nov 19 13:53:07 2014 +0000
----------------------------------------------------------------------
.../brooklyn/entity/rebind/RebindManager.java | 4 ++--
.../entity/rebind/RebindManagerImpl.java | 6 ++++--
.../management/entitlement/Entitlements.java | 8 ++++++--
.../ha/HighAvailabilityManagerImpl.java | 19 +++++++++++++------
.../brooklyn/management/ha/HotStandbyTest.java | 6 ++----
5 files changed, 27 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b0bb61ab/api/src/main/java/brooklyn/entity/rebind/RebindManager.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/rebind/RebindManager.java b/api/src/main/java/brooklyn/entity/rebind/RebindManager.java
index 8f34c5a..556c6bc 100644
--- a/api/src/main/java/brooklyn/entity/rebind/RebindManager.java
+++ b/api/src/main/java/brooklyn/entity/rebind/RebindManager.java
@@ -113,8 +113,8 @@ public interface RebindManager {
@VisibleForTesting
public void waitForPendingComplete(Duration duration) throws InterruptedException, TimeoutException;
/** Forcibly performs persistence, in the foreground
- * @deprecated since 0.7.0; use {@link #forcePersistNow(boolean)},
- * default parameter here is false to mean incremental, with */
+ * @deprecated since 0.7.0; use {@link #forcePersistNow(boolean, PersistenceExceptionHandler)},
+ * default parameter here is false to mean incremental, with null/default exception handler */
@VisibleForTesting
public void forcePersistNow();
/** Forcibly performs persistence, in the foreground, either full (all entities) or incremental;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b0bb61ab/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
index 1319caa..2a282b0 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
@@ -331,7 +331,7 @@ public class RebindManagerImpl implements RebindManager {
try {
rebind(null, null, mode);
} catch (Exception e) {
- Exceptions.propagate(e);
+ throw Exceptions.propagate(e);
}
Callable<Task<?>> taskFactory = new Callable<Task<?>>() {
@@ -340,7 +340,6 @@ public class RebindManagerImpl implements RebindManager {
public Void call() {
try {
rebind(null, null, mode);
- readOnlyRebindCount++;
return null;
} catch (RuntimeInterruptedException e) {
LOG.debug("Interrupted rebinding (re-interrupting): "+e);
@@ -540,6 +539,9 @@ public class RebindManagerImpl implements RebindManager {
rebindActive.acquire();
} catch (InterruptedException e1) { Exceptions.propagate(e1); }
RebindTracker.setRebinding();
+ if (ManagementNodeState.isHotProxy(mode))
+ readOnlyRebindCount++;
+
Stopwatch timer = Stopwatch.createStarted();
try {
Reflections reflections = new Reflections(classLoader);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b0bb61ab/core/src/main/java/brooklyn/management/entitlement/Entitlements.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/entitlement/Entitlements.java b/core/src/main/java/brooklyn/management/entitlement/Entitlements.java
index e8652a4..a555cac 100644
--- a/core/src/main/java/brooklyn/management/entitlement/Entitlements.java
+++ b/core/src/main/java/brooklyn/management/entitlement/Entitlements.java
@@ -301,11 +301,15 @@ public class Entitlements {
if ("minimal".equalsIgnoreCase(type)) return new PerUserEntitlementManagerWithDefault(minimal());
if (Strings.isNonBlank(type)) {
try {
- Class<?> clazz = ((ManagementContextInternal)mgmt).getBaseClassLoader().loadClass(type);
+ ClassLoader cl = ((ManagementContextInternal)mgmt).getBaseClassLoader();
+ if (cl==null) cl = Entitlements.class.getClassLoader();
+ Class<?> clazz = cl.loadClass(type);
Optional<?> result = Reflections.invokeConstructorWithArgs(clazz, brooklynProperties);
if (result.isPresent()) return (EntitlementManager) result.get();
return (EntitlementManager) clazz.newInstance();
- } catch (Exception e) { throw Exceptions.propagate(e); }
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
}
throw new IllegalStateException("Invalid entitlement manager specified: '"+type+"'");
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b0bb61ab/core/src/main/java/brooklyn/management/ha/HighAvailabilityManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/ha/HighAvailabilityManagerImpl.java b/core/src/main/java/brooklyn/management/ha/HighAvailabilityManagerImpl.java
index 77636d0..31ec5b1 100644
--- a/core/src/main/java/brooklyn/management/ha/HighAvailabilityManagerImpl.java
+++ b/core/src/main/java/brooklyn/management/ha/HighAvailabilityManagerImpl.java
@@ -241,9 +241,6 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager {
@Override
public void start(HighAvailabilityMode startMode) {
nodeStateTransitionComplete = true;
- // always start in standby, unless hot backup; it may get promoted to master or hot_standby in this method
- // (depending on startMode; but for startMode STANDBY or HOT_STANDBY it will not promote until the next election)
- setInternalNodeState(startMode==HighAvailabilityMode.HOT_BACKUP ? ManagementNodeState.HOT_BACKUP : ManagementNodeState.STANDBY);
disabled = false;
running = true;
changeMode(startMode, true, true);
@@ -264,8 +261,8 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager {
}
if (getNodeState()==ManagementNodeState.FAILED || getNodeState()==ManagementNodeState.INITIALIZING) {
if (startMode!=HighAvailabilityMode.DISABLED) {
- // if coming from FAILED (or INITIALIZING because we skipped start call) then treat as cold standby
- setInternalNodeState(ManagementNodeState.STANDBY);
+ // if coming from FAILED (or INITIALIZING because we skipped start call) then treat as initializing
+ setInternalNodeState(ManagementNodeState.INITIALIZING);
}
}
@@ -303,6 +300,9 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager {
switch (startMode) {
case AUTO:
// don't care; let's start and see if we promote ourselves
+ if (getInternalNodeState()==ManagementNodeState.INITIALIZING) {
+ setInternalNodeState(ManagementNodeState.STANDBY);
+ }
publishAndCheck(true);
switch (getInternalNodeState()) {
case HOT_BACKUP:
@@ -312,6 +312,11 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager {
startMode = HighAvailabilityMode.HOT_STANDBY;
case HOT_STANDBY:
case STANDBY:
+ if (getInternalNodeState()==ManagementNodeState.STANDBY && oldState==ManagementNodeState.INITIALIZING
+ && BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.FEATURE_DEFAULT_STANDBY_IS_HOT_PROPERTY)) {
+ // auto requested; not promoted; so it should become hot standby
+ setInternalNodeState(ManagementNodeState.HOT_STANDBY);
+ }
ManagementPlaneSyncRecord newState = loadManagementPlaneSyncRecord(true);
String masterNodeId = newState.getMasterNodeId();
ManagementNodeSyncRecord masterNodeDetails = newState.getManagementNodes().get(masterNodeId);
@@ -676,6 +681,7 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager {
ManagementNodeSyncRecord ownNodeRecord = memento.getManagementNodes().get(ownNodeId);
ManagementNodeSyncRecord newMasterNodeRecord = null;
+ boolean weWereMaster = getNodeState()==ManagementNodeState.MASTER;
boolean demotingSelfInFavourOfOtherMaster = false;
if (currMasterNodeRecord != null && currMasterNodeRecord.getStatus() == ManagementNodeState.MASTER && isHeartbeatOk(currMasterNodeRecord, ownNodeRecord)) {
@@ -759,7 +765,8 @@ public class HighAvailabilityManagerImpl implements HighAvailabilityManager {
(weAreNewMaster ? "us " : "")
+ newMasterNodeId + " (" + timestampString(newMasterNodeRecord.getRemoteTimestamp()) + ")"
+ (newMasterNodeUri!=null ? " "+newMasterNodeUri : "") );
- LOG.warn(message);
+ if (weWereMaster || weAreNewMaster) LOG.info(message);
+ else LOG.debug(message);
}
// New master is ourself: promote
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b0bb61ab/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java b/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java
index f82afe8..d76faeb 100644
--- a/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java
+++ b/core/src/test/java/brooklyn/management/ha/HotStandbyTest.java
@@ -23,7 +23,6 @@ import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import java.util.ArrayDeque;
-import java.util.Collection;
import java.util.Date;
import java.util.Deque;
import java.util.List;
@@ -42,9 +41,8 @@ import brooklyn.entity.Feed;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.rebind.PersistenceExceptionHandlerImpl;
-import brooklyn.entity.rebind.RebindFeedTest;
-import brooklyn.entity.rebind.RebindManagerImpl;
import brooklyn.entity.rebind.RebindFeedTest.MyEntityWithFunctionFeedImpl;
+import brooklyn.entity.rebind.RebindManagerImpl;
import brooklyn.entity.rebind.persister.BrooklynMementoPersisterToObjectStore;
import brooklyn.entity.rebind.persister.InMemoryObjectStore;
import brooklyn.entity.rebind.persister.ListeningObjectStore;
@@ -185,7 +183,7 @@ public class HotStandbyTest {
}
protected void forcePersistNow(HaMgmtNode n1) {
- n1.mgmt.getRebindManager().forcePersistNow();
+ n1.mgmt.getRebindManager().forcePersistNow(false, null);
}
private Application expectRebindSequenceNumber(HaMgmtNode master, HaMgmtNode hotStandby, Application app, int expectedSensorSequenceValue, boolean immediate) {