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 2015/03/18 23:12:46 UTC

[1/7] incubator-brooklyn git commit: fixes for BrooklynNode, java appservers, and load balancers to run in clocker/subnets (using subnet hostname rather than public hostname)

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 5fa14442d -> 78072b294


fixes for BrooklynNode, java appservers, and load balancers to run in clocker/subnets (using subnet hostname rather than public hostname)


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/f68bf830
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/f68bf830
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/f68bf830

Branch: refs/heads/master
Commit: f68bf830ffee6bd98dc6455df73db1f1faf29f12
Parents: e4b5f24
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Mar 17 10:37:21 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Mar 18 22:08:19 2015 +0000

----------------------------------------------------------------------
 .../entity/brooklynnode/BrooklynNodeImpl.java   | 25 ++++++--------------
 .../entity/proxy/AbstractControllerImpl.java    |  7 +++---
 .../brooklyn/entity/proxy/LoadBalancer.java     |  2 +-
 .../entity/webapp/JavaWebAppSshDriver.java      |  4 ++--
 4 files changed, 14 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f68bf830/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
index 1f9b869..224215a 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynNodeImpl.java
@@ -18,7 +18,6 @@
  */
 package brooklyn.entity.brooklynnode;
 
-import java.net.InetAddress;
 import java.net.URI;
 import java.util.List;
 import java.util.Map;
@@ -53,6 +52,7 @@ import brooklyn.event.feed.http.HttpFeed;
 import brooklyn.event.feed.http.HttpPollConfig;
 import brooklyn.event.feed.http.HttpValueFunctions;
 import brooklyn.event.feed.http.JsonFunctions;
+import brooklyn.location.access.BrooklynAccessUtils;
 import brooklyn.management.Task;
 import brooklyn.management.TaskAdaptable;
 import brooklyn.management.ha.ManagementNodeState;
@@ -76,6 +76,7 @@ import brooklyn.util.time.Time;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.net.HostAndPort;
 import com.google.gson.Gson;
 
 public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNode {
@@ -385,32 +386,20 @@ public class BrooklynNodeImpl extends SoftwareProcessImpl implements BrooklynNod
         // TODO what sensors should we poll?
         ConfigToAttributes.apply(this);
 
-        InetAddress address = getAttribute(WEB_CONSOLE_PUBLIC_ADDRESS);
-        String host;
-        if (address == null) {
-            if (getAttribute(NO_WEB_CONSOLE_AUTHENTICATION)) {
-                host = "localhost"; // Because of --noConsoleSecurity option
-            } else {
-                host = getAttribute(HOSTNAME);
-            }
-        } else {
-            host = address.getHostName();
-        }
-
         URI webConsoleUri;
         if (isHttpProtocolEnabled("http")) {
             int port = getConfig(PORT_MAPPER).apply(getAttribute(HTTP_PORT));
-            webConsoleUri = URI.create(String.format("http://%s:%s", host, port));
-            setAttribute(WEB_CONSOLE_URI, webConsoleUri);
+            HostAndPort accessible = BrooklynAccessUtils.getBrooklynAccessibleAddress(this, port);
+            webConsoleUri = URI.create(String.format("http://%s:%s", accessible.getHostText(), accessible.getPort()));
         } else if (isHttpProtocolEnabled("https")) {
             int port = getConfig(PORT_MAPPER).apply(getAttribute(HTTPS_PORT));
-            webConsoleUri = URI.create(String.format("https://%s:%s", host, port));
-            setAttribute(WEB_CONSOLE_URI, webConsoleUri);
+            HostAndPort accessible = BrooklynAccessUtils.getBrooklynAccessibleAddress(this, port);
+            webConsoleUri = URI.create(String.format("https://%s:%s", accessible.getHostText(), accessible.getPort()));
         } else {
             // web-console is not enabled
-            setAttribute(WEB_CONSOLE_URI, null);
             webConsoleUri = null;
         }
+        setAttribute(WEB_CONSOLE_URI, webConsoleUri);
 
         connectServiceUpIsRunning();
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f68bf830/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
index c7f518e..297364f 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
@@ -43,6 +43,7 @@ import brooklyn.entity.trait.Startable;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.feed.ConfigToAttributes;
 import brooklyn.location.access.BrooklynAccessUtils;
+import brooklyn.location.basic.Machines;
 import brooklyn.management.Task;
 import brooklyn.policy.Policy;
 import brooklyn.policy.PolicySpec;
@@ -276,7 +277,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
                 port = accessible.getPort();
             }
         }
-        if (domain==null) domain = getAttribute(LoadBalancer.HOSTNAME);
+        if (domain==null) domain = Machines.findSubnetHostname(this).orNull();
         if (domain==null) return null;
         return protocol+"://"+domain+":"+port+"/"+getConfig(SERVICE_UP_URL_PATH);
     }
@@ -301,8 +302,8 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
     
     protected void computePortsAndUrls() {
         AttributeSensor<String> hostAndPortSensor = getConfig(HOST_AND_PORT_SENSOR);
-        Maybe<Object> hostnameSensor = getConfigRaw(HOSTNAME_SENSOR, true);
-        Maybe<Object> portSensor = getConfigRaw(PORT_NUMBER_SENSOR, true);
+        Maybe<Object> hostnameSensor = config().getRaw(HOSTNAME_SENSOR);
+        Maybe<Object> portSensor = config().getRaw(PORT_NUMBER_SENSOR);
         if (hostAndPortSensor != null) {
             checkState(!hostnameSensor.isPresent() && !portSensor.isPresent(), 
                     "Must not set %s and either of %s or %s", HOST_AND_PORT_SENSOR, HOSTNAME_SENSOR, PORT_NUMBER_SENSOR);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f68bf830/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java b/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java
index 32e2fc9..415dea4 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java
@@ -73,7 +73,7 @@ public interface LoadBalancer extends Entity, Startable {
     @SuppressWarnings("serial")
     @SetFromFlag("hostnameSensor")
     public static final BasicAttributeSensorAndConfigKey<AttributeSensor<String>> HOSTNAME_SENSOR = new BasicAttributeSensorAndConfigKey<AttributeSensor<String>>(
-        new TypeToken<AttributeSensor<String>>() {}, "member.sensor.hostname", "Hostname/IP sensor on members (defaults to host.name; not supported in all implementations)", Attributes.HOSTNAME);
+        new TypeToken<AttributeSensor<String>>() {}, "member.sensor.hostname", "Hostname/IP sensor on members (defaults to host.subnet.hostname; not supported in all implementations)", Attributes.SUBNET_HOSTNAME);
 
     /** sensor for hostname to forward to on target entities */
     @SuppressWarnings("serial")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f68bf830/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
index 9916711..7fd32c9 100644
--- a/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/webapp/JavaWebAppSshDriver.java
@@ -89,11 +89,11 @@ public abstract class JavaWebAppSshDriver extends JavaSoftwareProcessSshDriver i
         if (isProtocolEnabled("https")) {
             Integer port = getHttpsPort();
             checkNotNull(port, "HTTPS_PORT sensors not set; is an acceptable port available?");
-            return String.format("https://%s:%s/", getHostname(), port);
+            return String.format("https://%s:%s/", getSubnetHostname(), port);
         } else if (isProtocolEnabled("http")) {
             Integer port = getHttpPort();
             checkNotNull(port, "HTTP_PORT sensors not set; is an acceptable port available?");
-            return String.format("http://%s:%s/", getHostname(), port);
+            return String.format("http://%s:%s/", getSubnetHostname(), port);
         } else {
             throw new IllegalStateException("HTTP and HTTPS protocols not enabled for "+entity+"; enabled protocols are "+getEnabledProtocols());
         }


[6/7] incubator-brooklyn git commit: inject cloud provider name into BrooklynImageChooser

Posted by he...@apache.org.
inject cloud provider name into BrooklynImageChooser

improves on 89c126340dcf350a3d887782a5ea79a672fe2f17 by only applying the heuristic to softlayer;
unfortunately it is longwinded to make the cloud provider name available, it's an ugly mixin,
but still seemed the best way; marked @Beta


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/b68363e8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/b68363e8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/b68363e8

Branch: refs/heads/master
Commit: b68363e8636a3e0c3cea28a2d39aa448e8d50650
Parents: a94b4d0
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Mar 18 22:06:01 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Mar 18 22:08:24 2015 +0000

----------------------------------------------------------------------
 .../location/jclouds/BrooklynImageChooser.java  | 135 ++++++++++++++++++-
 .../location/jclouds/JcloudsLocation.java       |   5 +-
 2 files changed, 133 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b68363e8/locations/jclouds/src/main/java/brooklyn/location/jclouds/BrooklynImageChooser.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/BrooklynImageChooser.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/BrooklynImageChooser.java
index e4dac68..75cd3a7 100644
--- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/BrooklynImageChooser.java
+++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/BrooklynImageChooser.java
@@ -23,6 +23,7 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 
+import org.jclouds.compute.ComputeService;
 import org.jclouds.compute.domain.Image;
 import org.jclouds.compute.domain.OperatingSystem;
 import org.jclouds.compute.domain.OsFamily;
@@ -31,15 +32,21 @@ import org.slf4j.LoggerFactory;
 
 import brooklyn.util.collections.MutableList;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.Function;
 import com.google.common.collect.ComparisonChain;
 import com.google.common.collect.Ordering;
 import com.google.common.math.DoubleMath;
 
-public class BrooklynImageChooser {
+@Beta
+/** NB: subclasses must implement {@link #clone()} */
+public class BrooklynImageChooser implements Cloneable {
 
     private static final Logger log = LoggerFactory.getLogger(BrooklynImageChooser.class);
     
+    protected ComputeService computeService;
+    protected String cloudProviderName;
+    
     protected static int compare(double left, double right) {
         return DoubleMath.fuzzyCompare(left, right, 0.00000001);
     }
@@ -79,7 +86,10 @@ public class BrooklynImageChooser {
     public List<String> blackListedImageIds() {
         return Arrays.asList(
                 // bad natty image - causes 403 on attempts to apt-get; https://bugs.launchpad.net/ubuntu/+bug/987182
-                "us-east-1/ami-1cb30875"
+                "us-east-1/ami-1cb30875",
+                // wrong login user advertised, causes "Error Invalid packet: indicated length 1349281121 too large"
+                // from sshj due to message coming back "Plea"(se log in as another user), according to https://github.com/jclouds/legacy-jclouds/issues/748
+                "us-east-1/ami-08faa660"
             );
     }
 
@@ -139,10 +149,13 @@ public class BrooklynImageChooser {
                 // prefer to take our chances with unknown / unlabelled linux than something explicitly windows
                 else if (os.getFamily().equals(OsFamily.WINDOWS)) score -= 1;
                 
-                // if family is part of the image name, give it a slight pref
-                // (useful on softlayer where id is a uuid for user-supplied)
-                if (img.getId().toLowerCase().indexOf(os.getFamily().toString().toLowerCase()) >= 0)
-                    score += 0.5;
+                if ("softlayer".equals(cloudProviderName)) {
+                    // on softlayer, prefer images where family is part of the image id
+                    // (this is the only way to identiy official images; but in other clouds
+                    // it can cause not-so-good images to get selected!)
+                    if (img.getId().toLowerCase().indexOf(os.getFamily().toString().toLowerCase()) >= 0)
+                        score += 0.5;
+                }
             }
             // prefer 64-bit
             if (os.is64Bit()) score += 0.5;
@@ -177,7 +190,46 @@ public class BrooklynImageChooser {
         return 0;
     }
 
+    public BrooklynImageChooser clone() {
+        return new BrooklynImageChooser();
+    }
+    
+    protected void use(ComputeService service) {
+        if (this.computeService!=null && !this.computeService.equals(service))
+            throw new IllegalStateException("ImageChooser must be cloned to set a compute service");
+        this.computeService = service;
+        if (computeService!=null) {
+            cloudProviderName = computeService.getContext().unwrap().getId();
+        }
+    }
+    
+    public BrooklynImageChooser cloneFor(ComputeService service) {
+        BrooklynImageChooser result = clone();
+        result.use(service);
+        return result;
+    }
+    
+    public static class OrderingScoredWithoutDefaults extends Ordering<Image> implements ComputeServiceAwareChooser<OrderingScoredWithoutDefaults> {
+        private BrooklynImageChooser chooser;
+        public OrderingScoredWithoutDefaults(BrooklynImageChooser chooser) {
+            this.chooser = chooser;
+        }
+        public int compare(Image left, Image right) {
+            return BrooklynImageChooser.compare(chooser.score(left), chooser.score(right));
+        }
+        @Override
+        public OrderingScoredWithoutDefaults cloneFor(ComputeService service) {
+            return new OrderingScoredWithoutDefaults(chooser.cloneFor(service));
+        }        
+    }
+    
     public Ordering<Image> orderingScoredWithoutDefaults() {
+        return new OrderingScoredWithoutDefaults(this);
+    }
+    
+    /** @deprecated since 0.7.0 kept in case persisted */
+    @Deprecated
+    public Ordering<Image> orderingScoredWithoutDefaultsDeprecated() {
         return new Ordering<Image>() {
             @Override
             public int compare(Image left, Image right) {
@@ -186,7 +238,41 @@ public class BrooklynImageChooser {
         };
     }
     
+    public static class OrderingWithDefaults extends Ordering<Image> implements ComputeServiceAwareChooser<OrderingWithDefaults> {
+        Ordering<Image> primaryOrdering;
+        public OrderingWithDefaults(final Ordering<Image> primaryOrdering) {
+            this.primaryOrdering = primaryOrdering;
+        }
+        @Override
+        public int compare(Image left, Image right) {
+            return ComparisonChain.start()
+                .compare(left, right, primaryOrdering)
+                // fall back to default strategy otherwise, except preferring *non*-null values
+                // TODO use AlphaNum string comparator
+                .compare(left.getName(), right.getName(), Ordering.<String> natural().nullsFirst())
+                .compare(left.getVersion(), right.getVersion(), Ordering.<String> natural().nullsFirst())
+                .compare(left.getDescription(), right.getDescription(), Ordering.<String> natural().nullsFirst())
+                .compare(left.getOperatingSystem().getName(), right.getOperatingSystem().getName(), Ordering.<String> natural().nullsFirst())
+                .compare(left.getOperatingSystem().getVersion(), right.getOperatingSystem().getVersion(), Ordering.<String> natural().nullsFirst())
+                .compare(left.getOperatingSystem().getDescription(), right.getOperatingSystem().getDescription(), Ordering.<String> natural().nullsFirst())
+                .compare(left.getOperatingSystem().getArch(), right.getOperatingSystem().getArch(), Ordering.<String> natural().nullsFirst()).result();
+        }    
+        @Override
+        public OrderingWithDefaults cloneFor(ComputeService service) {
+            if (primaryOrdering instanceof ComputeServiceAwareChooser) {
+                return new OrderingWithDefaults( BrooklynImageChooser.cloneFor(primaryOrdering, service) );
+            }
+            return this;
+        }        
+    }
+    
     public static Ordering<Image> orderingWithDefaults(final Ordering<Image> primaryOrdering) {
+        return new OrderingWithDefaults(primaryOrdering);
+    }
+    
+    /** @deprecated since 0.7.0 kept in case persisted */
+    @Deprecated
+    public static Ordering<Image> orderingWithDefaultsDeprecated(final Ordering<Image> primaryOrdering) {
         return new Ordering<Image>() {
             @Override
             public int compare(Image left, Image right) {
@@ -205,7 +291,30 @@ public class BrooklynImageChooser {
         };
     }
     
+    public static class ImageChooserFromOrdering implements Function<Iterable<? extends Image>, Image>, ComputeServiceAwareChooser<ImageChooserFromOrdering> {
+        final Ordering<Image> ordering;
+        public ImageChooserFromOrdering(final Ordering<Image> ordering) { this.ordering = ordering; }
+        @Override
+        public Image apply(Iterable<? extends Image> input) {
+            List<? extends Image> maxImages = multiMax(ordering, input);
+            return maxImages.get(maxImages.size() - 1);
+        }
+        @Override
+        public ImageChooserFromOrdering cloneFor(ComputeService service) {
+            if (ordering instanceof ComputeServiceAwareChooser) {
+                return new ImageChooserFromOrdering( BrooklynImageChooser.cloneFor(ordering, service) );
+            }
+            return this;
+        }        
+    }
+
     public static Function<Iterable<? extends Image>, Image> imageChooserFromOrdering(final Ordering<Image> ordering) {
+        return new ImageChooserFromOrdering(ordering);
+    }
+    
+    /** @deprecated since 0.7.0 kept in case persisted */
+    @Deprecated
+    public static Function<Iterable<? extends Image>, Image> imageChooserFromOrderingDeprecated(final Ordering<Image> ordering) {
         return new Function<Iterable<? extends Image>, Image>() {
             @Override
             public Image apply(Iterable<? extends Image> input) {
@@ -214,7 +323,21 @@ public class BrooklynImageChooser {
             }
         };
     }
+    
+    protected interface ComputeServiceAwareChooser<T> {
+        public T cloneFor(ComputeService service);
+    }
 
+    /** Attempts to clone the given item for use with the given {@link ComputeService}, if
+     * the item is {@link ComputeServiceAwareChooser}; otherwise it returns the item unchanged */
+    @SuppressWarnings("unchecked")
+    public static <T> T cloneFor(T item, ComputeService service) {
+        if (item instanceof ComputeServiceAwareChooser) {
+            return ((ComputeServiceAwareChooser<T>)item).cloneFor(service);
+        }
+        return item;
+    }
+    
     // from jclouds
     static <T, E extends T> List<E> multiMax(Comparator<T> ordering, Iterable<E> iterable) {
         Iterator<E> iterator = iterable.iterator();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b68363e8/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
index 7329c8d..4fdbebe 100644
--- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
@@ -111,6 +111,7 @@ import brooklyn.location.basic.SshMachineLocation;
 import brooklyn.location.cloud.AbstractCloudMachineProvisioningLocation;
 import brooklyn.location.cloud.AvailabilityZoneExtension;
 import brooklyn.location.cloud.CloudMachineNamer;
+import brooklyn.location.jclouds.BrooklynImageChooser.ComputeServiceAwareChooser;
 import brooklyn.location.jclouds.JcloudsPredicates.NodeInLocation;
 import brooklyn.location.jclouds.networking.JcloudsPortForwarderExtension;
 import brooklyn.location.jclouds.templates.PortableTemplateBuilder;
@@ -1112,7 +1113,9 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
         }
         if (templateBuilder instanceof PortableTemplateBuilder<?>) {
             if (((PortableTemplateBuilder<?>)templateBuilder).imageChooser()==null) {
-                templateBuilder.imageChooser(config.get(JcloudsLocationConfig.IMAGE_CHOOSER));
+                Function<Iterable<? extends Image>, Image> chooser = config.get(JcloudsLocationConfig.IMAGE_CHOOSER);
+                chooser = BrooklynImageChooser.cloneFor(chooser, computeService);
+                templateBuilder.imageChooser(chooser);
             } else {
                 // an image chooser is already set, so do nothing
             }


[5/7] incubator-brooklyn git commit: rest state export uses same memento generation (from RebindSupport)

Posted by he...@apache.org.
rest state export uses same memento generation (from RebindSupport)

fixes problem characterized by @grkvlt, where the REST memento generation did not correctly call in via the RebindSupport subsystem on BrooklynObjects; it does now, with test (which failed before the fix, in the manner observed in the wild with the PortForwardManager). methods renamed and deprecated to make the intended usage clearer. also better error reporting should PortForwardManager encounter similar problems in the future (which it shouldn't).


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/c7449ac0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/c7449ac0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/c7449ac0

Branch: refs/heads/master
Commit: c7449ac00ecd607aa6a09f11c34ca70adb26b024
Parents: e7f64fb
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Mar 17 13:20:51 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Mar 18 22:08:20 2015 +0000

----------------------------------------------------------------------
 .../AbstractBrooklynObjectRebindSupport.java    |  2 +-
 .../entity/rebind/dto/MementosGenerators.java   | 55 ++++++++++++++++++--
 .../persister/BrooklynPersistenceUtils.java     |  4 +-
 .../location/access/PortForwardManagerImpl.java |  7 +--
 .../entity/rebind/RebindCatalogItemTest.java    |  4 +-
 ...talogWhenCatalogPersistenceDisabledTest.java |  8 +--
 .../entity/rebind/RebindTestFixture.java        | 10 +++-
 .../access/PortForwardManagerRebindTest.java    | 45 ++++++++++++++++
 8 files changed, 118 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c7449ac0/core/src/main/java/brooklyn/entity/rebind/AbstractBrooklynObjectRebindSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/AbstractBrooklynObjectRebindSupport.java b/core/src/main/java/brooklyn/entity/rebind/AbstractBrooklynObjectRebindSupport.java
index 0d6e663..273d3ec 100644
--- a/core/src/main/java/brooklyn/entity/rebind/AbstractBrooklynObjectRebindSupport.java
+++ b/core/src/main/java/brooklyn/entity/rebind/AbstractBrooklynObjectRebindSupport.java
@@ -41,7 +41,7 @@ public abstract class AbstractBrooklynObjectRebindSupport<T extends Memento> imp
     @Override
     @SuppressWarnings("unchecked")
     public T getMemento() {
-        T memento = (T) MementosGenerators.newMemento(instance);
+        T memento = (T) MementosGenerators.newBasicMemento(instance);
         if (LOG.isTraceEnabled()) LOG.trace("Created memento: {}", memento.toVerboseString());
         return memento;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c7449ac0/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
index a9d4b66..91d7736 100644
--- a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
+++ b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java
@@ -37,7 +37,9 @@ import brooklyn.entity.Feed;
 import brooklyn.entity.Group;
 import brooklyn.entity.basic.EntityDynamicType;
 import brooklyn.entity.basic.EntityInternal;
+import brooklyn.entity.rebind.AbstractBrooklynObjectRebindSupport;
 import brooklyn.entity.rebind.TreeUtils;
+import brooklyn.entity.rebind.persister.BrooklynPersistenceUtils;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.AttributeSensor.SensorPersistenceMode;
 import brooklyn.event.feed.AbstractFeed;
@@ -61,6 +63,7 @@ import brooklyn.util.collections.MutableMap;
 import brooklyn.util.config.ConfigBag;
 import brooklyn.util.flags.FlagUtils;
 
+import com.google.common.annotations.Beta;
 import com.google.common.base.Function;
 import com.google.common.base.Predicates;
 
@@ -68,10 +71,23 @@ public class MementosGenerators {
 
     private MementosGenerators() {}
     
+    /** @deprecated since 0.7.0 use {@link #newBasicMemento(BrooklynObject)} */
+    public static Memento newMemento(BrooklynObject instance) {
+        return newBasicMemento(instance);
+    }
+    
     /**
-     * Inspects a brooklyn object to create a corresponding memento.
+     * Inspects a brooklyn object to create a basic corresponding memento.
+     * <p>
+     * The memento is "basic" in the sense that it does not tie in to any entity-specific customization;
+     * the corresponding memento may subsequently be customized by the caller.
+     * <p>
+     * This method is intended for use by {@link AbstractBrooklynObjectRebindSupport#getMemento()}
+     * and callers wanting a memento for an object should use that, or the
+     * {@link BrooklynPersistenceUtils#newObjectMemento(BrooklynObject)} convenience.
      */
-    public static Memento newMemento(BrooklynObject instance) {
+    @Beta
+    public static Memento newBasicMemento(BrooklynObject instance) {
         if (instance instanceof Entity) {
             return newEntityMemento((Entity)instance);
         } else if (instance instanceof Location) {
@@ -127,13 +143,16 @@ public class MementosGenerators {
     
     /**
      * Inspects an entity to create a corresponding memento.
+     * <p>
+     * @deprecated since 0.7.0, see {@link #newBasicMemento(BrooklynObject)}
      */
+    @Deprecated
     public static EntityMemento newEntityMemento(Entity entity) {
         return newEntityMementoBuilder(entity).build();
     }
 
     /**
-     * @deprecated since 0.7.0; use {@link #newMemento(BrooklynObject)} instead
+     * @deprecated since 0.7.0; use {@link #newBasicMemento(BrooklynObject)} instead
      */
     @Deprecated
     public static BasicEntityMemento.Builder newEntityMementoBuilder(Entity entityRaw) {
@@ -210,7 +229,11 @@ public class MementosGenerators {
 
         return builder;
     }
-    
+ 
+    /**
+     * @deprecated since 0.7.0, see {@link #newBasicMemento(BrooklynObject)}
+     */
+    @Deprecated
     public static Function<Entity, EntityMemento> entityMementoFunction() {
         return new Function<Entity,EntityMemento>() {
             @Override
@@ -228,13 +251,16 @@ public class MementosGenerators {
      * the location reference is replaced by the location id.
      * TODO When we have a cleaner separation of constructor/config for entities and locations, then
      * we will remove this code!
+     * 
+     * @deprecated since 0.7.0, see {@link #newBasicMemento(BrooklynObject)}
      */
+    @Deprecated
     public static LocationMemento newLocationMemento(Location location) {
         return newLocationMementoBuilder(location).build();
     }
     
     /**
-     * @deprecated since 0.7.0; use {@link #newMemento(BrooklynObject)} instead
+     * @deprecated since 0.7.0; use {@link #newBasicMemento(BrooklynObject)} instead
      */
     @Deprecated
     public static BasicLocationMemento.Builder newLocationMementoBuilder(Location location) {
@@ -267,6 +293,10 @@ public class MementosGenerators {
         return builder;
     }
     
+    /**
+     * @deprecated since 0.7.0, see {@link #newBasicMemento(BrooklynObject)}
+     */
+    @Deprecated
     public static Function<Location, LocationMemento> locationMementoFunction() {
         return new Function<Location,LocationMemento>() {
             @Override
@@ -279,7 +309,10 @@ public class MementosGenerators {
     
     /**
      * Given a policy, extracts its state for serialization.
+     * 
+     * @deprecated since 0.7.0, see {@link #newBasicMemento(BrooklynObject)}
      */
+    @Deprecated
     public static PolicyMemento newPolicyMemento(Policy policy) {
         BasicPolicyMemento.Builder builder = BasicPolicyMemento.builder();
         populateBrooklynObjectMementoBuilder(policy, builder);
@@ -305,6 +338,10 @@ public class MementosGenerators {
         return builder.build();
     }
     
+    /**
+     * @deprecated since 0.7.0, see {@link #newBasicMemento(BrooklynObject)}
+     */
+    @Deprecated
     public static Function<Policy, PolicyMemento> policyMementoFunction() {
         return new Function<Policy,PolicyMemento>() {
             @Override
@@ -316,7 +353,9 @@ public class MementosGenerators {
 
     /**
      * Given an enricher, extracts its state for serialization.
+     * @deprecated since 0.7.0, see {@link #newBasicMemento(BrooklynObject)}
      */
+    @Deprecated
     public static EnricherMemento newEnricherMemento(Enricher enricher) {
         BasicEnricherMemento.Builder builder = BasicEnricherMemento.builder();
         populateBrooklynObjectMementoBuilder(enricher, builder);
@@ -344,7 +383,9 @@ public class MementosGenerators {
 
     /**
      * Given a feed, extracts its state for serialization.
+     * @deprecated since 0.7.0, see {@link #newBasicMemento(BrooklynObject)}
      */
+    @Deprecated
     public static FeedMemento newFeedMemento(Feed feed) {
         BasicFeedMemento.Builder builder = BasicFeedMemento.builder();
         populateBrooklynObjectMementoBuilder(feed, builder);
@@ -363,6 +404,10 @@ public class MementosGenerators {
         return builder.build();
     }
     
+    /**
+     * @deprecated since 0.7.0, see {@link #newBasicMemento(BrooklynObject)}
+     */
+    @Deprecated
     public static CatalogItemMemento newCatalogItemMemento(CatalogItem<?, ?> catalogItem) {
         if (catalogItem instanceof CatalogItemDo<?,?>) {
             catalogItem = ((CatalogItemDo<?,?>)catalogItem).getDto();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c7449ac0/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java
index e1ed10e..24a2d38 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java
@@ -24,6 +24,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import brooklyn.basic.BrooklynObject;
+import brooklyn.basic.BrooklynObjectInternal;
 import brooklyn.catalog.CatalogItem;
 import brooklyn.config.BrooklynServerConfig;
 import brooklyn.config.BrooklynServerPaths;
@@ -34,7 +35,6 @@ import brooklyn.entity.basic.EntityInternal;
 import brooklyn.entity.rebind.BrooklynObjectType;
 import brooklyn.entity.rebind.PersistenceExceptionHandler;
 import brooklyn.entity.rebind.PersistenceExceptionHandlerImpl;
-import brooklyn.entity.rebind.dto.MementosGenerators;
 import brooklyn.entity.rebind.transformer.CompoundTransformer;
 import brooklyn.entity.rebind.transformer.CompoundTransformerLoader;
 import brooklyn.location.Location;
@@ -132,7 +132,7 @@ public class BrooklynPersistenceUtils {
     }
 
     public static Memento newObjectMemento(BrooklynObject instance) {
-        return MementosGenerators.newMemento(instance);
+        return ((BrooklynObjectInternal)instance).getRebindSupport().getMemento();
     }
     
     public static BrooklynMementoRawData newStateMemento(ManagementContext mgmt, MementoCopyMode source) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c7449ac0/core/src/main/java/brooklyn/location/access/PortForwardManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/location/access/PortForwardManagerImpl.java b/core/src/main/java/brooklyn/location/access/PortForwardManagerImpl.java
index f392de0..6a290f7 100644
--- a/core/src/main/java/brooklyn/location/access/PortForwardManagerImpl.java
+++ b/core/src/main/java/brooklyn/location/access/PortForwardManagerImpl.java
@@ -42,6 +42,7 @@ import brooklyn.util.collections.MutableMap;
 import brooklyn.util.exceptions.Exceptions;
 
 import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -133,9 +134,9 @@ public class PortForwardManagerImpl extends AbstractLocation implements PortForw
             @Override
             protected void doReconstruct(RebindContext rebindContext, LocationMemento memento) {
                 super.doReconstruct(rebindContext, memento);
-                mappings.putAll((Map<String, PortMapping>) memento.getCustomField("mappings"));
-                portReserved.set((Integer)memento.getCustomField("portReserved"));
-                publicIpIdToHostname.putAll((Map<String, String>)memento.getCustomField("publicIpIdToHostname"));
+                mappings.putAll( Preconditions.checkNotNull((Map<String, PortMapping>) memento.getCustomField("mappings"), "mappings was not serialized correctly"));
+                portReserved.set( (Integer)memento.getCustomField("portReserved"));
+                publicIpIdToHostname.putAll( Preconditions.checkNotNull((Map<String, String>)memento.getCustomField("publicIpIdToHostname"), "publicIpIdToHostname was not serialized correctly") );
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c7449ac0/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java
index 4454354..5e555c7 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java
@@ -25,6 +25,8 @@ import static org.testng.Assert.fail;
 import io.brooklyn.camp.BasicCampPlatform;
 import io.brooklyn.camp.test.mock.web.MockWebPlatform;
 
+import java.io.File;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
@@ -87,7 +89,7 @@ public class RebindCatalogItemTest extends RebindTestFixtureWithApp {
     }
 
     @Override
-    protected LocalManagementContext createNewManagementContext() {
+    protected LocalManagementContext createNewManagementContext(File mementoDir) {
         BrooklynProperties properties = BrooklynProperties.Factory.newDefault();
         properties.put(BrooklynServerConfig.BROOKLYN_CATALOG_URL, "classpath://brooklyn/entity/rebind/rebind-catalog-item-test-catalog.xml");
         properties.put(BrooklynServerConfig.CATALOG_LOAD_MODE, CatalogLoadMode.LOAD_BROOKLYN_CATALOG_URL_IF_NO_PERSISTED_STATE);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c7449ac0/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java
index 8a64e6c..7c6393a 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java
@@ -20,12 +20,12 @@ package brooklyn.entity.rebind;
 
 import static org.testng.Assert.assertEquals;
 
+import java.io.File;
+
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.collect.Iterables;
-
 import brooklyn.camp.lite.CampPlatformWithJustBrooklynMgmt;
 import brooklyn.catalog.CatalogItem;
 import brooklyn.config.BrooklynProperties;
@@ -35,6 +35,8 @@ import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.management.internal.LocalManagementContext;
 import brooklyn.test.entity.TestEntity;
 
+import com.google.common.collect.Iterables;
+
 public class RebindCatalogWhenCatalogPersistenceDisabledTest extends RebindTestFixtureWithApp {
 
     private static final String TEST_CATALOG = "classpath://brooklyn/entity/rebind/rebind-catalog-item-test-catalog.xml";
@@ -69,7 +71,7 @@ public class RebindCatalogWhenCatalogPersistenceDisabledTest extends RebindTestF
     }
 
     @Override
-    protected LocalManagementContext createNewManagementContext() {
+    protected LocalManagementContext createNewManagementContext(File mementoDir) {
         BrooklynProperties properties = BrooklynProperties.Factory.newDefault();
         properties.put(BrooklynServerConfig.BROOKLYN_CATALOG_URL, TEST_CATALOG);
         return RebindTestUtils.managementContextBuilder(mementoDir, classLoader)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c7449ac0/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java b/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java
index 8f1c1c6..0746d44 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java
@@ -94,8 +94,14 @@ public abstract class RebindTestFixture<T extends StartableApplication> {
                 .buildStarted();
     }
 
-    /** @return An unstarted management context */
+    /** As {@link #createNewManagementContext(File)} using the default memento dir */
     protected LocalManagementContext createNewManagementContext() {
+        return createNewManagementContext(mementoDir);
+    }
+    
+    /** @return An unstarted management context using the specified mementoDir (or default if null) */
+    protected LocalManagementContext createNewManagementContext(File mementoDir) {
+        if (mementoDir==null) mementoDir = this.mementoDir;
         return RebindTestUtils.managementContextBuilder(mementoDir, classLoader)
                 .forLive(useLiveManagementContext())
                 .emptyCatalog(useEmptyCatalog())
@@ -237,7 +243,7 @@ public abstract class RebindTestFixture<T extends StartableApplication> {
         if (options.classLoader == null) options.classLoader(classLoader);
         if (options.mementoDir == null) options.mementoDir(mementoDir);
         if (options.origManagementContext == null) options.origManagementContext(origManagementContext);
-        if (options.newManagementContext == null) options.newManagementContext(createNewManagementContext());
+        if (options.newManagementContext == null) options.newManagementContext(createNewManagementContext(options.mementoDir));
         
         RebindTestUtils.waitForPersisted(origApp);
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c7449ac0/core/src/test/java/brooklyn/location/access/PortForwardManagerRebindTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/location/access/PortForwardManagerRebindTest.java b/core/src/test/java/brooklyn/location/access/PortForwardManagerRebindTest.java
index 5ad0296..2d4b326 100644
--- a/core/src/test/java/brooklyn/location/access/PortForwardManagerRebindTest.java
+++ b/core/src/test/java/brooklyn/location/access/PortForwardManagerRebindTest.java
@@ -21,6 +21,8 @@ package brooklyn.location.access;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotEquals;
 
+import java.io.File;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.BeforeMethod;
@@ -29,16 +31,24 @@ import org.testng.annotations.Test;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.rebind.RebindOptions;
 import brooklyn.entity.rebind.RebindTestFixtureWithApp;
 import brooklyn.entity.rebind.RebindTestUtils;
+import brooklyn.entity.rebind.persister.BrooklynPersistenceUtils;
+import brooklyn.entity.rebind.persister.FileBasedObjectStore;
+import brooklyn.entity.rebind.persister.PersistenceObjectStore;
 import brooklyn.event.AttributeSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.location.Location;
 import brooklyn.location.LocationSpec;
 import brooklyn.location.basic.SshMachineLocation;
+import brooklyn.management.ha.MementoCopyMode;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.test.entity.TestEntityImpl;
 import brooklyn.util.net.Networking;
+import brooklyn.util.os.Os;
+import brooklyn.util.text.Identifiers;
+import brooklyn.util.time.Time;
 
 import com.google.common.base.Predicates;
 import com.google.common.collect.Iterables;
@@ -86,6 +96,41 @@ public class PortForwardManagerRebindTest extends RebindTestFixtureWithApp {
     }
     
     @Test
+    public void testAssociationPreservedOnStateExport() throws Exception {
+        String publicIpId = "5.6.7.8";
+        String publicAddress = "5.6.7.8";
+
+        TestEntity origEntity = origApp.createAndManageChild(EntitySpec.create(TestEntity.class).impl(MyEntity.class));
+        PortForwardManager origPortForwardManager = origEntity.getConfig(MyEntity.PORT_FORWARD_MANAGER);
+
+        origPortForwardManager.associate(publicIpId, HostAndPort.fromParts(publicAddress, 40080), origSimulatedMachine, 80);
+
+        String label = origManagementContext.getManagementNodeId()+"-"+Time.makeDateSimpleStampString();
+        PersistenceObjectStore targetStore = BrooklynPersistenceUtils.newPersistenceObjectStore(origManagementContext, null, 
+            "tmp/web-persistence-"+label+"-"+Identifiers.makeRandomId(4));
+        File dir = ((FileBasedObjectStore)targetStore).getBaseDir();
+        // only register the parent dir because that will prevent leaks for the random ID
+        Os.deleteOnExitEmptyParentsUpTo(dir.getParentFile(), dir.getParentFile());
+        BrooklynPersistenceUtils.writeMemento(origManagementContext, targetStore, MementoCopyMode.LOCAL);            
+
+        RebindTestUtils.waitForPersisted(origApp);
+        log.info("Using manual export dir "+dir+" for rebind instead of "+mementoDir);
+        newApp = rebind(RebindOptions.create().mementoDir(dir));
+        
+        // After rebind, confirm that lookups still work
+        TestEntity newEntity = (TestEntity) Iterables.find(newApp.getChildren(), Predicates.instanceOf(TestEntity.class));
+        Location newSimulatedMachine = newApp.getManagementContext().getLocationManager().getLocation(origSimulatedMachine.getId());
+        PortForwardManager newPortForwardManager = newEntity.getConfig(MyEntity.PORT_FORWARD_MANAGER);
+        
+        assertEquals(newPortForwardManager.lookup(newSimulatedMachine, 80), HostAndPort.fromParts(publicAddress, 40080));
+        assertEquals(newPortForwardManager.lookup(publicIpId, 80), HostAndPort.fromParts(publicAddress, 40080));
+        
+        // delete the dir here, to be more likely not to leak it on failure
+        newManagementContext.getRebindManager().stop();
+        Os.deleteRecursively(dir);
+    }
+    
+    @Test
     public void testAssociationPreservedOnRebindLegacy() throws Exception {
         String publicIpId = "5.6.7.8";
         String publicAddress = "5.6.7.8";


[2/7] incubator-brooklyn git commit: fix failing test for controller where test entity did not set subnet_hostname

Posted by he...@apache.org.
fix failing test for controller where test entity did not set subnet_hostname


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/a94b4d02
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/a94b4d02
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/a94b4d02

Branch: refs/heads/master
Commit: a94b4d02a20e4bcbd8b040451c4d9dcfb3a29e1b
Parents: 40b21d6
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Mar 17 19:17:45 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Mar 18 22:08:20 2015 +0000

----------------------------------------------------------------------
 .../test/java/brooklyn/entity/proxy/AbstractControllerTest.java  | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a94b4d02/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java
index dd8da68..54f5779 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/AbstractControllerTest.java
@@ -117,16 +117,19 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
         Thread.sleep(100);
         
         child.setAttribute(ClusteredEntity.HOSTNAME, "mymachine");
+        child.setAttribute(Attributes.SUBNET_HOSTNAME, "mymachine");
         child.setAttribute(ClusteredEntity.HTTP_PORT, 1234);
         assertEventuallyExplicitAddressesMatch(ImmutableList.of("mymachine:1234"));
         
         child.setAttribute(ClusteredEntity.HOSTNAME, "mymachine2");
+        child.setAttribute(Attributes.SUBNET_HOSTNAME, "mymachine2");
         assertEventuallyExplicitAddressesMatch(ImmutableList.of("mymachine2:1234"));
         
         child.setAttribute(ClusteredEntity.HTTP_PORT, 1235);
         assertEventuallyExplicitAddressesMatch(ImmutableList.of("mymachine2:1235"));
         
         child.setAttribute(ClusteredEntity.HOSTNAME, null);
+        child.setAttribute(Attributes.SUBNET_HOSTNAME, null);
         assertEventuallyExplicitAddressesMatch(ImmutableList.<String>of());
     }
 
@@ -351,6 +354,7 @@ public class AbstractControllerTest extends BrooklynAppUnitTestSupport {
             }
             addLocations(Arrays.asList(machine));
             setAttribute(HOSTNAME, machine.getAddress().getHostName());
+            setAttribute(Attributes.SUBNET_HOSTNAME, machine.getAddress().getHostName());
         }
         public void stop() {
             if (provisioner!=null) provisioner.release((MachineLocation) firstLocation());


[3/7] incubator-brooklyn git commit: better name for install java ssh command, and other commands also get abbreviated for display

Posted by he...@apache.org.
better name for install java ssh command, and other commands also get abbreviated for display


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/e7f64fb2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/e7f64fb2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/e7f64fb2

Branch: refs/heads/master
Commit: e7f64fb23aaa1f9e1b14007e7af1d6efd8f7b127
Parents: f68bf83
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Mar 17 12:09:04 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Mar 18 22:08:20 2015 +0000

----------------------------------------------------------------------
 core/src/main/java/brooklyn/util/task/system/ProcessTaskStub.java  | 2 +-
 .../java/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java    | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e7f64fb2/core/src/main/java/brooklyn/util/task/system/ProcessTaskStub.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/task/system/ProcessTaskStub.java b/core/src/main/java/brooklyn/util/task/system/ProcessTaskStub.java
index 03d3f22..9fd19e7 100644
--- a/core/src/main/java/brooklyn/util/task/system/ProcessTaskStub.java
+++ b/core/src/main/java/brooklyn/util/task/system/ProcessTaskStub.java
@@ -71,7 +71,7 @@ public class ProcessTaskStub {
 
     public String getSummary() {
         if (summary!=null) return summary;
-        return Strings.join(commands, " ; ");
+        return Strings.maxlen(Strings.join(commands, " ; "), 160);
     }
     
     /** null for localhost */

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e7f64fb2/software/base/src/main/java/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java b/software/base/src/main/java/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
index 420d3e7..d2a11c9 100644
--- a/software/base/src/main/java/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
+++ b/software/base/src/main/java/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
@@ -342,6 +342,7 @@ public abstract class JavaSoftwareProcessSshDriver extends AbstractSoftwareProce
         try {
             log.debug("Installing Java {} at {}@{}", new Object[]{version, getEntity(), getLocation()});
             ProcessTaskFactory<Integer> taskFactory = SshTasks.newSshExecTaskFactory(getLocation(), command)
+                    .summary("install java ("+version+")")
                     .configure(ShellTool.PROP_EXEC_ASYNC, true);
             ProcessTaskWrapper<Integer> installCommand = Entities.submit(getEntity(), taskFactory);
             int result = installCommand.get();


[7/7] incubator-brooklyn git commit: This closes #554

Posted by he...@apache.org.
This closes #554


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/78072b29
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/78072b29
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/78072b29

Branch: refs/heads/master
Commit: 78072b294db95ea57eef93ba377d1349116ab811
Parents: 5fa1444 b68363e
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Mar 18 22:12:32 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Mar 18 22:12:32 2015 +0000

----------------------------------------------------------------------
 .../AbstractBrooklynObjectRebindSupport.java    |   2 +-
 .../entity/rebind/dto/MementosGenerators.java   |  55 +++++++-
 .../persister/BrooklynPersistenceUtils.java     |   4 +-
 .../location/access/PortForwardManagerImpl.java |   7 +-
 .../util/task/system/ProcessTaskStub.java       |   2 +-
 .../entity/rebind/RebindCatalogItemTest.java    |   4 +-
 ...talogWhenCatalogPersistenceDisabledTest.java |   8 +-
 .../entity/rebind/RebindTestFixture.java        |  10 +-
 .../access/PortForwardManagerRebindTest.java    |  45 +++++++
 .../location/jclouds/BrooklynImageChooser.java  | 135 ++++++++++++++++++-
 .../location/jclouds/JcloudsLocation.java       |   5 +-
 .../entity/brooklynnode/BrooklynNodeImpl.java   |  25 +---
 .../java/JavaSoftwareProcessSshDriver.java      |   1 +
 .../entity/proxy/AbstractControllerImpl.java    |   7 +-
 .../brooklyn/entity/proxy/LoadBalancer.java     |   2 +-
 .../entity/webapp/JavaWebAppSshDriver.java      |   4 +-
 .../entity/proxy/AbstractControllerTest.java    |   4 +
 .../java-web-app-and-db-with-policy.yaml        |   4 +-
 18 files changed, 273 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/78072b29/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/78072b29/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java
----------------------------------------------------------------------


[4/7] incubator-brooklyn git commit: yaml tidy

Posted by he...@apache.org.
yaml tidy


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/40b21d6f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/40b21d6f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/40b21d6f

Branch: refs/heads/master
Commit: 40b21d6fe6cd932d478bb546d6baea044b8461b5
Parents: c7449ac
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Mar 17 19:10:29 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Mar 18 22:08:20 2015 +0000

----------------------------------------------------------------------
 .../camp/src/test/resources/java-web-app-and-db-with-policy.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40b21d6f/usage/camp/src/test/resources/java-web-app-and-db-with-policy.yaml
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/resources/java-web-app-and-db-with-policy.yaml b/usage/camp/src/test/resources/java-web-app-and-db-with-policy.yaml
index 01f79f1..cd4c24d 100644
--- a/usage/camp/src/test/resources/java-web-app-and-db-with-policy.yaml
+++ b/usage/camp/src/test/resources/java-web-app-and-db-with-policy.yaml
@@ -18,7 +18,7 @@
 #
 name: java-cluster-db-policy-example
 services:
-- serviceType: brooklyn.entity.webapp.ControlledDynamicWebAppCluster
+- type: brooklyn.entity.webapp.ControlledDynamicWebAppCluster
   name: My Web with Policy
   location: localhost
   brooklyn.config:
@@ -37,7 +37,7 @@ services:
       minPoolSize: 1
       maxPoolSize: 5
       
-- serviceType: brooklyn.entity.database.mysql.MySqlNode
+- type: brooklyn.entity.database.mysql.MySqlNode
   id: db
   name: My DB
   location: localhost