Example usage for com.google.common.util.concurrent Atomics newReference

List of usage examples for com.google.common.util.concurrent Atomics newReference

Introduction

In this page you can find the example usage for com.google.common.util.concurrent Atomics newReference.

Prototype

public static <V> AtomicReference<V> newReference(@Nullable V initialValue) 

Source Link

Document

Creates an AtomicReference instance with the given initial value.

Usage

From source file:org.jclouds.openstack.nova.v2_0.compute.options.NodeAndNovaTemplateOptions.java

public static AtomicReference<NodeAndNovaTemplateOptions> newAtomicReference(AtomicReference<NodeMetadata> node,
        AtomicReference<NovaTemplateOptions> options) {
    return Atomics.newReference(NodeAndNovaTemplateOptions.newReference(node, options));
}

From source file:org.jclouds.rackspace.clouddns.v1.predicates.JobPredicates.java

/**
 * Tests to see if a Job has completed./*from w  w  w .  j a va  2  s .  co  m*/
 *
 * <pre>
 * {@code
 * CreateDomain createDomain1 = CreateDomain.builder()
 *    .name("jclouds-example.org")
 *    .email("jclouds@jclouds-example.org")
 *    .ttl(600001)
 *    .comment("Hello Domain 1")
 *    .build();
 *
 * Iterable<CreateDomain> createDomains = ImmutableList.of(createDomain1);      
 * Set<Domain> domains = awaitComplete(api, api.getDomainApi().create(createDomains));
 * }
 * </pre>
 */
public static <T> T awaitComplete(CloudDNSApi api, Job<T> job) throws TimeoutException {
    AtomicReference<Job<T>> jobRef = Atomics.newReference(job);

    if (!retry(jobCompleted(api), 600, 2, 2, SECONDS).apply(jobRef)) {
        throw new TimeoutException("Timeout on: " + jobRef.get());
    }

    return jobRef.get().getResource().orNull();
}

From source file:net.derquinse.common.util.concurrent.DefaultRefCounted.java

DefaultRefCounted(T value, Runnable hook) {
    this.value = checkNotNull(value, "The referenced value is mandatory");
    this.state = Atomics.newReference(new State());
    this.task = new FutureTask<Long>(new Hook(hook));
}

From source file:org.jclouds.googlecomputeengine.compute.functions.CreateNetworkIfNeeded.java

@Override
public Network apply(NetworkAndAddressRange input) {
    checkNotNull(input, "input");

    Network nw = api.networks().get(input.name());
    if (nw != null) {
        return nw;
    }/*from  ww w.  j a v  a 2 s .  c om*/

    if (input.gateway() != null) {
        NetworkCreationOptions options = new NetworkCreationOptions.Builder(input.name(), input.rangeIPv4())
                .gatewayIPv4(input.gateway()).build();
        AtomicReference<Operation> operation = Atomics.newReference(api.networks().createInIPv4Range(options));
        operationDone.apply(operation);

        checkState(operation.get().httpErrorStatusCode() == null,
                "Could not insert network, operation failed" + operation);
    } else {
        AtomicReference<Operation> operation = Atomics
                .newReference(api.networks().createInIPv4Range(input.name(), input.rangeIPv4()));
        operationDone.apply(operation);

        checkState(operation.get().httpErrorStatusCode() == null,
                "Could not insert network, operation failed" + operation);
    }
    return checkNotNull(api.networks().get(input.name()), "no network with name %s was found", input.name());
}

From source file:org.jclouds.openstack.nova.v2_0.compute.loaders.FindSecurityGroupOrCreate.java

@Override
public SecurityGroupInZone load(ZoneAndName in) {
    AtomicReference<ZoneAndName> securityGroupInZoneRef = Atomics
            .newReference(checkNotNull(in, "zoneSecurityGroupNameAndPorts"));
    if (returnSecurityGroupExistsInZone.apply(securityGroupInZoneRef)) {
        return returnExistingSecurityGroup(securityGroupInZoneRef);
    } else {//from   ww  w . j av  a 2 s . co m
        return createNewSecurityGroup(in);
    }
}

From source file:org.jclouds.googlecomputeengine.functions.CreateNetworkIfNeeded.java

@Override
public Network apply(NetworkAndAddressRange input) {
    checkNotNull(input, "input");

    Network nw = api.getNetworkApiForProject(userProject.get()).get(input.getName());
    if (nw != null) {
        return nw;
    }/*  w ww .j  a va 2 s.  c  om*/

    if (input.getGateway().isPresent()) {
        AtomicReference<Operation> operation = Atomics.newReference(
                api.getNetworkApiForProject(userProject.get()).createInIPv4RangeWithGateway(input.getName(),
                        input.getIpV4Range(), input.getGateway().get()));
        retry(operationDonePredicate, operationCompleteCheckTimeout, operationCompleteCheckInterval,
                MILLISECONDS).apply(operation);

        checkState(!operation.get().getHttpError().isPresent(),
                "Could not create network, operation failed" + operation);
    } else {
        AtomicReference<Operation> operation = Atomics
                .newReference(api.getNetworkApiForProject(userProject.get()).createInIPv4Range(input.getName(),
                        input.getIpV4Range()));
        retry(operationDonePredicate, operationCompleteCheckTimeout, operationCompleteCheckInterval,
                MILLISECONDS).apply(operation);

        checkState(!operation.get().getHttpError().isPresent(),
                "Could not create network, operation failed" + operation);
    }
    return checkNotNull(api.getNetworkApiForProject(userProject.get()).get(input.getName()),
            "no network with name %s was found", input.getName());
}

From source file:org.jclouds.openstack.nova.v2_0.compute.functions.SecurityGroupRuleToIpPermission.java

protected Predicate<String> isSecurityGroupInZone(final String groupName) {
    return new Predicate<String>() {

        @Override/*from w w w.  j  a va2  s  .c o m*/
        public boolean apply(String zone) {
            AtomicReference<ZoneAndName> securityGroupInZoneRef = Atomics
                    .newReference(ZoneAndName.fromZoneAndName(zone, groupName));
            return returnSecurityGroupExistsInZone.apply(securityGroupInZoneRef);
        }
    };
}

From source file:org.jclouds.cloudservers.compute.extensions.CloudServersImageExtension.java

@Override
public ListenableFuture<Image> createImage(ImageTemplate template) {
    checkState(template instanceof CloneImageTemplate,
            " openstack-nova only supports creating images through cloning.");
    CloneImageTemplate cloneTemplate = (CloneImageTemplate) template;
    org.jclouds.cloudservers.domain.Image csImage = client.createImageFromServer(cloneTemplate.getName(),
            Integer.parseInt(cloneTemplate.getSourceNodeId()));

    final AtomicReference<Image> image = Atomics.newReference(new ImageBuilder().location(location.get())
            .ids(csImage.getId() + "").description(cloneTemplate.getName())
            .operatingSystem(OperatingSystem.builder().description(cloneTemplate.getName()).build())
            .status(Image.Status.PENDING).build());

    return userExecutor.submit(new Callable<Image>() {
        @Override//from w  w w .java 2  s.c  o  m
        public Image call() throws Exception {
            if (imageAvailablePredicate.apply(image))
                return image.get();
            // TODO: get rid of the expectation that the image will be available, as it is very brittle
            throw new UncheckedTimeoutException("Image was not created within the time limit: " + image.get());
        }
    });
}

From source file:org.jclouds.docker.compute.extensions.DockerImageExtension.java

@Override
public ListenableFuture<Image> createImage(ImageTemplate template) {
    checkArgument(template instanceof CloneImageTemplate,
            " docker only currently supports creating images through cloning.");
    CloneImageTemplate cloneTemplate = (CloneImageTemplate) template;

    Container container = api.getRemoteApi().inspectContainer(cloneTemplate.getSourceNodeId());
    CommitOptions options = CommitOptions.Builder.containerId(container.getId()).tag(cloneTemplate.getName());
    org.jclouds.docker.domain.Image dockerImage = api.getRemoteApi().commit(options);

    dockerImage = org.jclouds.docker.domain.Image.builder().fromImage(dockerImage)
            .repoTags(ImmutableList.of(cloneTemplate.getName() + ":latest")).build();

    logger.info(">> Registered new image %s, waiting for it to become available.", dockerImage.getId());
    final AtomicReference<Image> image = Atomics.newReference(new ImageToImage().apply(dockerImage));
    return userExecutor.submit(new Callable<Image>() {
        @Override//from w  w w .  j  a  v a  2  s .  co  m
        public Image call() throws Exception {
            if (imageAvailablePredicate.apply(image))
                return image.get();
            throw new UncheckedTimeoutException("Image was not created within the time limit: " + image.get());
        }
    });
}

From source file:org.jclouds.openstack.nova.v2_0.compute.extensions.NovaImageExtension.java

@Override
public ListenableFuture<Image> createImage(ImageTemplate template) {
    checkState(template instanceof CloneImageTemplate,
            " openstack-nova only supports creating images through cloning.");
    CloneImageTemplate cloneTemplate = (CloneImageTemplate) template;
    ZoneAndId sourceImageZoneAndId = ZoneAndId.fromSlashEncoded(cloneTemplate.getSourceNodeId());

    String newImageId = novaApi.getServerApiForZone(sourceImageZoneAndId.getZone())
            .createImageFromServer(cloneTemplate.getName(), sourceImageZoneAndId.getId());

    final ZoneAndId targetImageZoneAndId = ZoneAndId.fromZoneAndId(sourceImageZoneAndId.getZone(), newImageId);

    logger.info(">> Registered new Image %s, waiting for it to become available.", newImageId);

    final AtomicReference<Image> image = Atomics.newReference(
            new ImageBuilder().location(find(locations.get(), idEquals(targetImageZoneAndId.getZone())))
                    .id(targetImageZoneAndId.slashEncode()).providerId(targetImageZoneAndId.getId())
                    .description(cloneTemplate.getName())
                    .operatingSystem(OperatingSystem.builder().description(cloneTemplate.getName()).build())
                    .status(Image.Status.PENDING).build());

    return userExecutor.submit(new Callable<Image>() {
        @Override// ww  w.  j a v a 2  s  .  c  o m
        public Image call() throws Exception {
            if (imageAvailablePredicate.apply(image))
                return image.get();
            // TODO: get rid of the expectation that the image will be available, as it is very brittle
            throw new UncheckedTimeoutException("Image was not created within the time limit: " + image.get());
        }
    });
}