protected void persist() { if (persistMode != PersistMode.DISABLED) { // Make sure the new apps are persisted in case process exits immediately. managementContext.getRebindManager().forcePersistNow(false, null); } }
private boolean isRebindComplete() { // TODO Want to determine if finished rebinding (either success or fail is fine). // But not a clean way to do this that works for both unit tests and live server?! // * In RebindTestFixtureWithApp tests, mgmt.getHighAvailabilityManager().getNodeState() // always returns INITIALIZING. // * The rebind metrics is a hack, and feels very risky for HOT_STANDBY nodes that // may have executed the rebind code multiple times. Map<String, Object> metrics = getManagementContext().getRebindManager().getMetrics(); Object count = (metrics.get("rebind") instanceof Map) ? ((Map<?,?>)metrics.get("rebind")).get("count") : null; return (count instanceof Number) && ((Number)count).intValue() > 0; }}); }
public static BrooklynMementoRawData newStateMemento(ManagementContext mgmt, MementoCopyMode source) { switch (source) { case LOCAL: return newStateMementoFromLocal(mgmt); case REMOTE: return mgmt.getRebindManager().retrieveMementoRawData(); case AUTO: throw new IllegalStateException("Copy mode AUTO not supported here"); } throw new IllegalStateException("Should not come here, unknown mode "+source); }
@Override public void onTagsChanged() { getManagementContext().getRebindManager().getChangeListener().onChanged(entity); } @Override
@Override public void onChildrenChanged() { getManagementContext().getRebindManager().getChangeListener().onChanged(entity); } @Override
@Override public void onFeedAdded(Feed feed) { getManagementContext().getRebindManager().getChangeListener().onChanged(entity); getManagementContext().getRebindManager().getChangeListener().onManaged(feed); } @Override
@Override public void onPolicyRemoved(Policy policy) { getManagementContext().getRebindManager().getChangeListener().onChanged(entity); getManagementContext().getRebindManager().getChangeListener().onUnmanaged(policy); } @Override
@Override public void onLocationsChanged() { getManagementContext().getRebindManager().getChangeListener().onChanged(entity); } @Override
@Override public void onPolicyAdded(Policy policy) { getManagementContext().getRebindManager().getChangeListener().onChanged(entity); getManagementContext().getRebindManager().getChangeListener().onManaged(policy); } @Override
@Override public void onAttributeChanged(AttributeSensor<?> attribute) { // TODO Could make this more efficient by inspecting the attribute to decide if needs persisted // immediately, or not important, or transient (e.g. do we really need to persist // request-per-second count for rebind purposes?!) getManagementContext().getRebindManager().getChangeListener().onChanged(entity); } @Override
@Override public void onEffectorCompleted(Effector<?> effector) { getManagementContext().getRebindManager().getChangeListener().onChanged(entity); } }
@Override public void onEnricherRemoved(Enricher enricher) { getManagementContext().getRebindManager().getChangeListener().onChanged(entity); getManagementContext().getRebindManager().getChangeListener().onUnmanaged(enricher); } @Override
@Override public void onConfigChanged(ConfigKey<?> key) { getManagementContext().getRebindManager().getChangeListener().onChanged(entity); } @Override
@Override protected void onChanged() { // currently changes simply trigger re-persistence; there is no intermediate listener as we do for EntityChangeListener if (getManagementContext() != null) { getManagementContext().getRebindManager().getChangeListener().onChanged(this); } }
@Override public boolean removeFeed(Feed feed) { feed.stop(); boolean changed = feedsInternal.remove(feed); if (changed) { getManagementContext().getRebindManager().getChangeListener().onUnmanaged(feed); getManagementSupport().getEntityChangeListener().onFeedRemoved(feed); } return changed; }
protected BrooklynMementoRawData transform(ManagementContext mgmt, CompoundTransformer transformer) throws Exception { BrooklynMementoPersisterToObjectStore reader = (BrooklynMementoPersisterToObjectStore) mgmt.getRebindManager().getPersister(); RebindExceptionHandler exceptionHandler = new RecordingRebindExceptionHandler(RebindFailureMode.FAIL_FAST, RebindFailureMode.FAIL_FAST); BrooklynMementoRawData result = transformer.transform(reader, exceptionHandler); LOG.info("Test "+getClass()+" transformed persisted state"); return result; }
public static void stopPersistence(ManagementContext managementContext) throws InterruptedException, TimeoutException { RebindManager rebindManager = managementContext.getRebindManager(); rebindManager.waitForPendingComplete(TIMEOUT, true); rebindManager.stop(); }
@Test public void testRestoresAtomicLongWithSetFromFlag() throws Exception { MyLocation origLoc = new MyLocation(MutableMap.of("myAtomicLong", "123")); origApp.start(ImmutableList.of(origLoc)); origLoc.myAtomicLong.incrementAndGet(); assertEquals(origLoc.myAtomicLong.get(), 124L); origApp.getManagementContext().getRebindManager().getChangeListener().onChanged(origLoc); newApp = rebind(); MyLocation newLoc = (MyLocation) Iterables.get(newApp.getLocations(), 0); // should get _modified_ value, not the one in the config map assertEquals(newLoc.myAtomicLong.get(), 124L); }
static File getPersistenceDir(ManagementContext managementContext) { BrooklynMementoPersisterToObjectStore persister = (BrooklynMementoPersisterToObjectStore)managementContext.getRebindManager().getPersister(); FileBasedObjectStore store = (FileBasedObjectStore)persister.getObjectStore(); return store.getBaseDir(); }
static String getPersistenceContainerName(ManagementContext managementContext) { BrooklynMementoPersisterToObjectStore persister = (BrooklynMementoPersisterToObjectStore)managementContext.getRebindManager().getPersister(); JcloudsBlobStoreBasedObjectStore store = (JcloudsBlobStoreBasedObjectStore)persister.getObjectStore(); return store.getContainerName(); }