This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit bb1e5ac48a6ede94021ed13e8b54a9ed9c8394c8 Author: Alex Heneveld <[email protected]> AuthorDate: Thu Aug 11 14:33:33 2022 +0100 add created and destroying lifecycle hooks --- .../brooklyn/core/entity/AbstractEntity.java | 29 +++++++++++++++++++++- .../mgmt/internal/EntityManagementSupport.java | 9 ++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java index c047ee6ecb..30a96f1ec2 100644 --- a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java +++ b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java @@ -1767,7 +1767,19 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E if (displayNameAutoGenerated) displayName.set(getAutogeneratedDefaultDisplayName()); } } - + + /** + * Invoked by {@link EntityManagementSupport} when this entity is first created and almost fully managed, + * visible to other entities through the management context, for the very first time. + * It will be followed by a call to {@link #onManagementStarted()}, + * but will not be called on subsequent rebindings. + * + * This is called by {@link org.apache.brooklyn.core.mgmt.internal.LocalEntityManager#createEntity(Map, Class)} + * just after its call to {@link org.apache.brooklyn.core.objs.proxy.InternalEntityFactory#createEntity(EntitySpec, String)} + * and immediately before the call to {@link #onManagementStarted()}. + */ + public void onManagementCreated() {} + /** * Invoked by {@link EntityManagementSupport} when this entity is fully managed and visible to other entities * through the management context. @@ -1790,6 +1802,21 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E @Deprecated public void onManagementNoLongerMaster() {} + /** + * Invoked by {@link EntityManagementSupport} when this entity is being unmanaged. + * This may be because this entity is being removed, or because management is stopping. + * If this entity is being removed, there will be a subsequent call to {@link #onManagementDestroying()} + */ + public void onManagementStopping() { + } + + /** + * Invoked by {@link EntityManagementSupport} when this entity is being permanently removed from management. + * This call is synchronous and still has access to submit and block on tasks, so can be used for cleanup. + */ + public void onManagementDestroying() { + } + /** * Invoked by {@link EntityManagementSupport} when this entity is fully unmanaged. * <p> diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java index 4ffa12699a..7e71a9cc57 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java @@ -273,6 +273,7 @@ public class EntityManagementSupport { if (!isReadOnly()) { entity.onManagementBecomingMaster(); + if (info.getMode().isCreating()) entity.onManagementCreated(); entity.onManagementStarted(); } @@ -340,8 +341,14 @@ public class EntityManagementSupport { nonDeploymentManagementContext.setMode(NonDeploymentManagementContextMode.MANAGEMENT_STOPPING); } } - + + if (!wasDryRun && !isReadOnly()) { + entity.onManagementStopping(); + if (info.getMode().isDestroying()) entity.onManagementDestroying(); + } + if (wasDryRun || (!isReadOnly() && info.getMode().isDestroying())) { + // ensure adjuncts get a destroy callback // note they don't get any alert if the entity is being locally unmanaged to run somewhere else. // framework should introduce a call for that ideally, but in interim if needed they
