Github user neykov commented on a diff in the pull request:
https://github.com/apache/incubator-brooklyn/pull/617#discussion_r30971988
--- 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();
--- End diff --
My first thought was that if we are resetting the catalog then there's no
point in downloading all the bundles and dealing with missing bundles/catalog
items, but these cases will result in soft errors (i.e. be logged only), won't
abort the rebind.
Only schema changes will abort the rebind, which for catalog items is not
so easy to do.
So there's no point in loading the old catalog if resetting, but won't hurt
if we do so.
---
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.
---