You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2020/12/07 19:42:55 UTC

[brooklyn-server] 04/06: if resume-machine needs to change the MachineLocation instance, then

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 b9824f09fa57e0c67c4050da8d6673ad58a42f18
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Mon Dec 7 09:20:44 2020 +0000

    if resume-machine needs to change the MachineLocation instance, then
    
    remove and unmanage the original and other identical ones
---
 .../apache/brooklyn/location/jclouds/JcloudsLocation.java | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index b03575b..6319fc2 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -20,10 +20,9 @@ package org.apache.brooklyn.location.jclouds;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
-import java.util.stream.Collectors;
 import org.apache.brooklyn.api.location.*;
-import org.apache.brooklyn.api.location.MachineManagementMixins.MachineMetadata;
 import org.apache.brooklyn.core.location.*;
+
 import org.apache.brooklyn.core.location.MachineLifecycleUtils.MachineStatus;
 import static org.apache.brooklyn.util.JavaGroovyEquivalents.elvis;
 import static org.apache.brooklyn.util.JavaGroovyEquivalents.groovyTruth;
@@ -1264,13 +1263,25 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
         node = findNodeOrThrow(setup);
         LOG.debug("{} resumed node {}", this, node);
         JcloudsMachineLocation registered = registerMachineLocation(setup, node);
+        // either allow an explicit 'manage' call, or refactor above to create it from a spec
+        getManagementContext().getLocationManager().manage(registered);
+        addChild(registered);
         boolean madeNew = true;
+
+        // we replace, rather than change IP of existing. feels safer, failing fast. but callers/users should be prepared for machine instance to change underneath them.
+        // might be better to change fields in the existing machine location.
+        // but if IP etc haven't changed then we re-use.
+
         for (Location l : getChildren()) {
+            if (l==registered) {
+                continue;
+            }
             if (l instanceof JcloudsMachineLocation && !Boolean.FALSE.equals(MachineLifecycleUtils.isSameInstance((JcloudsMachineLocation)l, registered, false))) {
                 if (MachineLifecycleUtils.isSameInstance((JcloudsMachineLocation) l, registered, true)) {
                     // use this machine
                     if (madeNew) {
                         removeChild(registered);
+                        getManagementContext().getLocationManager().unmanage(registered);
                         madeNew = false;
                     }
                     registered = (JcloudsMachineLocation) l;