diff --git a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatch.java b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatch.java index 58f6109d00..8fdae90e02 100644 --- a/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatch.java +++ b/apis/cloudwatch/src/main/java/org/jclouds/cloudwatch/CloudWatch.java @@ -18,16 +18,17 @@ */ package org.jclouds.cloudwatch; -import com.google.common.collect.AbstractIterator; -import com.google.common.collect.Sets; +import java.util.Iterator; +import java.util.List; + import org.jclouds.cloudwatch.domain.ListMetricsResponse; import org.jclouds.cloudwatch.domain.Metric; import org.jclouds.cloudwatch.domain.MetricDatum; import org.jclouds.cloudwatch.features.MetricClient; import org.jclouds.cloudwatch.options.ListMetricsOptions; -import java.util.Iterator; -import java.util.Set; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.Iterables; /** * Utilities for using CloudWatch. @@ -107,22 +108,11 @@ public class CloudWatch { * @param namespace the namespace to publish the metrics in */ public static void putMetricData(CloudWatchClient cloudWatchClient, String region, Iterable metrics, - String namespace) { + String namespace) { MetricClient metricClient = cloudWatchClient.getMetricClientForRegion(region); - Iterator mIterator = metrics.iterator(); - Set metricsData = Sets.newLinkedHashSet(); - while (mIterator.hasNext()) { - metricsData.add(mIterator.next()); - if (metricsData.size() == 10 || !mIterator.hasNext()) { - // Make the call - metricClient.putMetricData(metrics, namespace); - - // Reset the list for subsequent call if necessary - if (mIterator.hasNext()) { - metricsData = Sets.newLinkedHashSet(); - } - } + for (List slice : Iterables.partition(metrics, 10)) { + metricClient.putMetricData(slice, namespace); } } diff --git a/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/CloudWatchTest.java b/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/CloudWatchTest.java index 19102f982d..d3bffb1d11 100644 --- a/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/CloudWatchTest.java +++ b/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/CloudWatchTest.java @@ -18,9 +18,13 @@ */ package org.jclouds.cloudwatch; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Sets; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.expect; + +import java.util.List; +import java.util.Set; + import org.easymock.EasyMock; import org.jclouds.cloudwatch.domain.ListMetricsResponse; import org.jclouds.cloudwatch.domain.Metric; @@ -30,18 +34,16 @@ import org.jclouds.cloudwatch.options.ListMetricsOptions; import org.testng.Assert; import org.testng.annotations.Test; -import java.util.Set; - -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.expectLastCall; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; /** * Tests behavior of {@code CloudWatch}. * * @author Jeremy Whitlock */ +@Test(testName = "CloudWatchTest") public class CloudWatchTest { /** @@ -115,18 +117,17 @@ public class CloudWatchTest { String namespace = "JCLOUDS/Test"; for (int i = 0; i < 11; i++) { - metrics.add(MetricDatum.builder().build()); + metrics.add(MetricDatum.builder().metricName("foo").build()); } // Using EasyMock.eq("") because EasyMock makes it impossible to pass null as a String value here expect(client.getMetricClientForRegion(EasyMock.eq(""))) .andReturn(metricClient) .atLeastOnce(); - - - metricClient.putMetricData(metrics, namespace); - - expectLastCall().times(2); + + for (List slice : Iterables.partition(metrics, 10)) { + metricClient.putMetricData(slice, namespace); + } EasyMock.replay(client, metricClient);