Repository: jclouds-labs Updated Branches: refs/heads/2.0.x e4c809dbd -> 66bed4b31
Remove terminated nodes cache Used to keep terminated nodes meta for a short while, but not needed. Also adds missing state transitions on halt, reboot. Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/66bed4b3 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/66bed4b3 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/66bed4b3 Branch: refs/heads/2.0.x Commit: 66bed4b31039d140f813cb9c425cec34b4d77cb9 Parents: e4c809d Author: Svetoslav Neykov <[email protected]> Authored: Thu Feb 2 11:07:43 2017 +0200 Committer: Ignasi Barrera <[email protected]> Committed: Thu Feb 2 15:01:33 2017 +0100 ---------------------------------------------------------------------- .../compute/VagrantComputeServiceAdapter.java | 2 + .../VagrantComputeServiceContextModule.java | 13 ---- .../vagrant/internal/VagrantNodeRegistry.java | 77 +++----------------- .../internal/VagrantNodeRegistryTest.java | 20 +---- 4 files changed, 12 insertions(+), 100 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/66bed4b3/vagrant/src/main/java/org/jclouds/vagrant/compute/VagrantComputeServiceAdapter.java ---------------------------------------------------------------------- diff --git a/vagrant/src/main/java/org/jclouds/vagrant/compute/VagrantComputeServiceAdapter.java b/vagrant/src/main/java/org/jclouds/vagrant/compute/VagrantComputeServiceAdapter.java index 2f19b3e..d707ee6 100644 --- a/vagrant/src/main/java/org/jclouds/vagrant/compute/VagrantComputeServiceAdapter.java +++ b/vagrant/src/main/java/org/jclouds/vagrant/compute/VagrantComputeServiceAdapter.java @@ -311,6 +311,7 @@ public class VagrantComputeServiceAdapter implements ComputeServiceAdapter<Vagra String name = node.name(); VagrantApiFacade vagrant = getMachine(node); vagrant.up(name); + node.setMachineState(Status.RUNNING); } private void halt(String id) { @@ -320,6 +321,7 @@ public class VagrantComputeServiceAdapter implements ComputeServiceAdapter<Vagra try { vagrant.halt(name); + node.setMachineState(Status.SUSPENDED); } catch (IllegalStateException e) { logger.warn(e, "Failed graceful shutdown of machine " + id + ". Will try to halt it forcefully instead."); vagrant.haltForced(name); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/66bed4b3/vagrant/src/main/java/org/jclouds/vagrant/config/VagrantComputeServiceContextModule.java ---------------------------------------------------------------------- diff --git a/vagrant/src/main/java/org/jclouds/vagrant/config/VagrantComputeServiceContextModule.java b/vagrant/src/main/java/org/jclouds/vagrant/config/VagrantComputeServiceContextModule.java index bb122e4..f66c2db 100644 --- a/vagrant/src/main/java/org/jclouds/vagrant/config/VagrantComputeServiceContextModule.java +++ b/vagrant/src/main/java/org/jclouds/vagrant/config/VagrantComputeServiceContextModule.java @@ -28,7 +28,6 @@ import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.internal.ArbitraryCpuRamTemplateBuilderImpl; import org.jclouds.compute.domain.internal.TemplateBuilderImpl; import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy; -import org.jclouds.date.TimeStamp; import org.jclouds.domain.Location; import org.jclouds.functions.IdentityFunction; import org.jclouds.vagrant.api.VagrantApiFacade; @@ -48,7 +47,6 @@ import org.jclouds.vagrant.suppliers.VagrantHardwareSupplier; import com.google.common.base.Function; import com.google.common.base.Supplier; import com.google.inject.Module; -import com.google.inject.Provides; import com.google.inject.Singleton; import com.google.inject.TypeLiteral; import com.google.inject.assistedinject.FactoryModuleBuilder; @@ -94,17 +92,6 @@ public class VagrantComputeServiceContextModule extends ComputeServiceAdapterCon bind(CommandIOListener.class).to(VagrantWireLogger.class).in(Singleton.class); } - @Provides - @TimeStamp - public Supplier<Long> timeSupplier() { - return new Supplier<Long>() { - @Override - public Long get() { - return System.currentTimeMillis(); - } - }; - } - @Override protected void install(Module module) { // override PersistNodeCredentialsModule bindings, any better way to do it? http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/66bed4b3/vagrant/src/main/java/org/jclouds/vagrant/internal/VagrantNodeRegistry.java ---------------------------------------------------------------------- diff --git a/vagrant/src/main/java/org/jclouds/vagrant/internal/VagrantNodeRegistry.java b/vagrant/src/main/java/org/jclouds/vagrant/internal/VagrantNodeRegistry.java index 8355b2d..d9447c8 100644 --- a/vagrant/src/main/java/org/jclouds/vagrant/internal/VagrantNodeRegistry.java +++ b/vagrant/src/main/java/org/jclouds/vagrant/internal/VagrantNodeRegistry.java @@ -19,11 +19,7 @@ package org.jclouds.vagrant.internal; import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.DelayQueue; -import java.util.concurrent.Delayed; -import java.util.concurrent.TimeUnit; -import org.jclouds.date.TimeStamp; import org.jclouds.vagrant.domain.VagrantNode; import com.google.common.base.Supplier; @@ -33,8 +29,6 @@ import com.google.inject.Singleton; @Singleton public class VagrantNodeRegistry { - private static final long TERMINATED_NODES_EXPIRY_MS = TimeUnit.MINUTES.toMillis(5); - private static final long VACUUM_PERIOD_MS = TimeUnit.SECONDS.toMillis(15); private static class ConcurrentWrapperSupplier implements Supplier<Map<String, VagrantNode>> { private Supplier<Collection<VagrantNode>> existingMachines; @@ -54,84 +48,31 @@ public class VagrantNodeRegistry { } - private static class TerminatedNode implements Delayed { - Supplier<Long> timeSupplier; - long expiryTime; - VagrantNode node; - - TerminatedNode(VagrantNode node, Supplier<Long> timeSupplier) { - this.expiryTime = System.currentTimeMillis() + TERMINATED_NODES_EXPIRY_MS; - this.node = node; - this.timeSupplier = timeSupplier; - } - @Override - public int compareTo(Delayed o) { - if (this == o) { - return 0; - } else if (o instanceof TerminatedNode) { - TerminatedNode other = (TerminatedNode)o; - if (expiryTime < other.expiryTime) { - return -1; - } else if (expiryTime > other.expiryTime) { - return 1; - } else { - return 0; - } - } else { - long diff = getDelay(TimeUnit.NANOSECONDS) - o.getDelay(TimeUnit.NANOSECONDS); - if (diff < 0) { - return -1; - } else if (diff > 0) { - return 1; - } else { - return 0; - } - } - } - @Override - public long getDelay(TimeUnit unit) { - return unit.convert(expiryTime - timeSupplier.get(), TimeUnit.MILLISECONDS); - } - } - - private final DelayQueue<TerminatedNode> terminatedNodes = new DelayQueue<TerminatedNode>(); private final Supplier<Map<String, VagrantNode>> nodes; - private volatile long lastVacuumMs; - private final Supplier<Long> timeSupplier; - @Inject - VagrantNodeRegistry(@TimeStamp Supplier<Long> timeSupplier, Supplier<Collection<VagrantNode>> existingMachines) { - this.timeSupplier = timeSupplier; + VagrantNodeRegistry(Supplier<Collection<VagrantNode>> existingMachines) { this.nodes = Suppliers.memoize(new ConcurrentWrapperSupplier(existingMachines)); } public VagrantNode get(String id) { - vacuum(); - return nodes.get().get(id); - } - - protected void vacuum() { - // No need to lock on lastVacuumMs - not critical if we miss/do double vacuuming. - if (timeSupplier.get() - lastVacuumMs > VACUUM_PERIOD_MS) { - TerminatedNode terminated; - while ((terminated = terminatedNodes.poll()) != null) { - nodes.get().remove(terminated.node.id()); - } - lastVacuumMs = timeSupplier.get(); - } + return nodes().get(id); } public void add(VagrantNode node) { - nodes.get().put(node.id(), node); + nodes().put(node.id(), node); } public Collection<VagrantNode> list() { - return nodes.get().values(); + return nodes().values(); } public void onTerminated(VagrantNode node) { - terminatedNodes.add(new TerminatedNode(node, timeSupplier)); + nodes().remove(node.id()); + } + + private Map<String, VagrantNode> nodes() { + return nodes.get(); } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/66bed4b3/vagrant/src/test/java/org/jclouds/vagrant/internal/VagrantNodeRegistryTest.java ---------------------------------------------------------------------- diff --git a/vagrant/src/test/java/org/jclouds/vagrant/internal/VagrantNodeRegistryTest.java b/vagrant/src/test/java/org/jclouds/vagrant/internal/VagrantNodeRegistryTest.java index 4ad492a..29b6dd9 100644 --- a/vagrant/src/test/java/org/jclouds/vagrant/internal/VagrantNodeRegistryTest.java +++ b/vagrant/src/test/java/org/jclouds/vagrant/internal/VagrantNodeRegistryTest.java @@ -20,7 +20,6 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; import java.io.File; -import java.util.concurrent.TimeUnit; import org.easymock.EasyMock; import org.jclouds.compute.domain.Hardware; @@ -33,23 +32,9 @@ import org.jclouds.compute.domain.Processor; import org.jclouds.vagrant.domain.VagrantNode; import org.testng.annotations.Test; -import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; public class VagrantNodeRegistryTest { - private static class TestTimeSupplier implements Supplier<Long> { - long time = System.currentTimeMillis(); - - @Override - public Long get() { - return time; - } - - public void advanceTime(long add) { - time += add; - } - - } @Test public void testNodeRegistry() { @@ -57,8 +42,7 @@ public class VagrantNodeRegistryTest { EasyMock.expect(loader.get()).andReturn(ImmutableList.<VagrantNode>of()); EasyMock.replay(loader); - TestTimeSupplier timeSupplier = new TestTimeSupplier(); - VagrantNodeRegistry registry = new VagrantNodeRegistry(timeSupplier, loader); + VagrantNodeRegistry registry = new VagrantNodeRegistry(loader); OperatingSystem os = new OperatingSystem(OsFamily.UNRECOGNIZED, "Jclouds OS", "10", "x64", "Jclouds Test Image", true); Image image = new ImageBuilder() .ids("jclouds/box") @@ -83,8 +67,6 @@ public class VagrantNodeRegistryTest { registry.add(node); assertEquals(registry.get(node.id()), node); registry.onTerminated(node); - assertEquals(registry.get(node.id()), node); - timeSupplier.advanceTime(TimeUnit.MINUTES.toMillis(10)); assertNull(registry.get(node.id())); } }
