Github user ahgittin commented on a diff in the pull request:

    https://github.com/apache/incubator-brooklyn/pull/617#discussion_r30967595
  
    --- Diff: core/src/main/java/brooklyn/entity/rebind/RebindIteration.java ---
    @@ -341,38 +340,64 @@ 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.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();
    +                
delta.removedCatalogItemIds.addAll(mementoRawData.getCatalogItems().keySet());
    +                getPersister().queueDelta(delta);
    +                
    +                mementoRawData.clearCatalogItems();
    --- End diff --
    
    yes to `rebindContext`, good spot. as for the level of abstraction it feels 
right as is to me, with the persister being relatively dumb apart from 
persisting things, all notions of what to be persisted is controlled from here. 
it is too bad to lose immutability on `mementoRawData` but the alternative i 
think would be either to replace it (which would be bad since the rawData might 
have been passed elsewhere) or analyse the catalog earlier (introducing new 
phases). i think it makes sense that the rawData can be mutable when needed.


---
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 [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to