You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2016/11/16 20:46:17 UTC
[3/4] brooklyn-server git commit: BROOKLYN-325: address review
comments
BROOKLYN-325: address review comments
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/8bef4c7a
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/8bef4c7a
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/8bef4c7a
Branch: refs/heads/master
Commit: 8bef4c7a3db3584c8c383a32eb1c4a62f90f7272
Parents: 829ae6a
Author: Aled Sage <al...@gmail.com>
Authored: Wed Nov 16 15:46:05 2016 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Nov 16 15:46:05 2016 +0000
----------------------------------------------------------------------
.../entity/internal/AttributesInternal.java | 17 ++++----
.../mgmt/rebind/BasicEntityRebindSupport.java | 6 +--
.../MachineLifecycleEffectorTasks.java | 4 +-
...ftwareProcessRebindNotRunningEntityTest.java | 44 +++++++++++++-------
...eProcessStopsDuringStartJcloudsLiveTest.java | 2 +-
.../SoftwareProcessStopsDuringStartTest.java | 6 +--
6 files changed, 47 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8bef4c7a/core/src/main/java/org/apache/brooklyn/core/entity/internal/AttributesInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/internal/AttributesInternal.java b/core/src/main/java/org/apache/brooklyn/core/entity/internal/AttributesInternal.java
index 7bccb4d..66004fb 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/internal/AttributesInternal.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/internal/AttributesInternal.java
@@ -1,4 +1,5 @@
/*
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -19,22 +20,21 @@ package org.apache.brooklyn.core.entity.internal;
import org.apache.brooklyn.api.sensor.AttributeSensor;
import org.apache.brooklyn.core.entity.Attributes;
-import org.apache.brooklyn.core.sensor.BasicAttributeSensor;
+import org.apache.brooklyn.core.sensor.Sensors;
import com.google.common.annotations.Beta;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.reflect.TypeToken;
public interface AttributesInternal extends Attributes {
@Beta
- public static final AttributeSensor<ProvisioningTaskState> INTERNAL_PROVISIONING_TASK_STATE = new BasicAttributeSensor<ProvisioningTaskState>(
- TypeToken.of(ProvisioningTaskState.class),
+ public static final AttributeSensor<ProvisioningTaskState> INTERNAL_PROVISIONING_TASK_STATE = Sensors.newSensor(
+ ProvisioningTaskState.class,
"internal.provisioning.task.state",
"Internal transient sensor (do not use) for tracking the provisioning of a machine (to better handle aborting/rebind)");
@Beta
- public static final AttributeSensor<ProvisioningTaskState> INTERNAL_TERMINATION_TASK_STATE = new BasicAttributeSensor<ProvisioningTaskState>(
- TypeToken.of(ProvisioningTaskState.class),
+ public static final AttributeSensor<ProvisioningTaskState> INTERNAL_TERMINATION_TASK_STATE = Sensors.newSensor(
+ ProvisioningTaskState.class,
"internal.termination.task.state",
"Internal transient sensor (do not use) for tracking the termination of a machine (to better handle aborting/rebind)");
@@ -42,11 +42,12 @@ public interface AttributesInternal extends Attributes {
* Used only internally by {@link org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks}
* to track provisioning/termination. This is used so the machine can be terminated if stopped while opaque provision
* call is being made; and is used to report if termination was prematurely aborted (e.g. during Brooklyn restart).
+ *
+ * @since 0.10.0; before that moved from org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks$ProvisioningTaskState
*/
@Beta
@VisibleForTesting
public enum ProvisioningTaskState {
- RUNNING,
- DONE;
+ RUNNING
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8bef4c7a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java
index f7b5cd8..4165191 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java
@@ -269,7 +269,7 @@ public class BasicEntityRebindSupport extends AbstractBrooklynObjectRebindSuppor
ServiceStateLogic.ServiceNotUpLogic.updateNotUpIndicator(
entity,
"Task aborted on rebind",
- "Set to on-fire (from previous expected state "+expectedState+") because tasks aborted on rebind");
+ "Set to on-fire (from previous expected state "+expectedState+") because tasks aborted on shutdown");
// Check if we were in the process of provisioning a machine. If so, a VM might have
// been left behind. E.g. we might have submitted to jclouds the request to provision
@@ -282,7 +282,7 @@ public class BasicEntityRebindSupport extends AbstractBrooklynObjectRebindSuppor
ServiceStateLogic.ServiceNotUpLogic.updateNotUpIndicator(
entity,
"VM may be lost on rebind",
- "VM provisioning may have been in-progress and now lost, because tasks aborted on rebind");
+ "VM provisioning may have been in-progress and now lost, because tasks aborted on shutdown");
}
// Similar to the provisioning case, if we were terminating the VM then we may or may
@@ -294,7 +294,7 @@ public class BasicEntityRebindSupport extends AbstractBrooklynObjectRebindSuppor
ServiceStateLogic.ServiceNotUpLogic.updateNotUpIndicator(
entity,
"VM may be lost on rebind",
- "VM termination may have been in-progress and now lost, because tasks aborted on rebind");
+ "VM termination may have been in-progress and now lost, because tasks aborted on shutdown");
}
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8bef4c7a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
index 8748861..bb7da92 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/MachineLifecycleEffectorTasks.java
@@ -414,7 +414,7 @@ public abstract class MachineLifecycleEffectorTasks {
machine = Tasks.withBlockingDetails("Provisioning machine in " + location, new ObtainLocationTask(location, flags));
entity().sensors().set(INTERNAL_PROVISIONED_MACHINE, machine);
} finally {
- entity().sensors().set(AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE, ProvisioningTaskState.DONE);
+ entity().sensors().remove(AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE);
}
if (machine == null) {
@@ -774,7 +774,7 @@ public abstract class MachineLifecycleEffectorTasks {
@Override
public Boolean call() throws Exception {
ProvisioningTaskState state = entity().sensors().get(AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE);
- return (state == ProvisioningTaskState.DONE);
+ return (state != ProvisioningTaskState.RUNNING);
}})
.backoffTo(Duration.FIVE_SECONDS)
.limitTimeTo(maxWait)
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8bef4c7a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessRebindNotRunningEntityTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessRebindNotRunningEntityTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessRebindNotRunningEntityTest.java
index 89a177a..9c9987c 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessRebindNotRunningEntityTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessRebindNotRunningEntityTest.java
@@ -47,6 +47,7 @@ import org.apache.brooklyn.core.entity.internal.AttributesInternal;
import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
import org.apache.brooklyn.core.entity.trait.Startable;
import org.apache.brooklyn.core.location.AbstractLocation;
+import org.apache.brooklyn.core.mgmt.rebind.RebindOptions;
import org.apache.brooklyn.core.mgmt.rebind.RebindTestFixtureWithApp;
import org.apache.brooklyn.core.test.entity.TestApplication;
import org.apache.brooklyn.location.byon.FixedListMachineProvisioningLocation;
@@ -62,6 +63,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.google.common.base.Predicate;
@@ -87,6 +89,11 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
// TODO Longer term, we should investigate/fix that so tearDown finishes promptly no matter what!
private List<CountDownLatch> latches;
+ @DataProvider
+ public Object[][] terminateOrigManagementContextProvider() {
+ return new Object[][]{{false}, {true}};
+ }
+
@BeforeMethod(alwaysRun=true)
@Override
public void setUp() throws Exception {
@@ -133,8 +140,8 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
return HighAvailabilityMode.MASTER;
}
- @Test
- public void testRebindWhileWaitingForCheckRunning() throws Exception {
+ @Test(dataProvider="terminateOrigManagementContextProvider")
+ public void testRebindWhileWaitingForCheckRunning(boolean terminateOrigManagementContext) throws Exception {
final CountDownLatch checkRunningCalledLatch = newLatch(1);
RecordingSshTool.setCustomResponse(".*myCheckRunning.*", new CustomResponseGenerator() {
@Override
@@ -152,15 +159,15 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
EntityAsserts.assertAttributeEquals(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STARTING);
- TestApplication newApp = rebind();
+ TestApplication newApp = rebind(RebindOptions.create().terminateOrigManagementContext(terminateOrigManagementContext));
final VanillaSoftwareProcess newEntity = (VanillaSoftwareProcess) Iterables.find(newApp.getChildren(), Predicates.instanceOf(VanillaSoftwareProcess.class));
assertMarkedAsOnfire(newEntity, Lifecycle.STARTING);
assertMarkedAsOnfire(newApp, Lifecycle.STARTING);
}
- @Test
- public void testRebindWhileLaunching() throws Exception {
+ @Test(dataProvider="terminateOrigManagementContextProvider")
+ public void testRebindWhileLaunching(boolean terminateOrigManagementContext) throws Exception {
final CountDownLatch launchCalledLatch = newLatch(1);
final CountDownLatch launchBlockedLatch = newLatch(1);
RecordingSshTool.setCustomResponse(".*myLaunch.*", new CustomResponseGenerator() {
@@ -180,15 +187,15 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
EntityAsserts.assertAttributeEquals(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STARTING);
- TestApplication newApp = rebind();
+ TestApplication newApp = rebind(RebindOptions.create().terminateOrigManagementContext(terminateOrigManagementContext));
final VanillaSoftwareProcess newEntity = (VanillaSoftwareProcess) Iterables.find(newApp.getChildren(), Predicates.instanceOf(VanillaSoftwareProcess.class));
assertMarkedAsOnfire(newEntity, Lifecycle.STARTING);
assertMarkedAsOnfire(newApp, Lifecycle.STARTING);
}
- @Test
- public void testRebindWhileStoppingProcess() throws Exception {
+ @Test(dataProvider="terminateOrigManagementContextProvider")
+ public void testRebindWhileStoppingProcess(boolean terminateOrigManagementContext) throws Exception {
final CountDownLatch stopCalledLatch = newLatch(1);
final CountDownLatch stopBlockedLatch = newLatch(1);
RecordingSshTool.setCustomResponse(".*myStop.*", new CustomResponseGenerator() {
@@ -210,7 +217,7 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
EntityAsserts.assertAttributeEquals(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STOPPING);
- TestApplication newApp = rebind();
+ TestApplication newApp = rebind(RebindOptions.create().terminateOrigManagementContext(terminateOrigManagementContext));
final VanillaSoftwareProcess newEntity = (VanillaSoftwareProcess) Iterables.find(newApp.getChildren(), Predicates.instanceOf(VanillaSoftwareProcess.class));
assertMarkedAsOnfire(newEntity, Lifecycle.STOPPING);
@@ -218,6 +225,11 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
@Test
public void testRebindWhileProvisioning() throws Exception {
+ testRebindWhileProvisioning(true);
+ }
+
+ @Test(dataProvider="terminateOrigManagementContextProvider")
+ public void testRebindWhileProvisioning(boolean terminateOrigManagementContext) throws Exception {
final CountDownLatch obtainCalledLatch = newLatch(1);
final CountDownLatch obtainBlockedLatch = newLatch(1);
MyProvisioningLocation blockingProvisioner = mgmt().getLocationManager().createLocation(LocationSpec.create(MyProvisioningLocation.class)
@@ -233,8 +245,9 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
awaitOrFail(obtainCalledLatch, Asserts.DEFAULT_LONG_TIMEOUT);
EntityAsserts.assertAttributeEquals(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STARTING);
+ EntityAsserts.assertAttributeEquals(entity, AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE, AttributesInternal.ProvisioningTaskState.RUNNING);
- TestApplication newApp = rebind();
+ TestApplication newApp = rebind(RebindOptions.create().terminateOrigManagementContext(terminateOrigManagementContext));
final VanillaSoftwareProcess newEntity = (VanillaSoftwareProcess) Iterables.find(newApp.getChildren(), Predicates.instanceOf(VanillaSoftwareProcess.class));
assertMarkedAsOnfire(newEntity, Lifecycle.STARTING);
@@ -246,8 +259,8 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
EntityAsserts.assertAttributeEquals(newEntity, AttributesInternal.INTERNAL_TERMINATION_TASK_STATE, null);
}
- @Test
- public void testRebindWhileTerminatingVm() throws Exception {
+ @Test(dataProvider="terminateOrigManagementContextProvider")
+ public void testRebindWhileTerminatingVm(boolean terminateOrigManagementContext) throws Exception {
final CountDownLatch releaseCalledLatch = newLatch(1);
final CountDownLatch obtainBlockedLatch = newLatch(1);
MyProvisioningLocation blockingProvisioner = mgmt().getLocationManager().createLocation(LocationSpec.create(MyProvisioningLocation.class)
@@ -265,8 +278,9 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
awaitOrFail(releaseCalledLatch, Asserts.DEFAULT_LONG_TIMEOUT);
EntityAsserts.assertAttributeEquals(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.STOPPING);
+ EntityAsserts.assertAttributeEquals(entity, AttributesInternal.INTERNAL_TERMINATION_TASK_STATE, AttributesInternal.ProvisioningTaskState.RUNNING);
- TestApplication newApp = rebind();
+ TestApplication newApp = rebind(RebindOptions.create().terminateOrigManagementContext(terminateOrigManagementContext));
final VanillaSoftwareProcess newEntity = (VanillaSoftwareProcess) Iterables.find(newApp.getChildren(), Predicates.instanceOf(VanillaSoftwareProcess.class));
@@ -338,12 +352,12 @@ public class SoftwareProcessRebindNotRunningEntityTest extends RebindTestFixture
EntityAsserts.assertAttributeEqualsEventually(entity, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.ON_FIRE);
EntityAsserts.assertAttributeEqualsEventually(entity, Attributes.SERVICE_UP, false);
assertNotUpIndicatorIncludesEventually(entity, "Task aborted on rebind",
- "Set to on-fire (from previous expected state "+previousState+") because tasks aborted on rebind");
+ "Set to on-fire (from previous expected state "+previousState+") because tasks aborted on shutdown");
}
protected void assertMarkedAsVmLost(Entity entity, Lifecycle previousState) throws Exception {
String expectedReason = "VM " + (previousState == Lifecycle.STARTING ? "provisioning" : "termination")
- + " may have been in-progress and now lost, because tasks aborted on rebind";
+ + " may have been in-progress and now lost, because tasks aborted on shutdown";
assertNotUpIndicatorIncludesEventually(entity, "VM may be lost on rebind", expectedReason);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8bef4c7a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartJcloudsLiveTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartJcloudsLiveTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartJcloudsLiveTest.java
index f5dcf5d..9515feb 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartJcloudsLiveTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartJcloudsLiveTest.java
@@ -142,7 +142,7 @@ public class SoftwareProcessStopsDuringStartJcloudsLiveTest extends BrooklynAppL
}
}, Asserts.DEFAULT_LONG_TIMEOUT.toMilliseconds(), TimeUnit.MILLISECONDS);
EntityAsserts.assertEntityHealthy(entity);
- assertEquals(entity.getAttribute(AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE), AttributesInternal.ProvisioningTaskState.DONE);
+ assertEquals(entity.getAttribute(AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE), null);
assertEquals(entity.getAttribute(MachineLifecycleEffectorTasks.INTERNAL_PROVISIONED_MACHINE), Machines.findUniqueMachineLocation(entity.getLocations(), SshMachineLocation.class).get());
executeInLimitedTime(new Callable<Void>() {
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8bef4c7a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java
index 99d9678..095da91 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartTest.java
@@ -99,7 +99,7 @@ public class SoftwareProcessStopsDuringStartTest extends BrooklynAppUnitTestSupp
entity.start(ImmutableList.<Location>of(loc));
SshMachineLocation machine = Machines.findUniqueMachineLocation(entity.getLocations(), SshMachineLocation.class).get();
- EntityAsserts.assertAttributeEquals(entity, AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE, AttributesInternal.ProvisioningTaskState.DONE);
+ EntityAsserts.assertAttributeEquals(entity, AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE, null);
EntityAsserts.assertAttributeEquals(entity, MachineLifecycleEffectorTasks.INTERNAL_PROVISIONED_MACHINE, machine);
Stopwatch stopwatch = Stopwatch.createStarted();
@@ -120,7 +120,7 @@ public class SoftwareProcessStopsDuringStartTest extends BrooklynAppUnitTestSupp
entity.start(ImmutableList.<Location>of(loc));
SshMachineLocation machine = Machines.findUniqueMachineLocation(entity.getLocations(), SshMachineLocation.class).get();
- EntityAsserts.assertAttributeEquals(entity, AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE, AttributesInternal.ProvisioningTaskState.DONE);
+ EntityAsserts.assertAttributeEquals(entity, AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE, null);
EntityAsserts.assertAttributeEquals(entity, MachineLifecycleEffectorTasks.INTERNAL_PROVISIONED_MACHINE, machine);
entity.stop();
@@ -129,7 +129,7 @@ public class SoftwareProcessStopsDuringStartTest extends BrooklynAppUnitTestSupp
entity.start(ImmutableList.<Location>of(loc));
SshMachineLocation machine2 = Machines.findUniqueMachineLocation(entity.getLocations(), SshMachineLocation.class).get();
- EntityAsserts.assertAttributeEquals(entity, AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE, AttributesInternal.ProvisioningTaskState.DONE);
+ EntityAsserts.assertAttributeEquals(entity, AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE, null);
EntityAsserts.assertAttributeEquals(entity, MachineLifecycleEffectorTasks.INTERNAL_PROVISIONED_MACHINE, machine2);
entity.stop();