Merge pull request #985 from andrewgaul/checkstyle-atomics-newreference

Enforce use of Atomics.newReference via Checkstyle
This commit is contained in:
Adrian Cole 2012-11-12 12:36:11 -08:00
commit 160f871eef
25 changed files with 79 additions and 47 deletions

View File

@ -55,6 +55,7 @@ import com.google.common.base.Objects;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.util.concurrent.Atomics;
import com.google.inject.Provides; import com.google.inject.Provides;
/** /**
@ -77,7 +78,7 @@ public class DeltacloudRestClientModule extends RestClientModule<DeltacloudClien
bind(HttpRetryHandler.class).annotatedWith(Redirection.class).to(DeltacloudRedirectionRetryHandler.class); bind(HttpRetryHandler.class).annotatedWith(Redirection.class).to(DeltacloudRedirectionRetryHandler.class);
} }
protected AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); protected AtomicReference<AuthorizationException> authException = Atomics.newReference();
@Provides @Provides
@Singleton @Singleton

View File

@ -47,6 +47,7 @@ import com.google.common.base.Throwables;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache; import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.Atomics;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Key; import com.google.inject.Key;
import com.google.inject.Provides; import com.google.inject.Provides;
@ -103,7 +104,7 @@ public class EC2ComputeServiceContextModule extends BaseComputeServiceContextMod
protected Supplier<CacheLoader<RegionAndName, Image>> provideRegionAndNameToImageSupplierCacheLoader( protected Supplier<CacheLoader<RegionAndName, Image>> provideRegionAndNameToImageSupplierCacheLoader(
final RegionAndIdToImage delegate) { final RegionAndIdToImage delegate) {
return Suppliers.<CacheLoader<RegionAndName, Image>>ofInstance(new CacheLoader<RegionAndName, Image>() { return Suppliers.<CacheLoader<RegionAndName, Image>>ofInstance(new CacheLoader<RegionAndName, Image>() {
private final AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); private final AtomicReference<AuthorizationException> authException = Atomics.newReference();
@Override @Override
public Image load(final RegionAndName key) throws Exception { public Image load(final RegionAndName key) throws Exception {

View File

@ -46,6 +46,7 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.util.concurrent.Atomics;
/** /**
* @author Adrian Cole * @author Adrian Cole
@ -82,7 +83,7 @@ public class PasswordCredentialsFromWindowsInstance implements Function<RunningI
// 15 minutes. // 15 minutes.
// So we create a predicate that tests if the password is ready, and wrap it in a retryable // So we create a predicate that tests if the password is ready, and wrap it in a retryable
// predicate. // predicate.
final AtomicReference<PasswordData> data = new AtomicReference<PasswordData>(); final AtomicReference<PasswordData> data = Atomics.newReference();
Predicate<String> passwordReady = new Predicate<String>() { Predicate<String> passwordReady = new Predicate<String>() {
@Override @Override
public boolean apply(@Nullable String s) { public boolean apply(@Nullable String s) {

View File

@ -63,6 +63,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSet.Builder; import com.google.common.collect.ImmutableSet.Builder;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import com.google.common.util.concurrent.Atomics;
/** /**
* creates futures that correlate to * creates futures that correlate to
@ -200,7 +201,7 @@ public class EC2CreateNodesInGroupThenAddToSet implements CreateNodesInGroupThen
// block until instance is running // block until instance is running
logger.debug(">> awaiting status running instance(%s)", coordinates); logger.debug(">> awaiting status running instance(%s)", coordinates);
AtomicReference<NodeMetadata> node = new AtomicReference<NodeMetadata>(runningInstanceToNodeMetadata.apply(startedInstance)); AtomicReference<NodeMetadata> node = Atomics.newReference(runningInstanceToNodeMetadata.apply(startedInstance));
nodeRunning.apply(node); nodeRunning.apply(node);
logger.trace("<< running instance(%s)", coordinates); logger.trace("<< running instance(%s)", coordinates);
logger.debug(">> associating elastic IP %s to instance %s", ip, coordinates); logger.debug(">> associating elastic IP %s to instance %s", ip, coordinates);

View File

@ -33,6 +33,7 @@ import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneSecurityGroupNameAn
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
import com.google.common.util.concurrent.Atomics;
/** /**
* *
@ -54,7 +55,7 @@ public class FindSecurityGroupOrCreate extends CacheLoader<ZoneAndName, Security
@Override @Override
public SecurityGroupInZone load(ZoneAndName in) { public SecurityGroupInZone load(ZoneAndName in) {
AtomicReference<ZoneAndName> securityGroupInZoneRef = new AtomicReference<ZoneAndName>(checkNotNull(in, AtomicReference<ZoneAndName> securityGroupInZoneRef = Atomics.newReference(checkNotNull(in,
"zoneSecurityGroupNameAndPorts")); "zoneSecurityGroupNameAndPorts"));
if (returnSecurityGroupExistsInZone.apply(securityGroupInZoneRef)) { if (returnSecurityGroupExistsInZone.apply(securityGroupInZoneRef)) {
return returnExistingSecurityGroup(securityGroupInZoneRef); return returnExistingSecurityGroup(securityGroupInZoneRef);

View File

@ -39,6 +39,7 @@ import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.Atomics;
/** /**
* Tests the compute service abstraction of the nova api. * Tests the compute service abstraction of the nova api.
@ -77,7 +78,7 @@ public class AllocateAndAddFloatingIpToNodeExpectTest extends BaseNovaComputeSer
.put(addFloatingIPRequest, addFloatingIPResponse).build()).getContext().utils().injector() .put(addFloatingIPRequest, addFloatingIPResponse).build()).getContext().utils().injector()
.getInstance(AllocateAndAddFloatingIpToNode.class); .getInstance(AllocateAndAddFloatingIpToNode.class);
AtomicReference<NodeMetadata> nodeRef = new AtomicReference<NodeMetadata>(node); AtomicReference<NodeMetadata> nodeRef = Atomics.newReference(node);
fn.apply(nodeRef); fn.apply(nodeRef);
NodeMetadata node1 = nodeRef.get(); NodeMetadata node1 = nodeRef.get();
assertNotNull(node1); assertNotNull(node1);
@ -124,7 +125,7 @@ public class AllocateAndAddFloatingIpToNodeExpectTest extends BaseNovaComputeSer
listResponseForUnassigned).build()).getContext().utils().injector() listResponseForUnassigned).build()).getContext().utils().injector()
.getInstance(AllocateAndAddFloatingIpToNode.class); .getInstance(AllocateAndAddFloatingIpToNode.class);
AtomicReference<NodeMetadata> nodeRef = new AtomicReference<NodeMetadata>(node); AtomicReference<NodeMetadata> nodeRef = Atomics.newReference(node);
fn.apply(nodeRef); fn.apply(nodeRef);
NodeMetadata node1 = nodeRef.get(); NodeMetadata node1 = nodeRef.get();
assertNotNull(node1); assertNotNull(node1);

View File

@ -37,6 +37,7 @@ import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.util.concurrent.Atomics;
/** /**
* *
@ -61,7 +62,7 @@ public class FindSecurityGroupWithNameAndReturnTrueExpectTest extends BaseNovaAp
FindSecurityGroupWithNameAndReturnTrue predicate = new FindSecurityGroupWithNameAndReturnTrue( FindSecurityGroupWithNameAndReturnTrue predicate = new FindSecurityGroupWithNameAndReturnTrue(
apiWhenSecurityGroupsExist); apiWhenSecurityGroupsExist);
AtomicReference<ZoneAndName> securityGroupInZoneRef = new AtomicReference<ZoneAndName>(ZoneAndName AtomicReference<ZoneAndName> securityGroupInZoneRef = Atomics.newReference(ZoneAndName
.fromZoneAndName("az-1.region-a.geo-1", "name1")); .fromZoneAndName("az-1.region-a.geo-1", "name1"));
// we can find it // we can find it
@ -91,7 +92,7 @@ public class FindSecurityGroupWithNameAndReturnTrueExpectTest extends BaseNovaAp
ZoneAndName zoneAndGroup = ZoneAndName.fromZoneAndName("az-1.region-a.geo-1", "name2"); ZoneAndName zoneAndGroup = ZoneAndName.fromZoneAndName("az-1.region-a.geo-1", "name2");
AtomicReference<ZoneAndName> securityGroupInZoneRef = new AtomicReference<ZoneAndName>(zoneAndGroup); AtomicReference<ZoneAndName> securityGroupInZoneRef = Atomics.newReference(zoneAndGroup);
// we cannot find it // we cannot find it
assertFalse(predicate.apply(securityGroupInZoneRef)); assertFalse(predicate.apply(securityGroupInZoneRef));

View File

@ -42,6 +42,7 @@ import com.google.common.base.Splitter;
import com.google.common.collect.FluentIterable; import com.google.common.collect.FluentIterable;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import com.google.common.util.concurrent.Atomics;
import com.google.common.util.concurrent.Uninterruptibles; import com.google.common.util.concurrent.Uninterruptibles;
/** /**
@ -81,7 +82,7 @@ public class BaseSQSApiLiveTest extends BaseContextLiveTest<RestContext<SQSApi,
} }
protected String assertPolicyPresent(final URI queue) { protected String assertPolicyPresent(final URI queue) {
final AtomicReference<String> policy = new AtomicReference<String>(); final AtomicReference<String> policy = Atomics.newReference();
assertEventually(new Runnable() { assertEventually(new Runnable() {
public void run() { public void run() {
String policyForAuthorizationByAccount = api().getQueueApi().getAttribute(queue, "Policy"); String policyForAuthorizationByAccount = api().getQueueApi().getAttribute(queue, "Policy");

View File

@ -105,6 +105,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import com.google.common.util.concurrent.Atomics;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
/** /**
@ -294,7 +295,7 @@ public class BaseComputeService implements ComputeService {
protected NodeMetadata doDestroyNode(final String id) { protected NodeMetadata doDestroyNode(final String id) {
checkNotNull(id, "id"); checkNotNull(id, "id");
logger.debug(">> destroying node(%s)", id); logger.debug(">> destroying node(%s)", id);
final AtomicReference<NodeMetadata> node = new AtomicReference<NodeMetadata>(); final AtomicReference<NodeMetadata> node = Atomics.newReference();
RetryablePredicate<String> tester = new RetryablePredicate<String>(new Predicate<String>() { RetryablePredicate<String> tester = new RetryablePredicate<String>(new Predicate<String>() {
@Override @Override
@ -419,7 +420,7 @@ public class BaseComputeService implements ComputeService {
public void rebootNode(String id) { public void rebootNode(String id) {
checkNotNull(id, "id"); checkNotNull(id, "id");
logger.debug(">> rebooting node(%s)", id); logger.debug(">> rebooting node(%s)", id);
AtomicReference<NodeMetadata> node = new AtomicReference<NodeMetadata>(rebootNodeStrategy.rebootNode(id)); AtomicReference<NodeMetadata> node = Atomics.newReference(rebootNodeStrategy.rebootNode(id));
boolean successful = nodeRunning.apply(node); boolean successful = nodeRunning.apply(node);
logger.debug("<< rebooted node(%s) success(%s)", id, successful); logger.debug("<< rebooted node(%s) success(%s)", id, successful);
} }
@ -450,7 +451,7 @@ public class BaseComputeService implements ComputeService {
public void resumeNode(String id) { public void resumeNode(String id) {
checkNotNull(id, "id"); checkNotNull(id, "id");
logger.debug(">> resuming node(%s)", id); logger.debug(">> resuming node(%s)", id);
AtomicReference<NodeMetadata> node = new AtomicReference<NodeMetadata>(resumeNodeStrategy.resumeNode(id)); AtomicReference<NodeMetadata> node = Atomics.newReference(resumeNodeStrategy.resumeNode(id));
boolean successful = nodeRunning.apply(node); boolean successful = nodeRunning.apply(node);
logger.debug("<< resumed node(%s) success(%s)", id, successful); logger.debug("<< resumed node(%s) success(%s)", id, successful);
} }
@ -481,7 +482,7 @@ public class BaseComputeService implements ComputeService {
public void suspendNode(String id) { public void suspendNode(String id) {
checkNotNull(id, "id"); checkNotNull(id, "id");
logger.debug(">> suspending node(%s)", id); logger.debug(">> suspending node(%s)", id);
AtomicReference<NodeMetadata> node = new AtomicReference<NodeMetadata>(suspendNodeStrategy.suspendNode(id)); AtomicReference<NodeMetadata> node = Atomics.newReference(suspendNodeStrategy.suspendNode(id));
boolean successful = nodeSuspended.apply(node); boolean successful = nodeSuspended.apply(node);
logger.debug("<< suspended node(%s) success(%s)", id, successful); logger.debug("<< suspended node(%s) success(%s)", id, successful);
} }

View File

@ -30,10 +30,12 @@ import com.google.common.base.Predicate;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.net.HostAndPort; import com.google.common.net.HostAndPort;
import com.google.common.util.concurrent.Atomics;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.MoreExecutors;
import com.google.inject.Inject; import com.google.inject.Inject;
public class ConcurrentOpenSocketFinder implements OpenSocketFinder { public class ConcurrentOpenSocketFinder implements OpenSocketFinder {
@Resource @Resource
@ -62,7 +64,7 @@ public class ConcurrentOpenSocketFinder implements OpenSocketFinder {
long period = timeUnits.convert(1, TimeUnit.SECONDS); long period = timeUnits.convert(1, TimeUnit.SECONDS);
// For storing the result; needed because predicate will just tell us true/false // For storing the result; needed because predicate will just tell us true/false
final AtomicReference<HostAndPort> result = new AtomicReference<HostAndPort>(); final AtomicReference<HostAndPort> result = Atomics.newReference();
Predicate<Collection<HostAndPort>> concurrentOpenSocketFinder = new Predicate<Collection<HostAndPort>>() { Predicate<Collection<HostAndPort>> concurrentOpenSocketFinder = new Predicate<Collection<HostAndPort>>() {
@ -109,7 +111,7 @@ public class ConcurrentOpenSocketFinder implements OpenSocketFinder {
* @throws InterruptedException * @throws InterruptedException
*/ */
private HostAndPort findOpenSocket(final Collection<HostAndPort> sockets) { private HostAndPort findOpenSocket(final Collection<HostAndPort> sockets) {
final AtomicReference<HostAndPort> result = new AtomicReference<HostAndPort>(); final AtomicReference<HostAndPort> result = Atomics.newReference();
final CountDownLatch latch = new CountDownLatch(1); final CountDownLatch latch = new CountDownLatch(1);
final AtomicInteger completeCount = new AtomicInteger(); final AtomicInteger completeCount = new AtomicInteger();

View File

@ -38,6 +38,7 @@ import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.util.concurrent.Atomics;
/** /**
* @author Adrian Cole * @author Adrian Cole
@ -60,7 +61,7 @@ public class PollNodeRunningTest {
}; };
AtomicReference<NodeMetadata> atomicNode = new AtomicReference<NodeMetadata>(pendingNode); AtomicReference<NodeMetadata> atomicNode = Atomics.newReference(pendingNode);
try { try {
new PollNodeRunning(nodeRunning).apply(atomicNode); new PollNodeRunning(nodeRunning).apply(atomicNode);
} finally { } finally {
@ -84,7 +85,7 @@ public class PollNodeRunningTest {
}; };
AtomicReference<NodeMetadata> atomicNode = new AtomicReference<NodeMetadata>(pendingNode); AtomicReference<NodeMetadata> atomicNode = Atomics.newReference(pendingNode);
try { try {
new PollNodeRunning(nodeRunning).apply(atomicNode); new PollNodeRunning(nodeRunning).apply(atomicNode);
} finally { } finally {
@ -107,7 +108,7 @@ public class PollNodeRunningTest {
}; };
AtomicReference<NodeMetadata> atomicNode = new AtomicReference<NodeMetadata>(pendingNode); AtomicReference<NodeMetadata> atomicNode = Atomics.newReference(pendingNode);
try { try {
new PollNodeRunning(nodeRunning).apply(atomicNode); new PollNodeRunning(nodeRunning).apply(atomicNode);
} finally { } finally {
@ -131,7 +132,7 @@ public class PollNodeRunningTest {
return super.nodeRunning(statusRunning, timeouts, period); return super.nodeRunning(statusRunning, timeouts, period);
} }
}.nodeRunning(nodeRunning, timeouts, period); }.nodeRunning(nodeRunning, timeouts, period);
AtomicReference<NodeMetadata> atomicNode = new AtomicReference<NodeMetadata>(pendingNode); AtomicReference<NodeMetadata> atomicNode = Atomics.newReference(pendingNode);
// Simulate transient error: first call returns null; subsequent calls // Simulate transient error: first call returns null; subsequent calls
// return the running node // return the running node

View File

@ -25,6 +25,8 @@ import static org.easymock.EasyMock.verify;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import com.google.common.util.concurrent.Atomics;
import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.NodeMetadataBuilder; import org.jclouds.compute.domain.NodeMetadataBuilder;
import org.jclouds.compute.domain.NodeMetadata.Status; import org.jclouds.compute.domain.NodeMetadata.Status;
@ -53,7 +55,7 @@ public class AtomicNodePredicatesTest {
replay(computeService); replay(computeService);
AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService); AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService);
AtomicReference<NodeMetadata> reference = new AtomicReference<NodeMetadata>(running); AtomicReference<NodeMetadata> reference = Atomics.newReference(running);
Assert.assertTrue(nodeRunning.apply(reference)); Assert.assertTrue(nodeRunning.apply(reference));
Assert.assertEquals(reference.get(), running); Assert.assertEquals(reference.get(), running);
@ -71,7 +73,7 @@ public class AtomicNodePredicatesTest {
replay(computeService); replay(computeService);
AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService); AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService);
AtomicReference<NodeMetadata> reference = new AtomicReference<NodeMetadata>(pending); AtomicReference<NodeMetadata> reference = Atomics.newReference(pending);
Assert.assertFalse(nodeRunning.apply(reference)); Assert.assertFalse(nodeRunning.apply(reference));
Assert.assertEquals(reference.get(), pending); Assert.assertEquals(reference.get(), pending);
@ -95,7 +97,7 @@ public class AtomicNodePredicatesTest {
replay(computeService); replay(computeService);
AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService); AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService);
AtomicReference<NodeMetadata> reference = new AtomicReference<NodeMetadata>(newNode); AtomicReference<NodeMetadata> reference = Atomics.newReference(newNode);
Assert.assertFalse(nodeRunning.apply(reference)); Assert.assertFalse(nodeRunning.apply(reference));
Assert.assertEquals(reference.get(), pending); Assert.assertEquals(reference.get(), pending);
@ -113,7 +115,7 @@ public class AtomicNodePredicatesTest {
replay(computeService); replay(computeService);
AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService); AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService);
AtomicReference<NodeMetadata> reference = new AtomicReference<NodeMetadata>(pending); AtomicReference<NodeMetadata> reference = Atomics.newReference(pending);
Assert.assertTrue(nodeRunning.apply(reference)); Assert.assertTrue(nodeRunning.apply(reference));
Assert.assertEquals(reference.get(), running); Assert.assertEquals(reference.get(), running);
@ -139,7 +141,7 @@ public class AtomicNodePredicatesTest {
replay(computeService); replay(computeService);
AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService); AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService);
AtomicReference<NodeMetadata> reference = new AtomicReference<NodeMetadata>(node); AtomicReference<NodeMetadata> reference = Atomics.newReference(node);
Assert.assertTrue(nodeRunning.apply(reference)); Assert.assertTrue(nodeRunning.apply(reference));
Assert.assertEquals(reference.get(), node); Assert.assertEquals(reference.get(), node);
} }
@ -152,7 +154,7 @@ public class AtomicNodePredicatesTest {
replay(computeService); replay(computeService);
AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService); AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService);
AtomicReference<NodeMetadata> reference = new AtomicReference<NodeMetadata>(node); AtomicReference<NodeMetadata> reference = Atomics.newReference(node);
nodeRunning.apply(reference); nodeRunning.apply(reference);
Assert.assertEquals(reference.get(), node); Assert.assertEquals(reference.get(), node);
} }
@ -165,7 +167,7 @@ public class AtomicNodePredicatesTest {
replay(computeService); replay(computeService);
AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService); AtomicNodeRunning nodeRunning = new AtomicNodeRunning(computeService);
AtomicReference<NodeMetadata> reference = new AtomicReference<NodeMetadata>(node); AtomicReference<NodeMetadata> reference = Atomics.newReference(node);
nodeRunning.apply(reference); nodeRunning.apply(reference);
Assert.assertEquals(reference.get(), node); Assert.assertEquals(reference.get(), node);
} }

View File

@ -47,6 +47,7 @@ import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.google.common.util.concurrent.Atomics;
/** /**
* @author Adrian Cole * @author Adrian Cole
@ -81,7 +82,7 @@ public class CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMapTest {
// replay mocks // replay mocks
replay(initScriptRunnerFactory, openSocketFinder); replay(initScriptRunnerFactory, openSocketFinder);
// run // run
AtomicReference<NodeMetadata> atomicNode = new AtomicReference<NodeMetadata>(pendingNode); AtomicReference<NodeMetadata> atomicNode = Atomics.newReference(pendingNode);
new CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap(pollNodeRunning, openSocketFinder, new CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap(pollNodeRunning, openSocketFinder,
templateOptionsToStatement, initScriptRunnerFactory, options, atomicNode, goodNodes, badNodes, templateOptionsToStatement, initScriptRunnerFactory, options, atomicNode, goodNodes, badNodes,
customizationResponses).apply(atomicNode); customizationResponses).apply(atomicNode);
@ -126,7 +127,7 @@ public class CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMapTest {
replay(initScriptRunnerFactory, openSocketFinder); replay(initScriptRunnerFactory, openSocketFinder);
// run // run
AtomicReference<NodeMetadata> atomicNode = new AtomicReference<NodeMetadata>(pendingNode); AtomicReference<NodeMetadata> atomicNode = Atomics.newReference(pendingNode);
new CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap(pollNodeRunning, openSocketFinder, new CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap(pollNodeRunning, openSocketFinder,
templateOptionsToStatement, initScriptRunnerFactory, options, atomicNode, goodNodes, badNodes, templateOptionsToStatement, initScriptRunnerFactory, options, atomicNode, goodNodes, badNodes,
customizationResponses).apply(atomicNode); customizationResponses).apply(atomicNode);

View File

@ -38,6 +38,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.io.Closeables; import com.google.common.io.Closeables;
import com.google.common.util.concurrent.Atomics;
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonToken;
import com.google.inject.TypeLiteral; import com.google.inject.TypeLiteral;
@ -69,7 +70,7 @@ public class ParseFirstJsonValueNamed<T> implements Function<HttpResponse, T> {
reader = new JsonReader(new InputStreamReader(arg0.getPayload().getInput())); reader = new JsonReader(new InputStreamReader(arg0.getPayload().getInput()));
// in case keys are not in quotes // in case keys are not in quotes
reader.setLenient(true); reader.setLenient(true);
AtomicReference<String> name = new AtomicReference<String>(); AtomicReference<String> name = Atomics.newReference();
JsonToken token = reader.peek(); JsonToken token = reader.peek();
for (; token != JsonToken.END_DOCUMENT && nnn(this.name, reader, token, name); token = skipAndPeek(token, for (; token != JsonToken.END_DOCUMENT && nnn(this.name, reader, token, name); token = skipAndPeek(token,
reader)) { reader)) {

View File

@ -28,6 +28,7 @@ import javax.annotation.PreDestroy;
import javax.annotation.Resource; import javax.annotation.Resource;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.util.concurrent.Atomics;
import org.jclouds.logging.Logger; import org.jclouds.logging.Logger;
@ -44,7 +45,7 @@ public abstract class BaseLifeCycle implements Runnable, LifeCycle {
protected final List<LifeCycle> dependencies; protected final List<LifeCycle> dependencies;
protected final Object statusLock; protected final Object statusLock;
protected volatile Status status; protected volatile Status status;
protected AtomicReference<Exception> exception = new AtomicReference<Exception>(); protected AtomicReference<Exception> exception = Atomics.newReference();
public BaseLifeCycle(ExecutorService executor, LifeCycle... dependencies) { public BaseLifeCycle(ExecutorService executor, LifeCycle... dependencies) {
this.executorService = executor; this.executorService = executor;

View File

@ -61,6 +61,7 @@ import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache; import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.util.concurrent.Atomics;
import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Injector; import com.google.inject.Injector;
@ -78,7 +79,7 @@ public class RestModule extends AbstractModule {
public static final TypeLiteral<Supplier<URI>> URI_SUPPLIER_TYPE = new TypeLiteral<Supplier<URI>>() { public static final TypeLiteral<Supplier<URI>> URI_SUPPLIER_TYPE = new TypeLiteral<Supplier<URI>>() {
}; };
protected final Map<Class<?>, Class<?>> sync2Async; protected final Map<Class<?>, Class<?>> sync2Async;
protected final AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); protected final AtomicReference<AuthorizationException> authException = Atomics.newReference();
public RestModule() { public RestModule() {
this(ImmutableMap.<Class<?>, Class<?>> of()); this(ImmutableMap.<Class<?>, Class<?>> of());

View File

@ -34,6 +34,7 @@ import org.testng.annotations.Test;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.util.concurrent.Atomics;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
@ -173,7 +174,7 @@ public class GsonExperimentsTest {
} }
protected <T> T parseThingFromReaderOrNull(String toFind, JsonReader reader, Type type) throws IOException { protected <T> T parseThingFromReaderOrNull(String toFind, JsonReader reader, Type type) throws IOException {
AtomicReference<String> name = new AtomicReference<String>(); AtomicReference<String> name = Atomics.newReference();
JsonToken token = reader.peek(); JsonToken token = reader.peek();
for (; token != JsonToken.END_DOCUMENT && nnn(toFind, reader, token, name); token = skipAndPeek(token, reader)) for (; token != JsonToken.END_DOCUMENT && nnn(toFind, reader, token, name); token = skipAndPeek(token, reader))
; ;

View File

@ -41,6 +41,7 @@ import org.testng.annotations.Test;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.base.Suppliers; import com.google.common.base.Suppliers;
import com.google.common.util.concurrent.Atomics;
/** /**
* *
@ -51,7 +52,7 @@ import com.google.common.base.Suppliers;
public class MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplierTest { public class MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplierTest {
@Test @Test
public void testLoaderNormal() { public void testLoaderNormal() {
AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); AtomicReference<AuthorizationException> authException = Atomics.newReference();
assertEquals(new SetAndThrowAuthorizationExceptionSupplierBackedLoader<String>(Suppliers.ofInstance("foo"), assertEquals(new SetAndThrowAuthorizationExceptionSupplierBackedLoader<String>(Suppliers.ofInstance("foo"),
authException).load("KEY"), "foo"); authException).load("KEY"), "foo");
assertEquals(authException.get(), null); assertEquals(authException.get(), null);
@ -59,7 +60,7 @@ public class MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplierTest {
@Test(expectedExceptions = AuthorizationException.class) @Test(expectedExceptions = AuthorizationException.class)
public void testLoaderThrowsAuthorizationExceptionAndAlsoSetsExceptionType() { public void testLoaderThrowsAuthorizationExceptionAndAlsoSetsExceptionType() {
AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); AtomicReference<AuthorizationException> authException = Atomics.newReference();
try { try {
new SetAndThrowAuthorizationExceptionSupplierBackedLoader<String>(new Supplier<String>() { new SetAndThrowAuthorizationExceptionSupplierBackedLoader<String>(new Supplier<String>() {
@ -75,7 +76,7 @@ public class MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplierTest {
@Test(expectedExceptions = AuthorizationException.class) @Test(expectedExceptions = AuthorizationException.class)
public void testLoaderThrowsAuthorizationExceptionAndAlsoSetsExceptionTypeWhenNested() { public void testLoaderThrowsAuthorizationExceptionAndAlsoSetsExceptionTypeWhenNested() {
AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); AtomicReference<AuthorizationException> authException = Atomics.newReference();
try { try {
new SetAndThrowAuthorizationExceptionSupplierBackedLoader<String>(new Supplier<String>() { new SetAndThrowAuthorizationExceptionSupplierBackedLoader<String>(new Supplier<String>() {
@ -91,7 +92,7 @@ public class MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplierTest {
@Test(expectedExceptions = RuntimeException.class) @Test(expectedExceptions = RuntimeException.class)
public void testLoaderThrowsOriginalExceptionAndAlsoSetsExceptionTypeWhenNestedAndNotAuthorizationException() { public void testLoaderThrowsOriginalExceptionAndAlsoSetsExceptionTypeWhenNestedAndNotAuthorizationException() {
AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); AtomicReference<AuthorizationException> authException = Atomics.newReference();
try { try {
new SetAndThrowAuthorizationExceptionSupplierBackedLoader<String>(new Supplier<String>() { new SetAndThrowAuthorizationExceptionSupplierBackedLoader<String>(new Supplier<String>() {
@ -214,7 +215,7 @@ public class MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplierTest {
private void supplierThreadSafe(Function<Supplier<Boolean>, Supplier<Boolean>> memoizer) throws Throwable { private void supplierThreadSafe(Function<Supplier<Boolean>, Supplier<Boolean>> memoizer) throws Throwable {
final AtomicInteger count = new AtomicInteger(0); final AtomicInteger count = new AtomicInteger(0);
final AtomicReference<Throwable> thrown = new AtomicReference<Throwable>(null); final AtomicReference<Throwable> thrown = Atomics.newReference(null);
final int numThreads = 3; final int numThreads = 3;
final Thread[] threads = new Thread[numThreads]; final Thread[] threads = new Thread[numThreads];
final long timeout = TimeUnit.SECONDS.toNanos(60); final long timeout = TimeUnit.SECONDS.toNanos(60);

View File

@ -28,6 +28,7 @@ import org.testng.annotations.Test;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.base.Suppliers; import com.google.common.base.Suppliers;
import com.google.common.util.concurrent.Atomics;
/** /**
* *
@ -37,7 +38,7 @@ import com.google.common.base.Suppliers;
public class SetAndThrowAuthorizationExceptionSupplierTest { public class SetAndThrowAuthorizationExceptionSupplierTest {
@Test @Test
public void testNormal() { public void testNormal() {
AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); AtomicReference<AuthorizationException> authException = Atomics.newReference();
assertEquals( assertEquals(
new SetAndThrowAuthorizationExceptionSupplier<String>(Suppliers.ofInstance("foo"), authException).get(), new SetAndThrowAuthorizationExceptionSupplier<String>(Suppliers.ofInstance("foo"), authException).get(),
"foo"); "foo");
@ -46,7 +47,7 @@ public class SetAndThrowAuthorizationExceptionSupplierTest {
@Test(expectedExceptions = AuthorizationException.class) @Test(expectedExceptions = AuthorizationException.class)
public void testThrowsAuthorizationExceptionAndAlsoSetsExceptionType() { public void testThrowsAuthorizationExceptionAndAlsoSetsExceptionType() {
AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); AtomicReference<AuthorizationException> authException = Atomics.newReference();
try { try {
new SetAndThrowAuthorizationExceptionSupplier<String>(new Supplier<String>() { new SetAndThrowAuthorizationExceptionSupplier<String>(new Supplier<String>() {
@ -62,7 +63,7 @@ public class SetAndThrowAuthorizationExceptionSupplierTest {
@Test(expectedExceptions = AuthorizationException.class) @Test(expectedExceptions = AuthorizationException.class)
public void testThrowsAuthorizationExceptionAndAlsoSetsExceptionTypeWhenNested() { public void testThrowsAuthorizationExceptionAndAlsoSetsExceptionTypeWhenNested() {
AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); AtomicReference<AuthorizationException> authException = Atomics.newReference();
try { try {
new SetAndThrowAuthorizationExceptionSupplier<String>(new Supplier<String>() { new SetAndThrowAuthorizationExceptionSupplier<String>(new Supplier<String>() {
@ -78,7 +79,7 @@ public class SetAndThrowAuthorizationExceptionSupplierTest {
@Test(expectedExceptions = RuntimeException.class) @Test(expectedExceptions = RuntimeException.class)
public void testThrowsOriginalExceptionAndAlsoSetsExceptionTypeWhenNestedAndNotAuthorizationException() { public void testThrowsOriginalExceptionAndAlsoSetsExceptionTypeWhenNestedAndNotAuthorizationException() {
AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); AtomicReference<AuthorizationException> authException = Atomics.newReference();
try { try {
new SetAndThrowAuthorizationExceptionSupplier<String>(new Supplier<String>() { new SetAndThrowAuthorizationExceptionSupplier<String>(new Supplier<String>() {

View File

@ -48,6 +48,7 @@ import org.jclouds.predicates.RetryablePredicate;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.util.concurrent.Atomics;
import com.google.inject.Inject; import com.google.inject.Inject;
/** /**
@ -136,7 +137,7 @@ public class BaseLoadBalancerService implements LoadBalancerService {
public void destroyLoadBalancer(final String id) { public void destroyLoadBalancer(final String id) {
checkNotNull(id, "id"); checkNotNull(id, "id");
logger.debug(">> destroying load balancer(%s)", id); logger.debug(">> destroying load balancer(%s)", id);
final AtomicReference<LoadBalancerMetadata> loadBalancer = new AtomicReference<LoadBalancerMetadata>(); final AtomicReference<LoadBalancerMetadata> loadBalancer = Atomics.newReference();
RetryablePredicate<String> tester = new RetryablePredicate<String>(new Predicate<String>() { RetryablePredicate<String> tester = new RetryablePredicate<String>(new Predicate<String>() {
@Override @Override

View File

@ -68,6 +68,7 @@ import com.google.common.base.Throwables;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache; import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.Atomics;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Key; import com.google.inject.Key;
import com.google.inject.Provides; import com.google.inject.Provides;
@ -132,7 +133,7 @@ public class AWSEC2ComputeServiceContextModule extends BaseComputeServiceContext
protected Supplier<CacheLoader<RegionAndName, Image>> provideRegionAndNameToImageSupplierCacheLoader( protected Supplier<CacheLoader<RegionAndName, Image>> provideRegionAndNameToImageSupplierCacheLoader(
final RegionAndIdToImage delegate) { final RegionAndIdToImage delegate) {
return Suppliers.<CacheLoader<RegionAndName, Image>>ofInstance(new CacheLoader<RegionAndName, Image>() { return Suppliers.<CacheLoader<RegionAndName, Image>>ofInstance(new CacheLoader<RegionAndName, Image>() {
private final AtomicReference<AuthorizationException> authException = new AtomicReference<AuthorizationException>(); private final AtomicReference<AuthorizationException> authException = Atomics.newReference();
@Override @Override
public Image load(final RegionAndName key) throws Exception { public Image load(final RegionAndName key) throws Exception {

View File

@ -56,6 +56,10 @@
<property name="format" value="=\s*new TreeSet&lt;[^&gt;]"/> <property name="format" value="=\s*new TreeSet&lt;[^&gt;]"/>
<property name="message" value="Prefer com.google.common.collect.Sets"/> <property name="message" value="Prefer com.google.common.collect.Sets"/>
</module> </module>
<module name="RegexpMultiline">
<property name="format" value="=\s*new AtomicReference&lt;[^&gt;]"/>
<property name="message" value="Prefer com.google.common.util.concurrent.Atomics"/>
</module>
<module name="RegexpMultiline"> <module name="RegexpMultiline">
<property name="format" value="new StringBuffer"/> <property name="format" value="new StringBuffer"/>
<property name="message" value="Prefer java.lang.StringBuilder"/> <property name="message" value="Prefer java.lang.StringBuilder"/>

View File

@ -26,6 +26,8 @@ import javax.inject.Provider;
import javax.inject.Singleton; import javax.inject.Singleton;
import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriBuilder;
import com.google.commons.util.concurrent.Atomitcs;
import org.jclouds.http.HttpException; import org.jclouds.http.HttpException;
import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpRequestFilter; import org.jclouds.http.HttpRequestFilter;
@ -82,7 +84,7 @@ public class AddSessionTokenToRequest implements HttpRequestFilter {
public AddSessionTokenToRequest(@SessionToken Provider<String> authTokenProvider, Provider<UriBuilder> builder) { public AddSessionTokenToRequest(@SessionToken Provider<String> authTokenProvider, Provider<UriBuilder> builder) {
this.builder = builder; this.builder = builder;
this.authTokenProvider = authTokenProvider; this.authTokenProvider = authTokenProvider;
authToken = new AtomicReference<String>(); authToken = Atomics.newReference();
} }
@Override @Override

View File

@ -20,12 +20,14 @@ package org.jclouds.scriptbuilder.functionloader;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import com.google.common.util.concurrent.Atomics;
/** /**
* Means to access the current {@link FunctionLoader} instance; * Means to access the current {@link FunctionLoader} instance;
*/ */
public class CurrentFunctionLoader { public class CurrentFunctionLoader {
private static final AtomicReference<FunctionLoader> ref = new AtomicReference<FunctionLoader>( private static final AtomicReference<FunctionLoader> ref = Atomics.<FunctionLoader>newReference(
BasicFunctionLoader.INSTANCE); BasicFunctionLoader.INSTANCE);
public static FunctionLoader get() { public static FunctionLoader get() {

View File

@ -28,6 +28,7 @@ import org.jclouds.scriptbuilder.domain.StatementVisitor;
import org.jclouds.scriptbuilder.statements.login.AdminAccess; import org.jclouds.scriptbuilder.statements.login.AdminAccess;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.util.concurrent.Atomics;
/** /**
* *
@ -40,7 +41,7 @@ public enum CredentialsFromAdminAccess implements Function<Statement, Credential
if (input == null) if (input == null)
return null; return null;
if (input instanceof AcceptsStatementVisitor) { if (input instanceof AcceptsStatementVisitor) {
final AtomicReference<Credentials> credsHolder = new AtomicReference<Credentials>(); final AtomicReference<Credentials> credsHolder = Atomics.newReference();
AcceptsStatementVisitor.class.cast(input).accept(new StatementVisitor() { AcceptsStatementVisitor.class.cast(input).accept(new StatementVisitor() {
@Override @Override