brooklyn-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aledsage <...@git.apache.org>
Subject [GitHub] incubator-brooklyn pull request: CLI commands for manipulating cat...
Date Tue, 19 May 2015 09:29:21 GMT
Github user aledsage commented on a diff in the pull request:

    https://github.com/apache/incubator-brooklyn/pull/617#discussion_r30582714
  
    --- Diff: core/src/main/java/brooklyn/entity/rebind/RebindIteration.java ---
    @@ -341,38 +340,67 @@ protected void rebuildCatalog() {
                     }
                 }
             }
    +
    +        // See notes in CatalogInitialization
             
    -        // Register catalogue items with the management context. Loads the bundles in
the OSGi framework.
    -        CatalogLoadMode catalogLoadMode = managementContext.getConfig().getConfig(BrooklynServerConfig.CATALOG_LOAD_MODE);
    +        Collection<CatalogItem<?, ?>> catalogItems = rebindContext.getCatalogItems();
    +        CatalogInitialization catInit = ((ManagementContextInternal)managementContext).getCatalogInitialization();
    +        catInit.injectManagementContext(managementContext);
    +        catInit.applyCatalogLoadMode();
    +        Collection<CatalogItem<?,?>> itemsForResettingCatalog = null;
    +        boolean needsInitialCatalog;
             if (rebindManager.persistCatalogItemsEnabled) {
    -            boolean shouldResetCatalog = catalogLoadMode == CatalogLoadMode.LOAD_PERSISTED_STATE
    -                    || (!isEmpty && catalogLoadMode == CatalogLoadMode.LOAD_BROOKLYN_CATALOG_URL_IF_NO_PERSISTED_STATE);
    -            boolean shouldLoadDefaultCatalog = catalogLoadMode == CatalogLoadMode.LOAD_BROOKLYN_CATALOG_URL
    -                    || (isEmpty && catalogLoadMode == CatalogLoadMode.LOAD_BROOKLYN_CATALOG_URL_IF_NO_PERSISTED_STATE);
    -            if (shouldResetCatalog) {
    -                // Reset catalog with previously persisted state
    -                logRebindingDebug("RebindManager resetting management context catalog
to previously persisted state");
    -                managementContext.getCatalog().reset(rebindContext.getCatalogItems());
    -            } else if (shouldLoadDefaultCatalog) {
    -                // Load catalogue as normal
    -                // TODO in read-only mode, should do this less frequently than entities
etc
    -                logRebindingDebug("RebindManager loading default catalog");
    -                ((BasicBrooklynCatalog) managementContext.getCatalog()).resetCatalogToContentsAtConfiguredUrl();
    +            if (!catInit.hasRunOfficial() && catInit.isInitialResetRequested())
{
    +                String message = "RebindManager resetting catalog on first run (catalog
persistence enabled, but reset explicitly specified). ";
    +                if (catalogItems.isEmpty()) {
    +                    message += "Catalog was empty anyway.";
    +                } else {
    +                    message += "Deleting "+catalogItems.size()+" persisted catalog item"+Strings.s(catalogItems)+":
"+catalogItems;
    +                    if (shouldLogRebinding()) {
    +                        LOG.info(message);
    +                    }
    +                }
    +                logRebindingDebug(message);
    +
    +                itemsForResettingCatalog = MutableList.<CatalogItem<?,?>>of();
    +                
    +                PersisterDeltaImpl delta = new PersisterDeltaImpl();
    +                for (String catalogItemId: mementoRawData.getCatalogItems().keySet())
{
    +                    delta.removedCatalogItemIds.add(catalogItemId);
    +                }
    +                getPersister().queueDelta(delta);
    +                
    +                mementoRawData.clearCatalogItems();
    +                needsInitialCatalog = true;
                 } else {
    -                // Management context should have taken care of loading the catalogue
    -                Collection<CatalogItem<?, ?>> catalogItems = rebindContext.getCatalogItems();
    -                String message = "RebindManager not resetting catalog to persisted state.
Catalog load mode is {}.";
    -                if (!catalogItems.isEmpty() && shouldLogRebinding()) {
    -                    LOG.info(message + " There {} {} item{} persisted.", new Object[]{
    -                            catalogLoadMode, catalogItems.size() == 1 ? "was" : "were",
catalogItems.size(), Strings.s(catalogItems)});
    -                } else if (LOG.isDebugEnabled()) {
    -                    logRebindingDebug(message, catalogLoadMode);
    +                if (!isEmpty) {
    +                    logRebindingDebug("RebindManager clearing local catalog and loading
from persisted state");
    +                    itemsForResettingCatalog = rebindContext.getCatalogItems();
    +                    needsInitialCatalog = false;
    +                } else {
    +                    if (catInit.hasRunOfficial()) {
    +                        logRebindingDebug("RebindManager will re-add any new items (persisted
state empty)");
    +                        needsInitialCatalog = false;
    +                    } else {
    +                        logRebindingDebug("RebindManager loading initial catalog locally
because persisted state empty");
    +                        needsInitialCatalog = true;
    +                    }
                     }
                 }
    -            // TODO destroy old (as above)
             } else {
    -            logRebindingDebug("RebindManager not resetting catalog because catalog persistence
is disabled");
    +            if (catInit.hasRunOfficial()) {
    +                logRebindingDebug("RebindManager skipping catalog init because it has
already run (catalog persistence disabled)");
    +                needsInitialCatalog = false;
    +            } else {
    +                logRebindingDebug("RebindManager will initialize catalog locally because
catalog persistence is disabled");
    +                needsInitialCatalog = true;
    +            }
             }
    +
    +        // TODO in read-only mode, perhaps do this less frequently than entities etc
?
    +        // both in RW and in RO mode, the first run reads the initialization data;
    +        // maybe not desired for RO as it defers problems, although if it's standalone
it is desired
    +        catInit.populateCatalog(needsInitialCatalog, itemsForResettingCatalog);
    --- End diff --
    
    Personal preference: I like `Optional<Collection<CatalogItem<?,?>>>`
rather than using null to indicate absence. That makes the behaviour of the method more explicit.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message