You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whirr.apache.org by to...@apache.org on 2010/08/12 01:59:03 UTC
svn commit: r984618 - in /incubator/whirr/trunk: ./ core/
core/src/main/java/org/apache/whirr/service/
core/src/main/java/org/jclouds/aws/ec2/compute/functions/
core/src/test/resources/ scripts/sun/java/ services/cassandra/
services/cassandra/src/main/...
Author: tomwhite
Date: Wed Aug 11 23:59:02 2010
New Revision: 984618
URL: http://svn.apache.org/viewvc?rev=984618&view=rev
Log:
WHIRR-23. Upgrade to jclouds 1.0-beta-6. Contributed by Adrian Cole.
Added:
incubator/whirr/trunk/core/src/test/resources/log4j.xml (with props)
incubator/whirr/trunk/services/cassandra/src/test/resources/
incubator/whirr/trunk/services/cassandra/src/test/resources/log4j.xml (with props)
incubator/whirr/trunk/services/hadoop/src/test/resources/
incubator/whirr/trunk/services/hadoop/src/test/resources/log4j.xml (with props)
incubator/whirr/trunk/services/zookeeper/src/test/resources/
incubator/whirr/trunk/services/zookeeper/src/test/resources/log4j.xml (with props)
Modified:
incubator/whirr/trunk/CHANGES.txt
incubator/whirr/trunk/core/pom.xml
incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Cluster.java
incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Service.java
incubator/whirr/trunk/core/src/main/java/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java
incubator/whirr/trunk/scripts/sun/java/install
incubator/whirr/trunk/services/cassandra/pom.xml
incubator/whirr/trunk/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java
incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraServiceTest.java
incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java
incubator/whirr/trunk/services/hadoop/pom.xml
incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java
incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java
incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java
incubator/whirr/trunk/services/zookeeper/pom.xml
incubator/whirr/trunk/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java
Modified: incubator/whirr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/CHANGES.txt?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/CHANGES.txt (original)
+++ incubator/whirr/trunk/CHANGES.txt Wed Aug 11 23:59:02 2010
@@ -37,6 +37,8 @@ Trunk (unreleased changes)
WHIRR-53. Adopt the standard Java SPI interface. (tomwhite)
+ WHIRR-23. Upgrade to jclouds 1.0-beta-6. (Adrian Cole via tomwhite)
+
BUG FIXES
WHIRR-50. Cassandra POM should depend on top-level. (tomwhite)
Modified: incubator/whirr/trunk/core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/core/pom.xml?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/core/pom.xml (original)
+++ incubator/whirr/trunk/core/pom.xml Wed Aug 11 23:59:02 2010
@@ -32,27 +32,27 @@
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-aws</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-compute</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-enterprise</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-jsch</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-log4j</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
Modified: incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Cluster.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Cluster.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Cluster.java (original)
+++ incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Cluster.java Wed Aug 11 23:59:02 2010
@@ -17,12 +17,14 @@
*/
package org.apache.whirr.service;
+import static com.google.common.base.Preconditions.checkNotNull;
import java.net.InetAddress;
import java.util.Properties;
import java.util.Set;
import org.apache.whirr.service.ClusterSpec.InstanceTemplate;
+import org.jclouds.domain.Credentials;
/**
* This class represents a real cluster of {@link Instances}.
@@ -36,17 +38,23 @@ public class Cluster {
* @see InstanceTemplate
*/
public static class Instance {
- private Set<String> roles;
- private InetAddress publicAddress;
- private InetAddress privateAddress;
+ private final Credentials loginCredentials;
+ private final Set<String> roles;
+ private final InetAddress publicAddress;
+ private final InetAddress privateAddress;
- public Instance(Set<String> roles, InetAddress publicAddress,
+ public Instance(Credentials loginCredentials, Set<String> roles, InetAddress publicAddress,
InetAddress privateAddress) {
- this.roles = roles;
- this.publicAddress = publicAddress;
- this.privateAddress = privateAddress;
+ this.loginCredentials = checkNotNull(loginCredentials, "loginCredentials");
+ this.roles = checkNotNull(roles, "roles");
+ this.publicAddress = checkNotNull(publicAddress, "publicAddress");
+ this.privateAddress = checkNotNull(privateAddress, "privateAddress");
}
+ public Credentials getLoginCredentials() {
+ return loginCredentials;
+ }
+
public Set<String> getRoles() {
return roles;
}
Modified: incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Service.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Service.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Service.java (original)
+++ incubator/whirr/trunk/core/src/main/java/org/apache/whirr/service/Service.java Wed Aug 11 23:59:02 2010
@@ -18,6 +18,8 @@
package org.apache.whirr.service;
+import static org.jclouds.compute.predicates.NodePredicates.withTag;
+
import java.io.IOException;
import org.jclouds.compute.ComputeService;
@@ -54,7 +56,7 @@ public abstract class Service {
*/
public void destroyCluster(ServiceSpec serviceSpec) throws IOException {
ComputeService computeService = ComputeServiceBuilder.build(serviceSpec);
- computeService.destroyNodesWithTag(serviceSpec.getClusterName());
+ computeService.destroyNodesMatching(withTag(serviceSpec.getClusterName()));
}
}
Modified: incubator/whirr/trunk/core/src/main/java/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/core/src/main/java/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/core/src/main/java/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java (original)
+++ incubator/whirr/trunk/core/src/main/java/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java Wed Aug 11 23:59:02 2010
@@ -21,18 +21,19 @@ package org.jclouds.aws.ec2.compute.func
import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.util.Utils.nullSafeSet;
-import java.net.InetAddress;
import java.net.URI;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Named;
+import javax.inject.Provider;
import javax.inject.Singleton;
-import org.jclouds.aws.ec2.compute.domain.RegionTag;
+import org.jclouds.aws.ec2.compute.domain.RegionAndName;
import org.jclouds.aws.ec2.domain.InstanceState;
import org.jclouds.aws.ec2.domain.KeyPair;
import org.jclouds.aws.ec2.domain.RunningInstance;
@@ -63,21 +64,53 @@ public class RunningInstanceToNodeMetada
@Resource
protected Logger logger = Logger.NULL;
- private static class FindImageForInstance implements Predicate<Image> {
+ @VisibleForTesting
+ static class FindImageForInstance implements Predicate<Image> {
private final Location location;
private final RunningInstance instance;
- private FindImageForInstance(Location location, RunningInstance instance) {
- this.location = location;
- this.instance = instance;
+ FindImageForInstance(Location location, RunningInstance instance) {
+ this.location = checkNotNull(location, "location");
+ this.instance = checkNotNull(instance, "instance");
}
@Override
public boolean apply(Image input) {
- return input.getId().equals(instance.getImageId())
+ return input.getProviderId().equals(instance.getImageId())
&& (input.getLocation() == null || input.getLocation().equals(location) || input
.getLocation().equals(location.getParent()));
}
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((instance.getId() == null) ? 0 : instance.getId().hashCode());
+ result = prime * result + ((location.getId() == null) ? 0 : location.getId().hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ FindImageForInstance other = (FindImageForInstance) obj;
+ if (instance.getId() == null) {
+ if (other.instance.getId() != null)
+ return false;
+ } else if (!instance.getId().equals(other.instance.getId()))
+ return false;
+ if (location.getId() == null) {
+ if (other.location.getId() != null)
+ return false;
+ } else if (!location.getId().equals(other.location.getId()))
+ return false;
+ return true;
+ }
}
private static final Map<InstanceState, NodeState> instanceToNodeState = ImmutableMap
@@ -88,18 +121,20 @@ public class RunningInstanceToNodeMetada
InstanceState.STOPPED, NodeState.SUSPENDED).build();
private final AMIClient amiClient;
- private final Map<RegionTag, KeyPair> credentialsMap;
+ private final Map<RegionAndName, KeyPair> credentialsMap;
private final PopulateDefaultLoginCredentialsForImageStrategy credentialProvider;
- private final Set<? extends Image> images;
+ private final Provider<Set<? extends Image>> images;
private final Set<? extends Location> locations;
private final Function<RunningInstance, Map<String, String>> instanceToStorageMapping;
+ private final ConcurrentMap<RegionAndName, Image> imageMap;
@Inject
RunningInstanceToNodeMetadata(
AMIClient amiClient,
- Map<RegionTag, KeyPair> credentialsMap,
+ Map<RegionAndName, KeyPair> credentialsMap,
PopulateDefaultLoginCredentialsForImageStrategy credentialProvider,
- Set<? extends Image> images,
+ Provider<Set<? extends Image>> images, // to facilitate on-demand refresh of image list
+ ConcurrentMap<RegionAndName, Image> imageMap,
Set<? extends Location> locations,
@Named("volumeMapping") Function<RunningInstance, Map<String, String>> instanceToStorageMapping) {
this.amiClient = checkNotNull(amiClient, "amiClient");
@@ -107,36 +142,77 @@ public class RunningInstanceToNodeMetada
this.credentialProvider = checkNotNull(credentialProvider, "credentialProvider");
this.images = checkNotNull(images, "images");
this.locations = checkNotNull(locations, "locations");
- this.instanceToStorageMapping = checkNotNull(instanceToStorageMapping);
+ this.instanceToStorageMapping = checkNotNull(instanceToStorageMapping,
+ "instanceToStorageMapping");
+ this.imageMap = checkNotNull(imageMap, "imageMap");
}
@Override
public NodeMetadata apply(final RunningInstance instance) {
String id = checkNotNull(instance, "instance").getId();
+
String name = null; // user doesn't determine a node name;
URI uri = null; // no uri to get rest access to host info
+ String tag = getTagForInstace(instance);
+
+ Credentials credentials = getCredentialsForInstanceWithTag(instance, tag);
+
+ Map<String, String> userMetadata = ImmutableMap.<String, String> of();
+
+ NodeState state = instanceToNodeState.get(instance.getInstanceState());
+
+ Set<String> publicAddresses = nullSafeSet(instance.getIpAddress());
+ Set<String> privateAddresses = nullSafeSet(instance.getPrivateIpAddress());
+
+ Map<String, String> extra = getExtra(instance);
+
+ Location location = getLocationForAvailabilityZone(instance);
+
+ Image image = resolveImageForInstanceInLocation(instance, location);
+
+ return new NodeMetadataImpl(id, name, instance.getRegion() + "/" + instance.getId(),
+ location, uri, userMetadata, tag, image, state, publicAddresses, privateAddresses,
+ extra, credentials);
+ }
+
+ private Credentials getCredentialsForInstanceWithTag(final RunningInstance instance, String tag) {
Credentials credentials = null;// default if no keypair exists
- String tag = String.format("NOTAG-%s", instance.getId());// default if no keypair exists
if (instance.getKeyName() != null) {
- tag = instance.getKeyName().replaceAll("-[0-9]+", "");
credentials = new Credentials(getLoginAccountFor(instance), getPrivateKeyOrNull(instance,
tag));
}
+ return credentials;
+ }
- Map<String, String> userMetadata = ImmutableMap.<String, String> of();
+ private String getTagForInstace(final RunningInstance instance) {
+ String tag = String.format("NOTAG-%s", instance.getId());// default
+ try {
+ tag = Iterables.getOnlyElement(
+ Iterables.filter(instance.getGroupIds(), new Predicate<String>() {
- NodeState state = instanceToNodeState.get(instance.getInstanceState());
+ @Override
+ public boolean apply(String input) {
+ return input.startsWith("jclouds#");
+ }
- Set<InetAddress> publicAddresses = nullSafeSet(instance.getIpAddress());
- Set<InetAddress> privateAddresses = nullSafeSet(instance.getPrivateIpAddress());
+ })).substring(8);
+ } catch (NoSuchElementException e) {
+ logger
+ .warn("no tag parsed from %s's groups: %s", instance.getId(), instance
+ .getGroupIds());
+ } catch (IllegalArgumentException e) {
+ logger.warn("too many groups match %s; %s's groups: %s", "jclouds#", instance.getId(),
+ instance.getGroupIds());
+ }
+ return tag;
+ }
+ private Location getLocationForAvailabilityZone(final RunningInstance instance) {
final String locationId = instance.getAvailabilityZone();
- Map<String, String> extra = getExtra(instance);
-
- final Location location = Iterables.find(locations, new Predicate<Location>() {
+ Location location = Iterables.find(locations, new Predicate<Location>() {
@Override
public boolean apply(Location input) {
@@ -144,16 +220,24 @@ public class RunningInstanceToNodeMetada
}
});
+ return location;
+ }
+ @VisibleForTesting
+ Image resolveImageForInstanceInLocation(final RunningInstance instance, final Location location) {
Image image = null;
try {
- image = Iterables.find(images, new FindImageForInstance(location, instance));
+ image = Iterables.find(images.get(), new FindImageForInstance(location, instance));
} catch (NoSuchElementException e) {
- logger.warn("could not find a matching image for instance %s in location %s", instance,
- location);
+ RegionAndName key = new RegionAndName(instance.getRegion(), instance.getImageId());
+ try {
+ image = imageMap.get(key);
+ } catch (NullPointerException nex) {
+ logger.warn("could not find a matching image for instance %s in location %s", instance,
+ location);
+ }
}
- return new NodeMetadataImpl(id, name, location, uri, userMetadata, tag, image, state,
- publicAddresses, privateAddresses, extra, credentials);
+ return image;
}
/**
@@ -178,7 +262,7 @@ public class RunningInstanceToNodeMetada
@VisibleForTesting
String getPrivateKeyOrNull(RunningInstance instance, String tag) {
- KeyPair keyPair = credentialsMap.get(new RegionTag(instance.getRegion(), instance
+ KeyPair keyPair = credentialsMap.get(new RegionAndName(instance.getRegion(), instance
.getKeyName()));
return keyPair != null ? keyPair.getKeyMaterial() : null;
}
Added: incubator/whirr/trunk/core/src/test/resources/log4j.xml
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/core/src/test/resources/log4j.xml?rev=984618&view=auto
==============================================================================
--- incubator/whirr/trunk/core/src/test/resources/log4j.xml (added)
+++ incubator/whirr/trunk/core/src/test/resources/log4j.xml Wed Aug 11 23:59:02 2010
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ 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
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+ <!--
+ For more configuration infromation and examples see the Apache
+ Log4j website: http://logging.apache.org/log4j/
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
+ debug="false">
+
+ <!-- A time/date based rolling appender -->
+ <appender name="WIREFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-wire.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <!-- A time/date based rolling appender -->
+ <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <!-- A time/date based rolling appender -->
+ <appender name="BLOBSTOREFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-blobstore.log" />
+ <param name="Append" value="true" />
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+ <param name="Threshold" value="TRACE" />
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+ </layout>
+ </appender>
+
+
+ <!-- A time/date based rolling appender -->
+ <appender name="COMPUTEFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-compute.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <appender name="ASYNCCOMPUTE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="COMPUTEFILE" />
+ </appender>
+ <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="FILE" />
+ </appender>
+
+ <appender name="ASYNCWIRE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="WIREFILE" />
+ </appender>
+
+ <appender name="ASYNCBLOBSTORE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="BLOBSTOREFILE" />
+ </appender>
+ <!-- ================ -->
+ <!-- Limit categories -->
+ <!-- ================ -->
+ <category name="jclouds.blobstore">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCBLOBSTORE" />
+ </category>
+
+ <category name="org.jclouds">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNC" />
+ </category>
+
+ <category name="jclouds.headers">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category>
+ <category name="jclouds.compute">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCCOMPUTE" />
+ </category>
+
+ <category name="jclouds.wire">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category><!--
+
+ <category name="jclouds.signature">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category>
+
+
+ --><!-- ======================= -->
+ <!-- Setup the Root category -->
+ <!-- ======================= -->
+
+ <root>
+ <priority value="WARN" />
+ </root>
+
+</log4j:configuration>
\ No newline at end of file
Propchange: incubator/whirr/trunk/core/src/test/resources/log4j.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/whirr/trunk/scripts/sun/java/install
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/scripts/sun/java/install?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/scripts/sun/java/install (original)
+++ incubator/whirr/trunk/scripts/sun/java/install Wed Aug 11 23:59:02 2010
@@ -26,7 +26,13 @@ set -e
# TODO: check that it is not already enabled
sed -i -e 's/universe$/universe multiverse/' /etc/apt/sources.list
+cat > /etc/apt/sources.list.d/canonical.com.list <<EOF
+deb http://archive.canonical.com/ubuntu lucid partner
+deb-src http://archive.canonical.com/ubuntu lucid partner
+EOF
+
apt-get update
+
echo 'sun-java6-bin shared/accepted-sun-dlj-v1-1 boolean true
sun-java6-jdk shared/accepted-sun-dlj-v1-1 boolean true
sun-java6-jre shared/accepted-sun-dlj-v1-1 boolean true
Modified: incubator/whirr/trunk/services/cassandra/pom.xml
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/cassandra/pom.xml?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/cassandra/pom.xml (original)
+++ incubator/whirr/trunk/services/cassandra/pom.xml Wed Aug 11 23:59:02 2010
@@ -37,27 +37,27 @@
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-aws</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-compute</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-enterprise</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-jsch</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-log4j</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
Modified: incubator/whirr/trunk/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java (original)
+++ incubator/whirr/trunk/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java Wed Aug 11 23:59:02 2010
@@ -19,19 +19,17 @@
package org.apache.whirr.service.cassandra;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.compute.domain.OsFamily.UBUNTU;
import static org.jclouds.compute.options.TemplateOptions.Builder.runScript;
-
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import static org.jclouds.compute.predicates.NodePredicates.runningWithTag;
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.whirr.service.Cluster;
@@ -45,15 +43,24 @@ import org.apache.whirr.service.ClusterS
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.RunNodesException;
import org.jclouds.compute.RunScriptOnNodesException;
+import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Template;
+import org.jclouds.compute.domain.TemplateBuilder;
+import org.jclouds.ssh.ExecResponse;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
public class CassandraService extends Service {
public static final String CASSANDRA_ROLE = "cassandra";
public static final int CLIENT_PORT = 9160;
-
+
@Override
public String getName() {
return "cassandra";
@@ -67,11 +74,19 @@ public class CassandraService extends Se
byte[] bootScript = RunUrlBuilder.runUrls("sun/java/install",
"apache/cassandra/install");
- Template template = computeService.templateBuilder().osFamily(
- OsFamily.UBUNTU).options(
- runScript(bootScript).installPrivateKey(serviceSpec.readPrivateKey())
- .authorizePublicKey(serviceSpec.readPublicKey()).inboundPorts(22,
- CLIENT_PORT)).build();
+
+ TemplateBuilder templateBuilder = computeService.templateBuilder()
+ .osFamily(UBUNTU).options(
+ runScript(bootScript).installPrivateKey(
+ serviceSpec.readPrivateKey()).authorizePublicKey(
+ serviceSpec.readPublicKey()).inboundPorts(22, CLIENT_PORT));
+
+ // TODO extract this logic elsewhere
+ if (serviceSpec.getProvider().equals("ec2"))
+ templateBuilder.imageNameMatches(".*10\\.?04.*").osDescriptionMatches(
+ "^ubuntu-images.*").architecture(Architecture.X86_32);
+
+ Template template = templateBuilder.build();
InstanceTemplate instanceTemplate = clusterSpec
.getInstanceTemplate(CASSANDRA_ROLE);
@@ -92,9 +107,13 @@ public class CassandraService extends Se
String servers = Joiner.on(' ').join(getPrivateIps(seeds));
byte[] configureScript = RunUrlBuilder
.runUrls("apache/cassandra/post-configure " + servers);
+
try {
- computeService.runScriptOnNodesWithTag(serviceSpec.getClusterName(),
- configureScript);
+ Map<? extends NodeMetadata, ExecResponse> responses = computeService
+ .runScriptOnNodesMatching(
+ runningWithTag(serviceSpec.getClusterName()), configureScript);
+ assert responses.size() > 0 : "no nodes matched "
+ + serviceSpec.getClusterName();
} catch (RunScriptOnNodesException e) {
// TODO: retry
throw new IOException(e);
@@ -104,10 +123,12 @@ public class CassandraService extends Se
}
/**
- * Pick a selection of the nodes that are to become seeds.
- * TODO improve selection method. Right now it picks 20% of the nodes
- * as seeds, or a minimum of one node if it is a small cluster.
- * @param nodes all nodes in cluster
+ * Pick a selection of the nodes that are to become seeds. TODO improve
+ * selection method. Right now it picks 20% of the nodes as seeds, or a
+ * minimum of one node if it is a small cluster.
+ *
+ * @param nodes
+ * all nodes in cluster
* @return list of seeds
*/
protected List<NodeMetadata> getSeeds(List<NodeMetadata> nodes) {
@@ -124,8 +145,7 @@ public class CassandraService extends Se
new Function<NodeMetadata, String>() {
@Override
public String apply(NodeMetadata node) {
- return Iterables.get(node.getPrivateAddresses(), 0)
- .getHostAddress();
+ return Iterables.get(node.getPrivateAddresses(), 0);
}
});
}
@@ -135,9 +155,14 @@ public class CassandraService extends Se
new Function<NodeMetadata, Instance>() {
@Override
public Instance apply(NodeMetadata node) {
- return new Instance(Collections.singleton(CASSANDRA_ROLE),
- Iterables.get(node.getPublicAddresses(), 0), Iterables.get(node
- .getPrivateAddresses(), 0));
+ try {
+ return new Instance(node.getCredentials(), Collections
+ .singleton(CASSANDRA_ROLE), InetAddress.getByName(Iterables
+ .get(node.getPublicAddresses(), 0)), InetAddress
+ .getByName(Iterables.get(node.getPrivateAddresses(), 0)));
+ } catch (UnknownHostException e) {
+ throw new RuntimeException(e);
+ }
}
}));
}
Modified: incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraServiceTest.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraServiceTest.java (original)
+++ incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraServiceTest.java Wed Aug 11 23:59:02 2010
@@ -20,7 +20,6 @@ package org.apache.whirr.service.cassand
import static org.junit.Assert.assertEquals;
-import java.net.InetAddress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -33,13 +32,13 @@ import org.junit.Test;
public class CassandraServiceTest {
private NodeMetadata getNodeMetadata(String id) {
- return new NodeMetadataImpl("1", null, null, null,
+ return new NodeMetadataImpl("1", null, "1", null, null,
new HashMap<String, String>(), null, null,
- NodeState.RUNNING, new ArrayList<InetAddress>(),
- new ArrayList<InetAddress>(), new HashMap<String, String>(), null);
+ NodeState.RUNNING, new ArrayList<String>(),
+ new ArrayList<String>(), new HashMap<String, String>(), null);
}
- @Test
+ @Test()
public void testGetSeeds() {
List<NodeMetadata> nodes = new ArrayList<NodeMetadata>();
nodes.add(getNodeMetadata("1"));
@@ -59,5 +58,4 @@ public class CassandraServiceTest {
assertEquals(getNodeMetadata("1"), seeds2.get(0));
assertEquals(getNodeMetadata("2"), seeds2.get(1));
}
-
}
Modified: incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java (original)
+++ incubator/whirr/trunk/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java Wed Aug 11 23:59:02 2010
@@ -54,15 +54,15 @@ public class CassandraServiceTest {
public void setUp() throws IOException, InterruptedException {
String secretKeyFile;
try {
- secretKeyFile = checkNotNull(System.getProperty("whirr.test.ssh.keyfile"));
+ secretKeyFile = checkNotNull(System.getProperty("whirr.test.ssh.keyfile"), "whirr.test.ssh.keyfile");
} catch (NullPointerException e) {
secretKeyFile = System.getProperty("user.home") + "/.ssh/id_rsa";
}
serviceSpec = new ServiceSpec();
serviceSpec.setProvider(checkNotNull(System.getProperty(
"whirr.test.provider", "ec2")));
- serviceSpec.setAccount(checkNotNull(System.getProperty("whirr.test.user")));
- serviceSpec.setKey(checkNotNull(System.getProperty("whirr.test.key")));
+ serviceSpec.setAccount(checkNotNull(System.getProperty("whirr.test.user"), "whirr.test.user"));
+ serviceSpec.setKey(checkNotNull(System.getProperty("whirr.test.key"), "whirr.test.key"));
serviceSpec.setSecretKeyFile(secretKeyFile);
serviceSpec.setClusterName(clusterName);
service = new CassandraService();
Added: incubator/whirr/trunk/services/cassandra/src/test/resources/log4j.xml
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/cassandra/src/test/resources/log4j.xml?rev=984618&view=auto
==============================================================================
--- incubator/whirr/trunk/services/cassandra/src/test/resources/log4j.xml (added)
+++ incubator/whirr/trunk/services/cassandra/src/test/resources/log4j.xml Wed Aug 11 23:59:02 2010
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ 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
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+ <!--
+ For more configuration infromation and examples see the Apache
+ Log4j website: http://logging.apache.org/log4j/
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
+ debug="false">
+
+ <!-- A time/date based rolling appender -->
+ <appender name="WIREFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-wire.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <!-- A time/date based rolling appender -->
+ <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <!-- A time/date based rolling appender -->
+ <appender name="BLOBSTOREFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-blobstore.log" />
+ <param name="Append" value="true" />
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+ <param name="Threshold" value="TRACE" />
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+ </layout>
+ </appender>
+
+
+ <!-- A time/date based rolling appender -->
+ <appender name="COMPUTEFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-compute.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <appender name="ASYNCCOMPUTE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="COMPUTEFILE" />
+ </appender>
+ <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="FILE" />
+ </appender>
+
+ <appender name="ASYNCWIRE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="WIREFILE" />
+ </appender>
+
+ <appender name="ASYNCBLOBSTORE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="BLOBSTOREFILE" />
+ </appender>
+ <!-- ================ -->
+ <!-- Limit categories -->
+ <!-- ================ -->
+ <category name="jclouds.blobstore">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCBLOBSTORE" />
+ </category>
+
+ <category name="org.jclouds">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNC" />
+ </category>
+
+ <category name="jclouds.headers">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category>
+ <category name="jclouds.compute">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCCOMPUTE" />
+ </category>
+
+ <category name="jclouds.wire">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category><!--
+
+ <category name="jclouds.signature">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category>
+
+
+ --><!-- ======================= -->
+ <!-- Setup the Root category -->
+ <!-- ======================= -->
+
+ <root>
+ <priority value="WARN" />
+ </root>
+
+</log4j:configuration>
\ No newline at end of file
Propchange: incubator/whirr/trunk/services/cassandra/src/test/resources/log4j.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/whirr/trunk/services/hadoop/pom.xml
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hadoop/pom.xml?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/hadoop/pom.xml (original)
+++ incubator/whirr/trunk/services/hadoop/pom.xml Wed Aug 11 23:59:02 2010
@@ -37,32 +37,32 @@
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-aws</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-compute</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-enterprise</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-jsch</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-log4j</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-rackspace</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
Modified: incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java (original)
+++ incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java Wed Aug 11 23:59:02 2010
@@ -24,6 +24,8 @@ import java.io.InputStreamReader;
import org.apache.whirr.service.ServiceSpec;
+import com.google.common.collect.Iterables;
+
public class HadoopProxy {
private ServiceSpec serviceSpec;
@@ -39,7 +41,7 @@ public class HadoopProxy {
// jsch doesn't support SOCKS-based dynamic port forwarding, so we need to shell out...
// TODO: Use static port forwarding instead?
String identityFile = serviceSpec.getSecretKeyFile();
- String user = "ubuntu"; // TODO: get from jclouds
+ String user = Iterables.get(cluster.getInstances(), 0).getLoginCredentials().account;
String server = cluster.getNamenodePublicAddress().getHostName();
String[] command = new String[] { "ssh",
"-i", identityFile,
Modified: incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java (original)
+++ incubator/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java Wed Aug 11 23:59:02 2010
@@ -20,6 +20,7 @@ package org.apache.whirr.service.hadoop;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.compute.domain.OsFamily.UBUNTU;
import static org.jclouds.compute.options.TemplateOptions.Builder.runScript;
import com.google.common.base.Charsets;
@@ -32,6 +33,7 @@ import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.util.Collections;
import java.util.Map.Entry;
import java.util.Properties;
@@ -46,9 +48,10 @@ import org.apache.whirr.service.Cluster.
import org.apache.whirr.service.ClusterSpec.InstanceTemplate;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.RunNodesException;
+import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Template;
+import org.jclouds.compute.domain.TemplateBuilder;
public class HadoopService extends Service {
@@ -63,23 +66,27 @@ public class HadoopService extends Servi
@Override
public HadoopCluster launchCluster(ServiceSpec serviceSpec, ClusterSpec clusterSpec) throws IOException {
ComputeService computeService = ComputeServiceBuilder.build(serviceSpec);
-
- String privateKey = serviceSpec.readPrivateKey();
- String publicKey = serviceSpec.readPublicKey();
// Launch Hadoop "master" (NN and JT)
// deal with user packages and autoshutdown with extra runurls
byte[] nnjtBootScript = RunUrlBuilder.runUrls(
"sun/java/install",
String.format("apache/hadoop/install nn,jt -c %s", serviceSpec.getProvider()));
+
+ TemplateBuilder masterTemplateBuilder = computeService.templateBuilder()
+ .osFamily(UBUNTU)
+ .options(runScript(nnjtBootScript)
+ .installPrivateKey(serviceSpec.readPrivateKey())
+ .authorizePublicKey(serviceSpec.readPublicKey())
+ .inboundPorts(22, 80, 8020, 8021, 50010, 50030, 50070)); // TODO: restrict further
+
+ // TODO extract this logic elsewhere
+ if (serviceSpec.getProvider().equals("ec2"))
+ masterTemplateBuilder.imageNameMatches(".*10\\.?04.*")
+ .osDescriptionMatches("^ubuntu-images.*")
+ .architecture(Architecture.X86_32);
- Template template = computeService.templateBuilder()
- .osFamily(OsFamily.UBUNTU)
- .options(runScript(nnjtBootScript)
- .installPrivateKey(privateKey)
- .authorizePublicKey(publicKey)
- .inboundPorts(22, 80, 8020, 8021, 50010, 50030, 50070)) // TODO: restrict further
- .build();
+ Template masterTemplate = masterTemplateBuilder.build();
InstanceTemplate instanceTemplate = clusterSpec.getInstanceTemplate(MASTER_ROLE);
checkNotNull(instanceTemplate);
@@ -87,14 +94,14 @@ public class HadoopService extends Servi
Set<? extends NodeMetadata> nodes;
try {
nodes = computeService.runNodesWithTag(
- serviceSpec.getClusterName(), 1, template);
+ serviceSpec.getClusterName(), 1, masterTemplate);
} catch (RunNodesException e) {
// TODO: can we do better here (retry?)
throw new IOException(e);
}
NodeMetadata node = Iterables.getOnlyElement(nodes);
- InetAddress namenodePublicAddress = Iterables.getOnlyElement(node.getPublicAddresses());
- InetAddress jobtrackerPublicAddress = Iterables.getOnlyElement(node.getPublicAddresses());
+ InetAddress namenodePublicAddress = InetAddress.getByName(Iterables.get(node.getPublicAddresses(),0));
+ InetAddress jobtrackerPublicAddress = InetAddress.getByName(Iterables.get(node.getPublicAddresses(),0));
// Launch slaves (DN and TT)
byte[] slaveBootScript = RunUrlBuilder.runUrls(
@@ -103,20 +110,27 @@ public class HadoopService extends Servi
namenodePublicAddress.getHostName(),
jobtrackerPublicAddress.getHostName()));
- template = computeService.templateBuilder()
- .osFamily(OsFamily.UBUNTU)
- .options(runScript(slaveBootScript)
- .installPrivateKey(privateKey)
- .authorizePublicKey(publicKey))
- .build();
-
+ TemplateBuilder slaveTemplateBuilder = computeService.templateBuilder()
+ .osFamily(UBUNTU)
+ .options(runScript(slaveBootScript)
+ .installPrivateKey(serviceSpec.readPrivateKey())
+ .authorizePublicKey(serviceSpec.readPublicKey()));
+
+ // TODO extract this logic elsewhere
+ if (serviceSpec.getProvider().equals("ec2"))
+ slaveTemplateBuilder.imageNameMatches(".*10\\.?04.*")
+ .osDescriptionMatches("^ubuntu-images.*")
+ .architecture(Architecture.X86_32);
+
+ Template slaveTemplate = slaveTemplateBuilder.build();
+
instanceTemplate = clusterSpec.getInstanceTemplate(WORKER_ROLE);
checkNotNull(instanceTemplate);
Set<? extends NodeMetadata> workerNodes;
try {
workerNodes = computeService.runNodesWithTag(serviceSpec.getClusterName(),
- instanceTemplate.getNumberOfInstances(), template);
+ instanceTemplate.getNumberOfInstances(), slaveTemplate);
} catch (RunNodesException e) {
// TODO: don't bail out if only a few have failed to start
throw new IOException(e);
@@ -136,9 +150,13 @@ public class HadoopService extends Servi
new Function<NodeMetadata, Instance>() {
@Override
public Instance apply(NodeMetadata node) {
- return new Instance(roles,
- Iterables.get(node.getPublicAddresses(), 0),
- Iterables.get(node.getPrivateAddresses(), 0));
+ try {
+ return new Instance(node.getCredentials(), roles,
+ InetAddress.getByName(Iterables.get(node.getPublicAddresses(), 0)),
+ InetAddress.getByName(Iterables.get(node.getPrivateAddresses(), 0)));
+ } catch (UnknownHostException e) {
+ throw new RuntimeException(e);
+ }
}
}));
}
Modified: incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java (original)
+++ incubator/whirr/trunk/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java Wed Aug 11 23:59:02 2010
@@ -146,7 +146,9 @@ public class HadoopServiceTest {
@After
public void tearDown() throws IOException {
- proxy.stop();
+ if (proxy != null) {
+ proxy.stop();
+ }
service.destroyCluster(serviceSpec);
}
Added: incubator/whirr/trunk/services/hadoop/src/test/resources/log4j.xml
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/hadoop/src/test/resources/log4j.xml?rev=984618&view=auto
==============================================================================
--- incubator/whirr/trunk/services/hadoop/src/test/resources/log4j.xml (added)
+++ incubator/whirr/trunk/services/hadoop/src/test/resources/log4j.xml Wed Aug 11 23:59:02 2010
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ 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
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+ <!--
+ For more configuration infromation and examples see the Apache
+ Log4j website: http://logging.apache.org/log4j/
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
+ debug="false">
+
+ <!-- A time/date based rolling appender -->
+ <appender name="WIREFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-wire.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <!-- A time/date based rolling appender -->
+ <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <!-- A time/date based rolling appender -->
+ <appender name="BLOBSTOREFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-blobstore.log" />
+ <param name="Append" value="true" />
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+ <param name="Threshold" value="TRACE" />
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+ </layout>
+ </appender>
+
+
+ <!-- A time/date based rolling appender -->
+ <appender name="COMPUTEFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-compute.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <appender name="ASYNCCOMPUTE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="COMPUTEFILE" />
+ </appender>
+ <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="FILE" />
+ </appender>
+
+ <appender name="ASYNCWIRE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="WIREFILE" />
+ </appender>
+
+ <appender name="ASYNCBLOBSTORE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="BLOBSTOREFILE" />
+ </appender>
+ <!-- ================ -->
+ <!-- Limit categories -->
+ <!-- ================ -->
+ <category name="jclouds.blobstore">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCBLOBSTORE" />
+ </category>
+
+ <category name="org.jclouds">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNC" />
+ </category>
+
+ <category name="jclouds.headers">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category>
+ <category name="jclouds.compute">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCCOMPUTE" />
+ </category>
+
+ <category name="jclouds.wire">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category><!--
+
+ <category name="jclouds.signature">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category>
+
+
+ --><!-- ======================= -->
+ <!-- Setup the Root category -->
+ <!-- ======================= -->
+
+ <root>
+ <priority value="WARN" />
+ </root>
+
+</log4j:configuration>
\ No newline at end of file
Propchange: incubator/whirr/trunk/services/hadoop/src/test/resources/log4j.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/whirr/trunk/services/zookeeper/pom.xml
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/zookeeper/pom.xml?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/zookeeper/pom.xml (original)
+++ incubator/whirr/trunk/services/zookeeper/pom.xml Wed Aug 11 23:59:02 2010
@@ -37,27 +37,27 @@
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-aws</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-compute</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-enterprise</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-jsch</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-log4j</artifactId>
- <version>1.0-beta-5</version>
+ <version>1.0-beta-6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
Modified: incubator/whirr/trunk/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java?rev=984618&r1=984617&r2=984618&view=diff
==============================================================================
--- incubator/whirr/trunk/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java (original)
+++ incubator/whirr/trunk/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java Wed Aug 11 23:59:02 2010
@@ -19,16 +19,13 @@
package org.apache.whirr.service.zookeeper;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.compute.domain.OsFamily.UBUNTU;
import static org.jclouds.compute.options.TemplateOptions.Builder.runScript;
-
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import static org.jclouds.compute.predicates.NodePredicates.runningWithTag;
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -43,9 +40,18 @@ import org.apache.whirr.service.ClusterS
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.RunNodesException;
import org.jclouds.compute.RunScriptOnNodesException;
+import org.jclouds.compute.domain.Architecture;
import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Template;
+import org.jclouds.compute.domain.TemplateBuilder;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Throwables;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
public class ZooKeeperService extends Service {
@@ -65,13 +71,21 @@ public class ZooKeeperService extends Se
byte[] bootScript = RunUrlBuilder.runUrls(
"sun/java/install",
"apache/zookeeper/install");
- Template template = computeService.templateBuilder()
- .osFamily(OsFamily.UBUNTU)
+
+ TemplateBuilder templateBuilder = computeService.templateBuilder()
+ .osFamily(UBUNTU)
.options(runScript(bootScript)
.installPrivateKey(serviceSpec.readPrivateKey())
.authorizePublicKey(serviceSpec.readPublicKey())
- .inboundPorts(22, CLIENT_PORT))
- .build();
+ .inboundPorts(22, CLIENT_PORT));
+
+ // TODO extract this logic elsewhere
+ if (serviceSpec.getProvider().equals("ec2"))
+ templateBuilder.imageNameMatches(".*10\\.?04.*")
+ .osDescriptionMatches("^ubuntu-images.*")
+ .architecture(Architecture.X86_32);
+
+ Template template = templateBuilder.build();
InstanceTemplate instanceTemplate = clusterSpec.getInstanceTemplate(ZOOKEEPER_ROLE);
checkNotNull(instanceTemplate);
@@ -92,7 +106,7 @@ public class ZooKeeperService extends Se
byte[] configureScript = RunUrlBuilder.runUrls(
"apache/zookeeper/post-configure " + servers);
try {
- computeService.runScriptOnNodesWithTag(serviceSpec.getClusterName(), configureScript);
+ computeService.runScriptOnNodesMatching(runningWithTag(serviceSpec.getClusterName()), configureScript);
} catch (RunScriptOnNodesException e) {
// TODO: retry
throw new IOException(e);
@@ -107,7 +121,12 @@ public class ZooKeeperService extends Se
new Function<NodeMetadata, String>() {
@Override
public String apply(NodeMetadata node) {
- return Iterables.get(node.getPrivateAddresses(), 0).getHostAddress();
+ try {
+ return InetAddress.getByName(Iterables.get(node.getPrivateAddresses(), 0)).getHostAddress();
+ } catch (UnknownHostException e) {
+ Throwables.propagate(e);
+ return null;
+ }
}
});
}
@@ -117,9 +136,13 @@ public class ZooKeeperService extends Se
new Function<NodeMetadata, Instance>() {
@Override
public Instance apply(NodeMetadata node) {
- return new Instance(Collections.singleton(ZOOKEEPER_ROLE),
- Iterables.get(node.getPublicAddresses(), 0),
- Iterables.get(node.getPrivateAddresses(), 0));
+ try {
+ return new Instance(node.getCredentials(), Collections.singleton(ZOOKEEPER_ROLE),
+ InetAddress.getByName(Iterables.get(node.getPublicAddresses(), 0)),
+ InetAddress.getByName(Iterables.get(node.getPrivateAddresses(), 0)));
+ } catch (UnknownHostException e) {
+ throw new RuntimeException(e);
+ }
}
}));
}
@@ -129,8 +152,13 @@ public class ZooKeeperService extends Se
new Function<NodeMetadata, String>() {
@Override
public String apply(NodeMetadata node) {
- String publicIp = Iterables.get(node.getPublicAddresses(), 0)
- .getHostName();
+ String publicIp;
+ try {
+ publicIp = InetAddress.getByName(Iterables.get(node.getPublicAddresses(), 0)).getHostName();
+ } catch (UnknownHostException e) {
+ Throwables.propagate(e);
+ return null;
+ }
return String.format("%s:%d", publicIp, CLIENT_PORT);
}
});
Added: incubator/whirr/trunk/services/zookeeper/src/test/resources/log4j.xml
URL: http://svn.apache.org/viewvc/incubator/whirr/trunk/services/zookeeper/src/test/resources/log4j.xml?rev=984618&view=auto
==============================================================================
--- incubator/whirr/trunk/services/zookeeper/src/test/resources/log4j.xml (added)
+++ incubator/whirr/trunk/services/zookeeper/src/test/resources/log4j.xml Wed Aug 11 23:59:02 2010
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ 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
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+ <!--
+ For more configuration infromation and examples see the Apache
+ Log4j website: http://logging.apache.org/log4j/
+ -->
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
+ debug="false">
+
+ <!-- A time/date based rolling appender -->
+ <appender name="WIREFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-wire.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <!-- A time/date based rolling appender -->
+ <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <!-- A time/date based rolling appender -->
+ <appender name="BLOBSTOREFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-blobstore.log" />
+ <param name="Append" value="true" />
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+ <param name="Threshold" value="TRACE" />
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+ </layout>
+ </appender>
+
+
+ <!-- A time/date based rolling appender -->
+ <appender name="COMPUTEFILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="target/test-data/jclouds-compute.log" />
+ <param name="Append" value="true" />
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd" />
+
+ <param name="Threshold" value="TRACE" />
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
+
+ <!--
+ The full pattern: Date MS Priority [Category]
+ (Thread:NDC) Message\n <param name="ConversionPattern"
+ value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <appender name="ASYNCCOMPUTE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="COMPUTEFILE" />
+ </appender>
+ <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="FILE" />
+ </appender>
+
+ <appender name="ASYNCWIRE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="WIREFILE" />
+ </appender>
+
+ <appender name="ASYNCBLOBSTORE" class="org.apache.log4j.AsyncAppender">
+ <appender-ref ref="BLOBSTOREFILE" />
+ </appender>
+ <!-- ================ -->
+ <!-- Limit categories -->
+ <!-- ================ -->
+ <category name="jclouds.blobstore">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCBLOBSTORE" />
+ </category>
+
+ <category name="org.jclouds">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNC" />
+ </category>
+
+ <category name="jclouds.headers">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category>
+ <category name="jclouds.compute">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCCOMPUTE" />
+ </category>
+
+ <category name="jclouds.wire">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category><!--
+
+ <category name="jclouds.signature">
+ <priority value="DEBUG" />
+ <appender-ref ref="ASYNCWIRE" />
+ </category>
+
+
+ --><!-- ======================= -->
+ <!-- Setup the Root category -->
+ <!-- ======================= -->
+
+ <root>
+ <priority value="WARN" />
+ </root>
+
+</log4j:configuration>
\ No newline at end of file
Propchange: incubator/whirr/trunk/services/zookeeper/src/test/resources/log4j.xml
------------------------------------------------------------------------------
svn:eol-style = native