You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sj...@apache.org on 2015/12/14 11:57:51 UTC
[2/6] incubator-brooklyn git commit: releasePortForwarding now uses
Task F/W to invoke portForwarder.closePortForwarding
releasePortForwarding now uses Task F/W to invoke portForwarder.closePortForwarding
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/2c194d10
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/2c194d10
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/2c194d10
Branch: refs/heads/master
Commit: 2c194d1078d21053127b3a4e077853d1eb467d48
Parents: 4ed9e97
Author: Mark McKenna <m4...@gmail.com>
Authored: Wed Dec 2 16:06:21 2015 +0000
Committer: Mark McKenna <m4...@gmail.com>
Committed: Fri Dec 11 15:49:12 2015 +0000
----------------------------------------------------------------------
.../location/jclouds/JcloudsLocation.java | 53 ++++++++++++++------
1 file changed, 39 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2c194d10/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
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 8a666c6..2f08af8 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
@@ -57,6 +57,8 @@ import org.apache.brooklyn.api.location.MachineManagementMixins;
import org.apache.brooklyn.api.location.NoMachinesAvailableException;
import org.apache.brooklyn.api.location.PortRange;
import org.apache.brooklyn.api.mgmt.AccessController;
+import org.apache.brooklyn.api.mgmt.Task;
+import org.apache.brooklyn.api.mgmt.TaskAdaptable;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
import org.apache.brooklyn.core.config.ConfigUtils;
@@ -96,6 +98,9 @@ import org.apache.brooklyn.util.core.internal.ssh.ShellTool;
import org.apache.brooklyn.util.core.internal.ssh.SshTool;
import org.apache.brooklyn.util.core.internal.winrm.WinRmTool;
import org.apache.brooklyn.util.core.internal.winrm.WinRmToolResponse;
+import org.apache.brooklyn.util.core.task.DynamicTasks;
+import org.apache.brooklyn.util.core.task.TaskBuilder;
+import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.core.text.TemplateProcessor;
import org.apache.brooklyn.util.exceptions.CompoundRuntimeException;
import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -2437,13 +2442,13 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
}
}
- protected void releasePortForwarding(SshMachineLocation machine) {
+ protected void releasePortForwarding(final SshMachineLocation machine) {
// TODO Implementation needs revisisted. It relies on deprecated PortForwardManager methods.
boolean usePortForwarding = Boolean.TRUE.equals(machine.getConfig(USE_PORT_FORWARDING));
- JcloudsPortForwarderExtension portForwarder = machine.getConfig(PORT_FORWARDER);
+ final JcloudsPortForwarderExtension portForwarder = machine.getConfig(PORT_FORWARDER);
PortForwardManager portForwardManager = machine.getConfig(PORT_FORWARDING_MANAGER);
- NodeMetadata node = (machine instanceof JcloudsSshMachineLocation) ? ((JcloudsSshMachineLocation) machine).getNode() : null;
+ final NodeMetadata node = (machine instanceof JcloudsSshMachineLocation) ? ((JcloudsSshMachineLocation) machine).getNode() : null;
if (portForwarder == null) {
LOG.debug("No port-forwarding to close (because portForwarder null) on release of " + machine);
@@ -2467,15 +2472,35 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
mappings = ImmutableSet.of();
}
- for (PortMapping mapping : mappings) {
- HostAndPort publicEndpoint = mapping.getPublicEndpoint();
- int targetPort = mapping.getPrivatePort();
- Protocol protocol = Protocol.TCP;
+ final TaskBuilder<Void> builder = TaskBuilder.<Void>builder()
+ .parallel(true)
+ .displayName("close port-forwarding at "+machine);
+
+ for (final PortMapping mapping : mappings) {
+ final HostAndPort publicEndpoint = mapping.getPublicEndpoint();
+ final int targetPort = mapping.getPrivatePort();
+ final Protocol protocol = Protocol.TCP;
if (publicEndpoint != null) {
- LOG.debug("Closing port-forwarding at {} for machine {}: {}->{}", new Object[] {this, machine, publicEndpoint, targetPort});
- portForwarder.closePortForwarding(node, targetPort, publicEndpoint, protocol);
+ builder.add(TaskBuilder.builder().displayName("Close port-forward at " +machine).body(new Runnable() {
+ @Override
+ public void run() {
+ LOG.debug("Closing port-forwarding at {} for machine {}: {}->{}", new Object[] {this, machine, publicEndpoint, targetPort});
+ portForwarder.closePortForwarding(node, targetPort, publicEndpoint, protocol);
+ }
+ }).build());
}
}
+ final Task<Void> task = builder.build();
+ final DynamicTasks.TaskQueueingResult<Void> queueResult = DynamicTasks.queueIfPossible(task);
+ if(!queueResult.isQueuedOrSubmitted()){
+ getManagementContext().getExecutionManager().submit(queueResult);
+ }
+ final String origDetails = Tasks.setBlockingDetails("waiting for closing port-forwarding of "+machine);
+ try {
+ task.blockUntilEnded();
+ } finally {
+ Tasks.setBlockingDetails(origDetails);
+ }
}
// Forget all port mappings associated with this VM
@@ -2530,11 +2555,11 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
protected String getFirstReachableAddress(NodeMetadata node, ConfigBag setup) {
String pollForFirstReachable = setup.get(POLL_FOR_FIRST_REACHABLE_ADDRESS);
-
+
boolean enabled = !"false".equalsIgnoreCase(pollForFirstReachable);
String result;
if (enabled) {
- Duration timeout = "true".equals(pollForFirstReachable) ? Duration.FIVE_MINUTES : Duration.of(pollForFirstReachable);
+ Duration timeout = "true".equals(pollForFirstReachable) ? Duration.FIVE_MINUTES : Duration.of(pollForFirstReachable);
result = JcloudsUtil.getFirstReachableAddress(node, timeout);
LOG.debug("Using first-reachable address "+result+" for node "+node+" in "+this);
} else {
@@ -2579,7 +2604,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
final HostAndPort hostAndPort = hostAndPortOverride.isPresent() ? hostAndPortOverride.get() : HostAndPort.fromParts(vmIp, vmPort);
final AtomicReference<LoginCredentials> credsSuccessful = new AtomicReference<LoginCredentials>();
- // Don't use config that relates to the final user credentials (those have nothing to do
+ // Don't use config that relates to the final user credentials (those have nothing to do
// with the initial credentials of the VM returned by the cloud provider).
// The createTemporaryWinRmMachineLocation deals with removing that.
ConfigBag winrmProps = ConfigBag.newInstanceCopying(setup);
@@ -2594,7 +2619,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
for (Map.Entry<WinRmMachineLocation, LoginCredentials> entry : machinesToTry.entrySet()) {
WinRmMachineLocation machine = entry.getKey();
WinRmToolResponse response = machine.executeScript(
- ImmutableMap.of(WinRmTool.PROP_EXEC_TRIES.getName(), 1),
+ ImmutableMap.of(WinRmTool.PROP_EXEC_TRIES.getName(), 1),
ImmutableList.of("echo testing"));
boolean success = (response.getStatusCode() == 0);
if (success) {
@@ -2604,7 +2629,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
}
return false;
}};
-
+
waitForReachable(checker, connectionDetails, credentialsToTry, setup, timeout);
} finally {
for (WinRmMachineLocation machine : machinesToTry.keySet()) {