http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/Stats.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/stats/Stats.java 
b/commons/src/main/java/com/twitter/common/stats/Stats.java
deleted file mode 100644
index af7da7f..0000000
--- a/commons/src/main/java/com/twitter/common/stats/Stats.java
+++ /dev/null
@@ -1,408 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Supplier;
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.MapMaker;
-import com.google.common.util.concurrent.AtomicDouble;
-
-import com.twitter.common.base.MorePreconditions;
-
-/**
- * Manages {@link Stat}s that should be exported for monitoring.
- *
- * Statistic names may only contain {@code [A-Za-z0-9_]},
- * all other chars will be logged as a warning and replaced with underscore on 
export.
- *
- * @author John Sirois
- */
-public class Stats {
-
-  private static final Logger LOG = Logger.getLogger(Stats.class.getName());
-  private static final Pattern NOT_NAME_CHAR = 
Pattern.compile("[^A-Za-z0-9_]");
-
-  private static final ConcurrentMap<String, Stat<?>> VAR_MAP = new 
MapMaker().makeMap();
-
-  // Store stats in the order they were registered, so that derived variables 
are
-  // sampled after their inputs.
-  private static final Collection<RecordingStat<? extends Number>> 
ORDERED_NUMERIC_STATS =
-      new ConcurrentLinkedQueue<RecordingStat<? extends Number>>();
-
-  private static final Cache<String, RecordingStat<? extends Number>> 
NUMERIC_STATS =
-      CacheBuilder.newBuilder().build();
-
-  public static String normalizeName(String name) {
-    return NOT_NAME_CHAR.matcher(name).replaceAll("_");
-  }
-
-  static String validateName(String name) {
-    String normalized = normalizeName(name);
-    if (!name.equals(normalized)) {
-      LOG.warning("Invalid stat name " + name + " exported as " + normalized);
-    }
-    return normalized;
-  }
-
-  /**
-   * A {@link StatsProvider} that exports gauge-style stats to the global 
{@link Stat}s repository
-   * for time series tracking.
-   */
-  public static final StatsProvider STATS_PROVIDER = new StatsProvider() {
-    private final StatsProvider untracked = new StatsProvider() {
-      @Override public AtomicLong makeCounter(String name) {
-        final AtomicLong longVar = new AtomicLong();
-        Stats.exportStatic(new StatImpl<Long>(name) {
-          @Override public Long read() {
-            return longVar.get();
-          }
-        });
-        return longVar;
-      }
-
-      @Override public <T extends Number> Stat<T> makeGauge(String name, final 
Supplier<T> gauge) {
-        return Stats.exportStatic(new StatImpl<T>(name) {
-          @Override public T read() {
-            return gauge.get();
-          }
-        });
-      }
-
-      @Override public StatsProvider untracked() {
-        return this;
-      }
-
-      @Override public RequestTimer makeRequestTimer(String name) {
-        // TODO(William Farner): Add support for this once a caller shows 
interest in using it.
-        throw new UnsupportedOperationException();
-      }
-    };
-
-    @Override public <T extends Number> Stat<T> makeGauge(String name, final 
Supplier<T> gauge) {
-      return Stats.export(new StatImpl<T>(name) {
-        @Override public T read() {
-          return gauge.get();
-        }
-      });
-    }
-
-    @Override public AtomicLong makeCounter(String name) {
-      return Stats.exportLong(name);
-    }
-
-    @Override public StatsProvider untracked() {
-      return untracked;
-    }
-
-    @Override public RequestTimer makeRequestTimer(String name) {
-      return new RequestStats(name);
-    }
-  };
-
-  /**
-   * A {@link StatRegistry} that provides stats registered with the global 
{@link Stat}s repository.
-   */
-  public static final StatRegistry STAT_REGISTRY = new StatRegistry() {
-    @Override public Iterable<RecordingStat<? extends Number>> getStats() {
-      return Stats.getNumericVariables();
-    }
-  };
-
-  private static class ExportStat implements Callable<RecordingStat<? extends 
Number>> {
-    private final AtomicBoolean called = new AtomicBoolean(false);
-
-    private final RecordingStat<? extends Number> stat;
-    private final String name;
-
-    private <T extends Number> ExportStat(String name, Stat<T> stat) {
-      this.name = name;
-      this.stat = (stat instanceof RecordingStat)
-          ? (RecordingStat<? extends Number>) stat
-          : new RecordingStatImpl<T>(stat);
-    }
-
-    @Override
-    public RecordingStat<? extends Number> call() {
-      try {
-        exportStaticInternal(name, stat);
-        ORDERED_NUMERIC_STATS.add(stat);
-        return stat;
-      } finally {
-        called.set(true);
-      }
-    }
-  }
-
-  /**
-   * Exports a stat for tracking.
-   * if the stat provided implements the internal {@link RecordingStat} 
interface, it will be
-   * registered for time series collection and returned.  If a {@link 
RecordingStat} with the same
-   * name as the provided stat has already been exported, the 
previously-exported stat will be
-   * returned and no additional registration will be performed.
-   *
-   * @param var The variable to export.
-   * @param <T> The value exported by the variable.
-   * @return A reference to the stat that was stored.  The stat returned may 
not be equal to the
-   *    stat provided.  If a variable was already returned with the same
-   */
-  public static <T extends Number> Stat<T> export(Stat<T> var) {
-    String validatedName = 
validateName(MorePreconditions.checkNotBlank(var.getName()));
-    ExportStat exportStat = new ExportStat(validatedName, var);
-    try {
-      @SuppressWarnings("unchecked")
-      Stat<T> exported = (Stat<T>) NUMERIC_STATS.get(validatedName, 
exportStat);
-      return exported;
-    } catch (ExecutionException e) {
-      throw new IllegalStateException(
-          "Unexpected error exporting stat " + validatedName, e.getCause());
-    } finally {
-      if (!exportStat.called.get()) {
-        LOG.warning("Re-using already registered variable for key " + 
validatedName);
-      }
-    }
-  }
-
-  /**
-   * Exports a string stat.
-   * String-based statistics will not be registered for time series collection.
-   *
-   * @param var Stat to export.
-   * @return A reference back to {@code var}, or the variable that was already 
registered under the
-   *    same name as {@code var}.
-   */
-  public static Stat<String> exportString(Stat<String> var) {
-    return exportStatic(var);
-  }
-
-  /**
-   * Adds a collection of stats for export.
-   *
-   * @param vars The variables to add.
-   */
-  public static void exportAll(Iterable<Stat<? extends Number>> vars) {
-    for (Stat<? extends Number> var : vars) {
-      export(var);
-    }
-  }
-
-  /**
-   * Exports an {@link AtomicInteger}, which will be included in time series 
tracking.
-   *
-   * @param name The name to export the stat with.
-   * @param intVar The variable to export.
-   * @return A reference to the {@link AtomicInteger} provided.
-   */
-  public static AtomicInteger export(final String name, final AtomicInteger 
intVar) {
-    export(new SampledStat<Integer>(name, 0) {
-      @Override public Integer doSample() { return intVar.get(); }
-    });
-
-    return intVar;
-  }
-
-  /**
-   * Creates and exports an {@link AtomicInteger}.
-   *
-   * @param name The name to export the stat with.
-   * @return A reference to the {@link AtomicInteger} created.
-   */
-  public static AtomicInteger exportInt(String name) {
-    return exportInt(name, 0);
-  }
-
-  /**
-   * Creates and exports an {@link AtomicInteger} with initial value.
-   *
-   * @param name The name to export the stat with.
-   * @param initialValue The initial stat value.
-   * @return A reference to the {@link AtomicInteger} created.
-   */
-  public static AtomicInteger exportInt(String name, int initialValue) {
-    return export(name, new AtomicInteger(initialValue));
-  }
-
-  /**
-   * Exports an {@link AtomicLong}, which will be included in time series 
tracking.
-   *
-   * @param name The name to export the stat with.
-   * @param longVar The variable to export.
-   * @return A reference to the {@link AtomicLong} provided.
-   */
-  public static AtomicLong export(String name, final AtomicLong longVar) {
-    export(new StatImpl<Long>(name) {
-      @Override public Long read() { return longVar.get(); }
-    });
-
-    return longVar;
-  }
-
-  /**
-   * Creates and exports an {@link AtomicLong}.
-   *
-   * @param name The name to export the stat with.
-   * @return A reference to the {@link AtomicLong} created.
-   */
-  public static AtomicLong exportLong(String name) {
-    return exportLong(name, 0L);
-  }
-
-  /**
-   * Creates and exports an {@link AtomicLong} with initial value.
-   *
-   * @param name The name to export the stat with.
-   * @param initialValue The initial stat value.
-   * @return A reference to the {@link AtomicLong} created.
-   */
-  public static AtomicLong exportLong(String name, long initialValue) {
-    return export(name, new AtomicLong(initialValue));
-  }
-
-  /**
-   * Exports an {@link AtomicDouble}, which will be included in time series 
tracking.
-   *
-   * @param name The name to export the stat with.
-   * @param doubleVar The variable to export.
-   * @return A reference to the {@link AtomicDouble} provided.
-   */
-  public static AtomicDouble export(String name, final AtomicDouble doubleVar) 
{
-    export(new StatImpl<Double>(name) {
-      @Override public Double read() { return doubleVar.doubleValue(); }
-    });
-
-    return doubleVar;
-  }
-
-  /**
-   * Creates and exports an {@link AtomicDouble}.
-   *
-   * @param name The name to export the stat with.
-   * @return A reference to the {@link AtomicDouble} created.
-   */
-  public static AtomicDouble exportDouble(String name) {
-    return exportDouble(name, 0.0);
-  }
-
-  /**
-   * Creates and exports an {@link AtomicDouble} with initial value.
-   *
-   * @param name The name to export the stat with.
-   * @param initialValue The initial stat value.
-   * @return A reference to the {@link AtomicDouble} created.
-   */
-  public static AtomicDouble exportDouble(String name, double initialValue) {
-    return export(name, new AtomicDouble(initialValue));
-  }
-
-  /**
-   * Exports a metric that tracks the size of a collection.
-   *
-   * @param name Name of the stat to export.
-   * @param collection Collection whose size should be tracked.
-   */
-  public static void exportSize(String name, final Collection<?> collection) {
-    export(new StatImpl<Integer>(name) {
-      @Override public Integer read() {
-        return collection.size();
-      }
-    });
-  }
-
-  /**
-   * Exports a metric that tracks the size of a map.
-   *
-   * @param name Name of the stat to export.
-   * @param map Map whose size should be tracked.
-   */
-  public static void exportSize(String name, final Map<?, ?> map) {
-    export(new StatImpl<Integer>(name) {
-      @Override public Integer read() {
-        return map.size();
-      }
-    });
-  }
-
-  /**
-   * Exports a metric that tracks the size of a cache.
-   *
-   * @param name Name of the stat to export.
-   * @param cache Cache whose size should be tracked.
-   */
-  public static void exportSize(String name, final Cache<?, ?> cache) {
-    export(new StatImpl<Long>(name) {
-      @Override public Long read() {
-        return cache.size();
-      }
-    });
-  }
-
-  /**
-   * Exports a 'static' statistic, which will not be registered for time 
series tracking.
-   *
-   * @param var Variable to statically export.
-   * @return A reference back to the provided {@link Stat}.
-   */
-  public static <T> Stat<T> exportStatic(Stat<T> var) {
-    String validatedName = 
validateName(MorePreconditions.checkNotBlank(var.getName()));
-    exportStaticInternal(validatedName, var);
-    return var;
-  }
-
-  private static void exportStaticInternal(String name, Stat<?> stat) {
-    if (VAR_MAP.put(name, stat) != null) {
-      LOG.warning("Warning - exported variable collision on " + name);
-    }
-  }
-
-  /**
-   * Fetches all registered stat.
-   *
-   * @return An iterable of all registered stats.
-   */
-  public static Iterable<Stat<?>> getVariables() {
-    return ImmutableList.copyOf(VAR_MAP.values());
-  }
-
-  static Iterable<RecordingStat<? extends Number>> getNumericVariables() {
-    return ImmutableList.copyOf(ORDERED_NUMERIC_STATS);
-  }
-
-  @VisibleForTesting
-  public static void flush() {
-    VAR_MAP.clear();
-    ORDERED_NUMERIC_STATS.clear();
-    NUMERIC_STATS.invalidateAll();
-  }
-
-  public static <T> Stat<T> getVariable(String name) {
-    MorePreconditions.checkNotBlank(name);
-    @SuppressWarnings("unchecked")
-    Stat<T> stat = (Stat<T>) VAR_MAP.get(name);
-    return stat;
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/StatsProvider.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/stats/StatsProvider.java 
b/commons/src/main/java/com/twitter/common/stats/StatsProvider.java
deleted file mode 100644
index 6599f94..0000000
--- a/commons/src/main/java/com/twitter/common/stats/StatsProvider.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats;
-
-import com.google.common.base.Supplier;
-
-import java.util.concurrent.atomic.AtomicLong;
-
-/**
- * A minimal interface to a Stats repository.
- *
- * @author John Sirois
- */
-public interface StatsProvider {
-
-  /**
-   * Creates and exports a counter for tracking.
-   *
-   * @param name The name to export the stat with.
-   * @return A reference to the counter that will be tracked for incrementing.
-   */
-  AtomicLong makeCounter(String name);
-
-  /**
-   * Exports a read-only value for tracking.
-   *
-   * @param name The name of the variable to export.
-   * @param gauge The supplier of the instantaneous values to export.
-   * @param <T> The type of number exported by the variable.
-   * @return A reference to the stat that was stored.
-   */
-  <T extends Number> Stat<T> makeGauge(String name, Supplier<T> gauge);
-
-  /**
-   * Gets a stats provider that does not track stats in an internal time 
series repository.
-   * The stored variables will only be available as instantaneous values.
-   *
-   * @return A stats provider that creates untracked stats.
-   */
-  StatsProvider untracked();
-
-  /**
-   * A stat for tracking service requests.
-   */
-  interface RequestTimer {
-
-    /**
-     * Accumulates a request and its latency.
-     *
-     * @param latencyMicros The elapsed time required to complete the request.
-     */
-    void requestComplete(long latencyMicros);
-
-    /**
-     * Accumulates the error counter and the request counter.
-     */
-    void incErrors();
-
-    /**
-     * Accumulates the reconnect counter.
-     */
-    void incReconnects();
-
-    /**
-     * Accumulates the timeout counter.
-     */
-    void incTimeouts();
-  }
-
-  /**
-   * Creates and exports a sets of stats that allows for typical rROC request 
tracking.
-   *
-   * @param name The name to export the stat with.
-   * @return A reference to the request timer that can be used to track RPCs.
-   */
-  RequestTimer makeRequestTimer(String name);
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/TimeSeries.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/stats/TimeSeries.java 
b/commons/src/main/java/com/twitter/common/stats/TimeSeries.java
deleted file mode 100644
index d35521c..0000000
--- a/commons/src/main/java/com/twitter/common/stats/TimeSeries.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats;
-
-import java.util.Calendar;
-
-/**
- * A time series of values.
- *
- * @author William Farner
- */
-public interface TimeSeries {
-
-  /**
-   * A name describing this time series.
-   *
-   * @return The name of this time series data.
-   */
-  public String getName();
-
-  /**
-   * A series of numbers representing regular samples of a variable.
-   *
-   * @return The time series of sample values.
-   */
-  public Iterable<Number> getSamples();
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/TimeSeriesRepository.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/stats/TimeSeriesRepository.java 
b/commons/src/main/java/com/twitter/common/stats/TimeSeriesRepository.java
deleted file mode 100644
index 412036f..0000000
--- a/commons/src/main/java/com/twitter/common/stats/TimeSeriesRepository.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats;
-
-import java.util.Set;
-
-import com.twitter.common.application.ShutdownRegistry;
-
-/**
- * A repository for time series data.
- *
- * @author William Farner
- */
-public interface TimeSeriesRepository {
-
-  /**
-   * Starts the time series sampler.
-   *
-   * @param shutdownRegistry An action registry that the repository can use to 
register a shutdown
-   *    for the sampler.
-   */
-  public void start(ShutdownRegistry shutdownRegistry);
-
-  /**
-   * Fetches the names of all available time series.
-   *
-   * @return Available time series, which can then be obtained by calling 
{@link #get(String)}.
-   */
-  public Set<String> getAvailableSeries();
-
-  /**
-   * Fetches a time series by name.
-   *
-   * @param name The name of the time series to fetch.
-   * @return The time series registered with the given name, or {@code null} 
if no such time series
-   *     has been registered.
-   */
-  public TimeSeries get(String name);
-
-  /**
-   * Gets an ordered iterable of the timestamps that all timeseries were 
sampled at.
-   *
-   * @return All current timestamps.
-   */
-  public Iterable<Number> getTimestamps();
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/TimeSeriesRepositoryImpl.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/stats/TimeSeriesRepositoryImpl.java 
b/commons/src/main/java/com/twitter/common/stats/TimeSeriesRepositoryImpl.java
deleted file mode 100644
index 3883e39..0000000
--- 
a/commons/src/main/java/com/twitter/common/stats/TimeSeriesRepositoryImpl.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats;
-
-import java.util.Set;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-
-import com.twitter.common.application.ShutdownRegistry;
-import com.twitter.common.base.Command;
-import com.twitter.common.collections.BoundedQueue;
-import com.twitter.common.quantity.Amount;
-import com.twitter.common.quantity.Time;
-import com.twitter.common.util.Clock;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * A simple in-memory repository for exported variables.
- *
- * @author John Sirois
- */
-public class TimeSeriesRepositoryImpl implements TimeSeriesRepository {
-
-  private static final Logger LOG = 
Logger.getLogger(TimeSeriesRepositoryImpl.class.getName());
-
-  /**
-   * {@literal @Named} binding key for the sampling period.
-   */
-  public static final String SAMPLE_PERIOD =
-      "com.twitter.common.stats.TimeSeriesRepositoryImpl.SAMPLE_PERIOD";
-
-  /**
-   * {@literal @Named} binding key for the maximum number of retained samples.
-   */
-  public static final String SAMPLE_RETENTION_PERIOD =
-      
"com.twitter.common.stats.TimeSeriesRepositoryImpl.SAMPLE_RETENTION_PERIOD";
-
-  private final SlidingStats scrapeDuration = new 
SlidingStats("variable_scrape", "micros");
-
-  // We store TimeSeriesImpl, which allows us to add samples.
-  private final LoadingCache<String, TimeSeriesImpl> timeSeries;
-  private final BoundedQueue<Number> timestamps;
-
-  private final StatRegistry statRegistry;
-  private final Amount<Long, Time> samplePeriod;
-  private final int retainedSampleLimit;
-
-  @Inject
-  public TimeSeriesRepositoryImpl(
-      StatRegistry statRegistry,
-      @Named(SAMPLE_PERIOD) Amount<Long, Time> samplePeriod,
-      @Named(SAMPLE_RETENTION_PERIOD) final Amount<Long, Time> 
retentionPeriod) {
-    this.statRegistry = checkNotNull(statRegistry);
-    this.samplePeriod = checkNotNull(samplePeriod);
-    Preconditions.checkArgument(samplePeriod.getValue() > 0, "Sample period 
must be positive.");
-    checkNotNull(retentionPeriod);
-    Preconditions.checkArgument(retentionPeriod.getValue() > 0,
-        "Sample retention period must be positive.");
-
-    retainedSampleLimit = (int) (retentionPeriod.as(Time.SECONDS) / 
samplePeriod.as(Time.SECONDS));
-    Preconditions.checkArgument(retainedSampleLimit > 0,
-        "Sample retention period must be greater than sample period.");
-
-    timeSeries = CacheBuilder.newBuilder().build(
-        new CacheLoader<String, TimeSeriesImpl>() {
-          @Override public TimeSeriesImpl load(final String name) {
-            TimeSeriesImpl timeSeries = new TimeSeriesImpl(name);
-
-            // Backfill so we have data for pre-accumulated timestamps.
-            int numTimestamps = timestamps.size();
-            if (numTimestamps != 0) {
-              for (int i = 1; i < numTimestamps; i++) {
-                timeSeries.addSample(0L);
-              }
-            }
-
-            return timeSeries;
-          }
-        });
-
-    timestamps = new BoundedQueue<Number>(retainedSampleLimit);
-  }
-
-  /**
-   * Starts the variable sampler, which will fetch variables {@link Stats} on 
the given period.
-   *
-   */
-  @Override
-  public void start(ShutdownRegistry shutdownRegistry) {
-    checkNotNull(shutdownRegistry);
-    checkNotNull(samplePeriod);
-    Preconditions.checkArgument(samplePeriod.getValue() > 0);
-
-    final ScheduledExecutorService executor = new 
ScheduledThreadPoolExecutor(1 /* One thread. */,
-        new 
ThreadFactoryBuilder().setNameFormat("VariableSampler-%d").setDaemon(true).build());
-
-    final AtomicBoolean shouldSample = new AtomicBoolean(true);
-    final Runnable sampler = new Runnable() {
-      @Override public void run() {
-        if (shouldSample.get()) {
-          try {
-            runSampler(Clock.SYSTEM_CLOCK);
-          } catch (Exception e) {
-            LOG.log(Level.SEVERE, "ignoring runSampler failure", e);
-          }
-        }
-      }
-    };
-
-    executor.scheduleAtFixedRate(sampler, samplePeriod.getValue(), 
samplePeriod.getValue(),
-        samplePeriod.getUnit().getTimeUnit());
-    shutdownRegistry.addAction(new Command() {
-      @Override
-      public void execute() throws RuntimeException {
-        shouldSample.set(false);
-        executor.shutdown();
-        LOG.info("Variable sampler shut down");
-      }
-    });
-  }
-
-  @VisibleForTesting
-  synchronized void runSampler(Clock clock) {
-    timestamps.add(clock.nowMillis());
-
-    long startNanos = clock.nowNanos();
-    for (RecordingStat<? extends Number> var : statRegistry.getStats()) {
-      timeSeries.getUnchecked(var.getName()).addSample(var.sample());
-    }
-    scrapeDuration.accumulate(
-        Amount.of(clock.nowNanos() - startNanos, 
Time.NANOSECONDS).as(Time.MICROSECONDS));
-  }
-
-  @Override
-  public synchronized Set<String> getAvailableSeries() {
-    return ImmutableSet.copyOf(timeSeries.asMap().keySet());
-  }
-
-  @Override
-  public synchronized TimeSeries get(String name) {
-    if (!timeSeries.asMap().containsKey(name)) return null;
-    return timeSeries.getUnchecked(name);
-  }
-
-  @Override
-  public synchronized Iterable<Number> getTimestamps() {
-    return Iterables.unmodifiableIterable(timestamps);
-  }
-
-  private class TimeSeriesImpl implements TimeSeries {
-    private final String name;
-    private final BoundedQueue<Number> samples;
-
-    TimeSeriesImpl(String name) {
-      this.name = name;
-      samples = new BoundedQueue<Number>(retainedSampleLimit);
-    }
-
-    @Override public String getName() {
-      return name;
-    }
-
-    void addSample(Number value) {
-      samples.add(value);
-    }
-
-    @Override public Iterable<Number> getSamples() {
-      return Iterables.unmodifiableIterable(samples);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/Windowed.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/stats/Windowed.java 
b/commons/src/main/java/com/twitter/common/stats/Windowed.java
deleted file mode 100644
index f26c7da..0000000
--- a/commons/src/main/java/com/twitter/common/stats/Windowed.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats;
-
-import java.lang.reflect.Array;
-
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
-
-import com.twitter.common.quantity.Amount;
-import com.twitter.common.quantity.Time;
-import com.twitter.common.util.Clock;
-
-/**
- * Windowed is an abstraction that let you span a class across a sliding 
window.
- * It creates a ring buffer of T and reuse the buffer after clearing it or use 
a new one (via
- * the {@code clearer} function).
- *
- * <pre>
- *          tenured instances
- *  ++++++++++++++++++++++++++++++++++
- * [----A-----][-----B----][-----C----][-----D----]
- *                                      ++++++++++
- *                                    current instance
- * </pre>
- *
- * The schema above represents the valid instances over time
- * (A,B,C) are the tenured ones
- * D is the current instance
- */
-public abstract class Windowed<T> {
-  private Class<T> clazz;
-  protected final T[] buffers;
-  private final long sliceDuration;
-  private final Clock clock;
-  private long index = -1L;
-  private Function<T, T> clearer;
-
-  /**
-   * @param clazz the type of the underlying element T
-   * @param window the length of the window
-   * @param slices the number of slices (the window will be divided into 
{@code slices} slices)
-   * @param sliceProvider the supplier of element
-   * @param clearer the function that clear (or re-create) an element
-   * @param clock  the clock used for to select the appropriate histogram
-   */
-  public Windowed(Class<T> clazz, Amount<Long, Time> window, int slices,
-      Supplier<T> sliceProvider, Function<T, T> clearer, Clock clock) {
-    Preconditions.checkNotNull(window);
-    // Ensure that we have at least 1ms per slice
-    Preconditions.checkArgument(window.as(Time.MILLISECONDS) > (slices + 1));
-    Preconditions.checkArgument(window.as(Time.MILLISECONDS) > (slices + 1));
-    Preconditions.checkArgument(0 < slices);
-    Preconditions.checkNotNull(sliceProvider);
-    Preconditions.checkNotNull(clock);
-
-    this.clazz = clazz;
-    this.sliceDuration = window.as(Time.MILLISECONDS) / slices;
-    @SuppressWarnings("unchecked") // safe because we have the clazz proof of 
type H
-    T[] bufs = (T[]) Array.newInstance(clazz, slices + 1);
-    for (int i = 0; i < bufs.length; i++) {
-      bufs[i] = sliceProvider.get();
-    }
-    this.buffers = bufs;
-    this.clearer = clearer;
-    this.clock = clock;
-  }
-
-  /**
-   * Return the index of the latest Histogram.
-   * You have to modulo it with buffer.length before accessing the array with 
this number.
-   */
-  protected int getCurrentIndex() {
-    long now = clock.nowMillis();
-    return (int) (now / sliceDuration);
-  }
-
-  /**
-   * Check for expired elements and return the current one.
-   */
-  protected T getCurrent() {
-    sync(getCurrentIndex());
-    return buffers[(int) (index % buffers.length)];
-  }
-
-  /**
-   * Check for expired elements and return all the tenured (old) ones.
-   */
-  protected T[] getTenured() {
-    long currentIndex = getCurrentIndex();
-    sync(currentIndex);
-    @SuppressWarnings("unchecked") // safe because we have the clazz proof of 
type T
-    T[] tmp = (T[]) Array.newInstance(clazz, buffers.length - 1);
-    for (int i = 0; i < tmp.length; i++) {
-      int idx = (int) ((currentIndex + 1 + i) % buffers.length);
-      tmp[i] = buffers[idx];
-    }
-    return tmp;
-  }
-
-  /**
-   * Clear all the elements.
-   */
-  public void clear() {
-    for (int i = 0; i <= buffers.length; i++) {
-      buffers[i] = clearer.apply(buffers[i]);
-    }
-  }
-
-  /**
-   * Synchronize elements with a point in time.
-   * i.e. Check for expired ones and clear them, and update the index variable.
-   */
-  protected void sync(long currentIndex) {
-    if (index < currentIndex) {
-      long from = Math.max(index + 1, currentIndex - buffers.length + 1);
-      for (long i = from; i <= currentIndex; i++) {
-        int idx = (int) (i % buffers.length);
-        buffers[idx] = clearer.apply(buffers[idx]);
-      }
-      index = currentIndex;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/WindowedApproxHistogram.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/stats/WindowedApproxHistogram.java 
b/commons/src/main/java/com/twitter/common/stats/WindowedApproxHistogram.java
deleted file mode 100644
index 55f80e8..0000000
--- 
a/commons/src/main/java/com/twitter/common/stats/WindowedApproxHistogram.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Supplier;
-
-import com.twitter.common.quantity.Amount;
-import com.twitter.common.quantity.Data;
-import com.twitter.common.quantity.Time;
-import com.twitter.common.util.Clock;
-
-/**
- * WindowedApproxHistogram is an implementation of WindowedHistogram with an
- * ApproximateHistogram as the underlying storing histogram.
- */
-public class WindowedApproxHistogram extends 
WindowedHistogram<ApproximateHistogram> {
-  @VisibleForTesting public static final int DEFAULT_SLICES = 3;
-  @VisibleForTesting public static final Amount<Long, Time> DEFAULT_WINDOW =
-      Amount.of(1L, Time.MINUTES);
-  @VisibleForTesting public static final Amount<Long, Data> DEFAULT_MAX_MEMORY 
= Amount.of(
-      (DEFAULT_SLICES + 1) * 
ApproximateHistogram.DEFAULT_MAX_MEMORY.as(Data.BYTES), Data.BYTES);
-
-  /**
-   * Create a {@code WindowedApproxHistogram } with a window duration of 
{@code window} and
-   * decomposed in {@code slices} Histograms. Those Histograms will 
individually take less than
-   * {@code maxMemory / (slices + 1)}. The clock will be used to find the 
correct index in the
-   * ring buffer.
-   *
-   * @param window duration of the window
-   * @param slices number of slices in the window
-   * @param maxMemory maximum memory used by the whole histogram
-   */
-  public WindowedApproxHistogram(Amount<Long, Time> window, final int slices,
-      final Amount<Long, Data> maxMemory, Clock clock) {
-    super(ApproximateHistogram.class, window, slices,
-        new Supplier<ApproximateHistogram>() {
-          private Amount<Long, Data> perHistogramMemory = Amount.of(
-              maxMemory.as(Data.BYTES) / (slices + 1), Data.BYTES);
-          @Override
-          public ApproximateHistogram get() {
-            return new ApproximateHistogram(perHistogramMemory);
-          }
-        },
-        new Function<ApproximateHistogram[], Histogram>() {
-          @Override
-          public Histogram apply(ApproximateHistogram[] histograms) {
-            return ApproximateHistogram.merge(histograms);
-          }
-        }, clock);
-  }
-
-  /**
-   * Create a {@code WindowedApproxHistogram } with a window duration of 
{@code window} and
-   * decomposed in {@code slices} Histograms. Those Histograms will 
individually have a
-   * precision of {@code precision / (slices + 1)}. The ticker will be used to 
measure elapsed
-   * time in the WindowedHistogram.
-   *
-   * @param window duration of the window
-   * @param slices number of slices in the window
-   * @param precision precision of the whole histogram
-   */
-  public WindowedApproxHistogram(Amount<Long, Time> window, final int slices,
-      final Precision precision, Clock clock) {
-    super(ApproximateHistogram.class, window, slices,
-        new Supplier<ApproximateHistogram>() {
-          private Precision perHistogramPrecision = new Precision(
-              precision.getEpsilon(), precision.getN() / (slices + 1));
-          @Override
-          public ApproximateHistogram get() {
-            return new ApproximateHistogram(perHistogramPrecision);
-          }
-        },
-        new Function<ApproximateHistogram[], Histogram>() {
-          @Override
-          public Histogram apply(ApproximateHistogram[] histograms) {
-            return ApproximateHistogram.merge(histograms);
-          }
-        }, clock);
-  }
-
-  /**
-   * Equivalent to calling
-   * {@link #WindowedApproxHistogram(Amount, int, Amount, Clock)}
-   * with the System clock.
-   */
-  public WindowedApproxHistogram(Amount<Long, Time> window, int slices,
-      Amount<Long, Data> maxMemory) {
-    this(window, slices, maxMemory, Clock.SYSTEM_CLOCK);
-  }
-
-  /**
-   * Equivalent to calling
-   * {@link #WindowedApproxHistogram(Amount, int, Amount)}
-   * with default window and slices.
-   */
-  public WindowedApproxHistogram(Amount<Long, Data> maxMemory) {
-    this(DEFAULT_WINDOW, DEFAULT_SLICES, maxMemory);
-  }
-
-  /**
-   * Equivalent to calling
-   * {@link #WindowedApproxHistogram(Amount, int, Precision, Clock)}
-   * with the System clock.
-   */
-  public WindowedApproxHistogram(Amount<Long, Time> window, int slices, 
Precision precision) {
-    this(window, slices, precision, Clock.SYSTEM_CLOCK);
-  }
-
-  /**
-   * Equivalent to calling
-   * {@link #WindowedApproxHistogram(Amount, int, Precision)}
-   * with default window and slices.
-   */
-  public WindowedApproxHistogram(Precision precision) {
-    this(DEFAULT_WINDOW, DEFAULT_SLICES, precision);
-  }
-
-  /**
-   * Equivalent to calling
-   * {@link #WindowedApproxHistogram(Amount, int, Amount, Clock)}
-   * with the default maxMemory parameter and System clock.
-   */
-  public WindowedApproxHistogram(Amount<Long, Time> window, int slices) {
-    this(window, slices, DEFAULT_MAX_MEMORY, Clock.SYSTEM_CLOCK);
-  }
-
-  /**
-   * WindowedApproxHistogram constructor with default values.
-   */
-  public WindowedApproxHistogram() {
-    this(DEFAULT_WINDOW, DEFAULT_SLICES, DEFAULT_MAX_MEMORY, 
Clock.SYSTEM_CLOCK);
-  }
-
-  /**
-   * WindowedApproxHistogram constructor with custom Clock (for testing 
purposes only).
-   */
-  @VisibleForTesting public WindowedApproxHistogram(Clock clock) {
-    this(DEFAULT_WINDOW, DEFAULT_SLICES, DEFAULT_MAX_MEMORY, clock);
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/WindowedHistogram.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/stats/WindowedHistogram.java 
b/commons/src/main/java/com/twitter/common/stats/WindowedHistogram.java
deleted file mode 100644
index 3b919c1..0000000
--- a/commons/src/main/java/com/twitter/common/stats/WindowedHistogram.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats;
-
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
-
-import com.twitter.common.quantity.Amount;
-import com.twitter.common.quantity.Time;
-import com.twitter.common.util.Clock;
-
-/**
- * Histogram windowed over time.
- * <p>
- * This histogram is composed of a series of ({@code slices} + 1) histograms 
representing a window
- * of {@code range} duration. We only update the latest one, and we query the 
oldest ones (i.e. all
- * histograms except the head).
- * </p>
- * <pre>
- *      range
- * <------------->
- * [AAA][BBB][CCC][DDD]   here slices = 3
- * --------------------->
- *                t1  t2
- *
- *  For t in [t1,t2) we:
- *  insert elements in DDD
- *  query quantile over [AAA][BBB][CCC]
- * </pre>
- * <p>
- * When {@code t} is in {@code [t1, t2)} we insert value into the latest 
histogram (DDD here),
- * when we query the histogram, we 'merge' all other histograms (all except 
the latest) and query
- * it. when {@code t > t2} the oldest histogram become the newest (like in a 
ring buffer) and
- * so on ...
- * </p>
- * <p>
- * Note: We use MergedHistogram class to represent a merged histogram without 
actually
- * merging the underlying histograms.
- * </p>
- */
-public class WindowedHistogram<H extends Histogram> extends Windowed<H> 
implements Histogram {
-
-  private long mergedHistIndex = -1L;
-  private Function<H[], Histogram> merger;
-  private Histogram mergedHistogram = null;
-
-  /**
-   * Create a WindowedHistogram of {@code slices + 1} elements over a time 
{@code window}.
-   * This code is independent from the implementation of Histogram, you just 
need to provide
-   * a {@code Supplier<H>} to create the histograms and a {@code Function<H[], 
Histogram>} to
-   * merge them.
-   *
-   * @param clazz the type of the underlying Histogram H
-   * @param window the length of the window
-   * @param slices the number of slices (the window will be divided into 
{@code slices} slices)
-   * @param sliceProvider the supplier of histogram
-   * @param merger the function that merge an array of histogram H[] into a 
single Histogram
-   * @param clock the clock used for to select the appropriate histogram
-   */
-  public WindowedHistogram(Class<H> clazz, Amount<Long, Time> window, int 
slices,
-        Supplier<H> sliceProvider, Function<H[], Histogram> merger, Clock 
clock) {
-    super(clazz, window, slices, sliceProvider, new Function<H, H>() {
-      @Override
-      public H apply(H h) { h.clear(); return h; }
-    }, clock);
-    Preconditions.checkNotNull(merger);
-
-    this.merger = merger;
-  }
-
-  @Override
-  public synchronized void add(long x) {
-    getCurrent().add(x);
-  }
-
-  @Override
-  public synchronized void clear() {
-    for (Histogram h: buffers) {
-      h.clear();
-    }
-  }
-
-  @Override
-  public synchronized long getQuantile(double quantile) {
-    long currentIndex = getCurrentIndex();
-    if (mergedHistIndex < currentIndex) {
-      H[] tmp = getTenured();
-      mergedHistogram = merger.apply(tmp);
-      mergedHistIndex = currentIndex;
-    }
-    return mergedHistogram.getQuantile(quantile);
-  }
-
-  @Override
-  public synchronized long[] getQuantiles(double[] quantiles) {
-    return Histograms.extractQuantiles(this, quantiles);
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/WindowedStatistics.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/stats/WindowedStatistics.java 
b/commons/src/main/java/com/twitter/common/stats/WindowedStatistics.java
deleted file mode 100644
index 560cd8a..0000000
--- a/commons/src/main/java/com/twitter/common/stats/WindowedStatistics.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats;
-
-import com.google.common.base.Supplier;
-import com.google.common.base.Function;
-
-import com.twitter.common.quantity.Amount;
-import com.twitter.common.quantity.Time;
-import com.twitter.common.util.Clock;
-
-/**
- * Keep track of statistics over a set of value in a sliding window.
- * WARNING: The computation of the statistics needs to be explicitly requested 
with
- * {@code refresh()} before reading any statistics.
- *
- * @see Windowed class for more details about how the window is parametrized.
- */
-public class WindowedStatistics extends Windowed<Statistics> implements 
StatisticsInterface {
-  private int lastIndex = -1;
-  private double variance = 0.0;
-  private double mean = 0.0;
-  private long sum = 0L;
-  private long min = Long.MAX_VALUE;
-  private long max = Long.MIN_VALUE;
-  private long populationSize = 0L;
-
-  public WindowedStatistics(Amount<Long, Time> window, int slices, Clock 
clock) {
-    super(Statistics.class, window, slices,
-        new Supplier<Statistics>() {
-          @Override public Statistics get() { return new Statistics(); }
-        },
-        new Function<Statistics, Statistics>() {
-          @Override public Statistics apply(Statistics s) { s.clear(); return 
s; }
-        },
-        clock);
-  }
-
-  /**
-   * Construct a Statistics sliced over time in {@code slices + 1} windows.
-   * The {@code window} parameter represents the total window, that will be 
sliced into
-   * {@code slices + 1} parts.
-   *
-   * Ex: WindowedStatistics(Amount.of(1L, Time.MINUTES), 3) will be sliced 
like this:
-   * <pre>
-   *        20s         20s         20s         20s
-   *   [----A-----][-----B----][-----C----][-----D----]
-   * </pre>
-   * The current window is 'D' (the one you insert elements into) and the 
tenured windows
-   * are 'A', 'B', 'C' (the ones you read elements from).
-   */
-  public WindowedStatistics(Amount<Long, Time> window, int slices) {
-    this(window, slices, Clock.SYSTEM_CLOCK);
-  }
-
-  /**
-   * Equivalent to calling {@link #WindowedStatistics(Amount, int)} with a 1 
minute window
-   * and 3 slices.
-   */
-  public WindowedStatistics() {
-    this(Amount.of(1L, Time.MINUTES), 3, Clock.SYSTEM_CLOCK);
-  }
-
-  public void accumulate(long value) {
-    getCurrent().accumulate(value);
-  }
-
-  /**
-   * Compute all the statistics in one pass.
-   */
-  public void refresh() {
-    int currentIndex = getCurrentIndex();
-    if (lastIndex != currentIndex) {
-      lastIndex = currentIndex;
-      double x = 0.0;
-      variance = 0.0;
-      mean = 0.0;
-      sum = 0L;
-      populationSize = 0L;
-      min = Long.MAX_VALUE;
-      max = Long.MIN_VALUE;
-      for (Statistics s : getTenured()) {
-        if (s.populationSize() == 0) {
-          continue;
-        }
-        x += s.populationSize() * (s.variance() + s.mean() * s.mean());
-        sum += s.sum();
-        populationSize += s.populationSize();
-        min = Math.min(min, s.min());
-        max = Math.max(max, s.max());
-      }
-      if (populationSize != 0) {
-        mean = ((double) sum) / populationSize;
-        variance = x / populationSize - mean * mean;
-      }
-    }
-  }
-
-  /**
-   * WARNING: You need to call refresh() to recompute the variance
-   * @return the variance of the aggregated windows
-   */
-  public double variance() {
-    return variance;
-  }
-
-  /**
-   * WARNING: You need to call refresh() to recompute the variance
-   * @return the standard deviation of the aggregated windows
-   */
-  public double standardDeviation() {
-    return Math.sqrt(variance());
-  }
-
-  /**
-   * WARNING: You need to call refresh() to recompute the variance
-   * @return the mean of the aggregated windows
-   */
-  public double mean() {
-    return mean;
-  }
-
-  /**
-   * WARNING: You need to call refresh() to recompute the variance
-   * @return the sum of the aggregated windows
-   */
-  public long sum() {
-    return sum;
-  }
-
-  /**
-   * WARNING: You need to call refresh() to recompute the variance
-   * @return the min of the aggregated windows
-   */
-  public long min() {
-    return min;
-  }
-
-  /**
-   * WARNING: You need to call refresh() to recompute the variance
-   * @return the max of the aggregated windows
-   */
-  public long max() {
-    return max;
-  }
-
-  /**
-   * WARNING: You need to call refresh() to recompute the variance
-   * @return the range of the aggregated windows
-   */
-  public long range() {
-    return max - min;
-  }
-
-  /**
-   * WARNING: You need to call refresh() to recompute the variance
-   * @return the population size of the aggregated windows
-   */
-  public long populationSize() {
-    return populationSize;
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/stats/testing/RealHistogram.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/stats/testing/RealHistogram.java 
b/commons/src/main/java/com/twitter/common/stats/testing/RealHistogram.java
deleted file mode 100644
index cc31cee..0000000
--- a/commons/src/main/java/com/twitter/common/stats/testing/RealHistogram.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.stats.testing;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import com.twitter.common.stats.Histogram;
-import com.twitter.common.stats.Histograms;
-
-public class RealHistogram implements Histogram {
-  private final List<Long> buffer = new ArrayList<Long>();
-
-  @Override public void add(long x) {
-    buffer.add(x);
-  }
-
-  @Override public void clear() {
-    buffer.clear();
-  }
-
-  @Override public long getQuantile(double quantile) {
-    Collections.sort(buffer);
-    return buffer.get((int) (quantile * buffer.size()));
-  }
-
-  @Override public long[] getQuantiles(double[] quantiles) {
-    return Histograms.extractQuantiles(this, quantiles);
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/testing/TearDownRegistry.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/testing/TearDownRegistry.java 
b/commons/src/main/java/com/twitter/common/testing/TearDownRegistry.java
deleted file mode 100644
index 28639ef..0000000
--- a/commons/src/main/java/com/twitter/common/testing/TearDownRegistry.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.testing;
-
-import com.google.common.base.Preconditions;
-import com.google.common.testing.TearDown;
-import com.google.common.testing.TearDownAccepter;
-
-import com.twitter.common.application.ShutdownRegistry;
-import com.twitter.common.base.ExceptionalCommand;
-
-/**
- * An action registry suitable for use as a shutdownRegistry in tests that 
extend
- * {@link com.google.common.testing.junit4.TearDownTestCase}.
- *
- * @author John Sirois
- */
-public class TearDownRegistry implements ShutdownRegistry {
-  private final TearDownAccepter tearDownAccepter;
-
-  /**
-   * Creates a new tear down registry that delegates execution of shutdown 
actions to a
-   * {@code tearDownAccepter}.
-   *
-   * @param tearDownAccepter A tear down accepter that will be used to 
register shutdown actions
-   *     with.
-   */
-  public TearDownRegistry(TearDownAccepter tearDownAccepter) {
-    this.tearDownAccepter = Preconditions.checkNotNull(tearDownAccepter);
-  }
-
-  @Override
-  public <E extends Exception, T extends ExceptionalCommand<E>> void 
addAction(final T action) {
-    tearDownAccepter.addTearDown(new TearDown() {
-      @Override public void tearDown() throws Exception {
-        action.execute();
-      }
-    });
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/testing/easymock/EasyMockTest.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/testing/easymock/EasyMockTest.java 
b/commons/src/main/java/com/twitter/common/testing/easymock/EasyMockTest.java
deleted file mode 100644
index 816dda4..0000000
--- 
a/commons/src/main/java/com/twitter/common/testing/easymock/EasyMockTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.testing.easymock;
-
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.WildcardType;
-
-import com.google.common.base.Preconditions;
-import com.google.common.reflect.TypeToken;
-import com.google.common.testing.TearDown;
-import com.google.common.testing.junit4.TearDownTestCase;
-
-import org.easymock.Capture;
-import org.easymock.EasyMock;
-import org.easymock.IMocksControl;
-import org.junit.Before;
-
-import static org.easymock.EasyMock.createControl;
-
-/**
- * A baseclass for tests that use EasyMock.  A new {@link IMocksControl 
control} is set up before
- * each test and the mocks created and replayed with it are verified during 
tear down.
- *
- * @author John Sirois
- */
-public abstract class EasyMockTest extends TearDownTestCase {
-  protected IMocksControl control;
-
-  /**
-   * Creates an EasyMock {@link #control} for tests to use that will be 
automatically
-   * {@link IMocksControl#verify() verified} on tear down.
-   */
-  @Before
-  public final void setupEasyMock() {
-    control = createControl();
-    addTearDown(new TearDown() {
-      @Override public void tearDown() {
-        control.verify();
-      }
-    });
-  }
-
-  /**
-   * Creates an EasyMock mock with this test's control.  Will be
-   * {@link IMocksControl#verify() verified} in a tear down.
-   */
-  public <T> T createMock(Class<T> type) {
-    Preconditions.checkNotNull(type);
-    return control.createMock(type);
-  }
-
-  /**
-   * A class meant to be sub-classed in order to capture a generic type 
literal value.  To capture
-   * the type of a {@code List<String>} you would use: {@code new 
Clazz<List<String>>() {}}
-   */
-  public abstract static class Clazz<T> extends TypeToken {
-    Class<T> rawType() {
-      @SuppressWarnings("unchecked")
-      Class<T> rawType = (Class<T>) findRawType();
-      return rawType;
-    }
-
-    private Class<?> findRawType() {
-      if (getType() instanceof Class<?>) { // Plain old
-        return (Class<?>) getType();
-
-      } else if (getType() instanceof ParameterizedType) { // Nested type 
parameter
-        ParameterizedType parametrizedType = (ParameterizedType) getType();
-        Type rawType = parametrizedType.getRawType();
-        return (Class<?>) rawType;
-      } else if (getType() instanceof GenericArrayType) {
-        throw new IllegalStateException("cannot mock arrays, rejecting type: " 
+ getType());
-      } else if (getType() instanceof WildcardType) {
-        throw new IllegalStateException(
-            "wildcarded instantiations are not allowed in java, rejecting 
type: " + getType());
-      } else {
-        throw new IllegalArgumentException("Could not decode raw type for: " + 
getType());
-      }
-    }
-
-    public T createMock() {
-      return EasyMock.createMock(rawType());
-    }
-
-    public T createMock(IMocksControl control) {
-      return control.createMock(rawType());
-    }
-  }
-
-  /**
-   * Creates an EasyMock mock with this test's control.  Will be
-   * {@link IMocksControl#verify() verified} in a tear down.
-   *
-   * Allows for mocking of parameterized types without all the unchecked 
conversion warnings in a
-   * safe way.
-   */
-  public <T> T createMock(Clazz<T> type) {
-    Preconditions.checkNotNull(type);
-    return type.createMock(control);
-  }
-
-  /**
-   * A type-inferring convenience method for creating new captures.
-   */
-  public static <T> Capture<T> createCapture() {
-    return new Capture<T>();
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/testing/easymock/IterableEquals.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/testing/easymock/IterableEquals.java 
b/commons/src/main/java/com/twitter/common/testing/easymock/IterableEquals.java
deleted file mode 100644
index 5f68ef1..0000000
--- 
a/commons/src/main/java/com/twitter/common/testing/easymock/IterableEquals.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.testing.easymock;
-
-import java.util.Collection;
-import java.util.List;
-
-import com.google.common.collect.HashMultiset;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Multiset;
-
-import org.easymock.IArgumentMatcher;
-
-import static org.easymock.EasyMock.reportMatcher;
-
-/**
- * This EasyMock argument matcher tests Iterables for equality irrespective of 
order.
- *
- * @param <T> type argument for the Iterables being matched.
- */
-public class IterableEquals<T> implements IArgumentMatcher {
-  private final Multiset<T> elements = HashMultiset.create();
-
-  /**
-   * Constructs an IterableEquals object that tests for equality against the 
specified expected
-   * Iterable.
-   *
-   * @param expected an Iterable containing the elements that are expected, in 
any order.
-   */
-  public IterableEquals(Iterable<T> expected) {
-    Iterables.addAll(elements, expected);
-  }
-
-  @Override
-  public boolean matches(Object observed) {
-    if (observed instanceof Iterable<?>) {
-      Multiset<Object> observedElements = HashMultiset.create((Iterable<?>) 
observed);
-      return elements.equals(observedElements);
-    }
-    return false;
-  }
-
-  @Override
-  public void appendTo(StringBuffer buffer) {
-    buffer.append("eqIterable(").append(elements).append(")");
-  }
-
-  /**
-   * When used in EasyMock expectations, this matches an Iterable having the 
same elements in any
-   * order.
-   *
-   * @return null, to avoid a compile time error.
-   */
-  public static <T> Iterable<T> eqIterable(Iterable<T> in) {
-    reportMatcher(new IterableEquals(in));
-    return null;
-  }
-
-  /**
-   * When used in EasyMock expectations, this matches a List having the same 
elements in any order.
-   *
-   * @return null, to avoid a compile time error.
-   */
-  public static <T> List<T> eqList(Iterable<T> in) {
-    reportMatcher(new IterableEquals(in));
-    return null;
-  }
-
-  /**
-   * When used in EasyMock expectations, this matches a Collection having the 
same elements in any
-   * order.
-   *
-   * @return null, to avoid a compile time error.
-   */
-  public static <T> Collection<T> eqCollection(Iterable<T> in) {
-    reportMatcher(new IterableEquals(in));
-    return null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/testing/junit/rules/Retry.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/testing/junit/rules/Retry.java 
b/commons/src/main/java/com/twitter/common/testing/junit/rules/Retry.java
deleted file mode 100644
index 0d5ca97..0000000
--- a/commons/src/main/java/com/twitter/common/testing/junit/rules/Retry.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.testing.junit.rules;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Objects;
-
-import org.junit.rules.MethodRule;
-import org.junit.runners.model.FrameworkMethod;
-import org.junit.runners.model.Statement;
-
-/**
- * A test method annotation useful for smoking out flaky behavior in tests.
- *
- * @see Retry.Rule RetryRule needed to enable this annotation in a test class.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.METHOD)
-public @interface Retry {
-
-  /**
-   * The number of times to retry the test.
-   *
-   * When a {@link Retry.Rule} is installed and a test method is annotated for 
{@literal @Retry},
-   * it will be retried 0 to N times.  If times is negative, it is treated as 
0 and no retries are
-   * performed.  If times is &gt;= 1 then a successful execution of the 
annotated test method is
-   * retried until the 1st error, failure or otherwise up to {@code times} 
times.
-   */
-  int times() default 1;
-
-  /**
-   * Enables {@link Retry @Retry}able tests.
-   */
-  class Rule implements MethodRule {
-    private interface ThrowableFactory {
-      Throwable create(String message, Throwable cause);
-    }
-
-    private static Throwable annotate(
-        int tryNumber,
-        final int maxRetries,
-        Throwable cause,
-        String prefix,
-        ThrowableFactory throwableFactory) {
-
-      Throwable annotated =
-          throwableFactory.create(
-              String.format("%s on try %d of %d: %s", prefix, tryNumber, 
maxRetries + 1,
-                  Objects.firstNonNull(cause.getMessage(), "")), cause);
-      annotated.setStackTrace(cause.getStackTrace());
-      return annotated;
-    }
-
-    static class RetriedAssertionError extends AssertionError {
-      private final int tryNumber;
-      private final int maxRetries;
-
-      RetriedAssertionError(int tryNumber, int maxRetries, String message, 
Throwable cause) {
-        // We do a manual initCause here to be compatible with the Java 1.6 
AssertionError
-        // constructors.
-        super(message);
-        initCause(cause);
-
-        this.tryNumber = tryNumber;
-        this.maxRetries = maxRetries;
-      }
-
-      @VisibleForTesting
-      int getTryNumber() {
-        return tryNumber;
-      }
-
-      @VisibleForTesting
-      int getMaxRetries() {
-        return maxRetries;
-      }
-    }
-
-    private static Throwable annotate(final int tryNumber, final int 
maxRetries, AssertionError e) {
-      return annotate(tryNumber, maxRetries, e, "Failure", new 
ThrowableFactory() {
-        @Override public Throwable create(String message, Throwable cause) {
-          return new RetriedAssertionError(tryNumber, maxRetries, message, 
cause);
-        }
-      });
-    }
-
-    static class RetriedException extends Exception {
-      private final int tryNumber;
-      private final int maxRetries;
-
-      RetriedException(int tryNumber, int maxRetries, String message, 
Throwable cause) {
-        super(message, cause);
-        this.tryNumber = tryNumber;
-        this.maxRetries = maxRetries;
-      }
-
-      @VisibleForTesting
-      int getTryNumber() {
-        return tryNumber;
-      }
-
-      @VisibleForTesting
-      int getMaxRetries() {
-        return maxRetries;
-      }
-    }
-
-    private static Throwable annotate(final int tryNumber, final int 
maxRetries, Exception e) {
-      return annotate(tryNumber, maxRetries, e, "Error", new 
ThrowableFactory() {
-        @Override public Throwable create(String message, Throwable cause) {
-          return new RetriedException(tryNumber, maxRetries, message, cause);
-        }
-      });
-    }
-
-    @Override
-    public Statement apply(final Statement statement, FrameworkMethod method, 
Object receiver) {
-      Retry retry = method.getAnnotation(Retry.class);
-      if (retry == null || retry.times() <= 0) {
-        return statement;
-      } else {
-        final int times = retry.times();
-        return new Statement() {
-          @Override public void evaluate() throws Throwable {
-            for (int i = 0; i <= times; i++) {
-              try {
-                statement.evaluate();
-              } catch (AssertionError e) {
-                throw annotate(i + 1, times, e);
-              // We purposefully catch any non-assertion exceptions in order 
to tag the try count
-              // for erroring (as opposed to failing) tests.
-              // SUPPRESS CHECKSTYLE RegexpSinglelineJava
-              } catch (Exception e) {
-                throw annotate(i + 1, times, e);
-              }
-            }
-          }
-        };
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/testing/mockito/MockitoTest.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/testing/mockito/MockitoTest.java 
b/commons/src/main/java/com/twitter/common/testing/mockito/MockitoTest.java
deleted file mode 100644
index bb5c04b..0000000
--- a/commons/src/main/java/com/twitter/common/testing/mockito/MockitoTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.testing.mockito;
-
-import org.junit.Before;
-import org.mockito.MockitoAnnotations;
-
-/**
- * A base class for tests that use Mockito. Before each test, it initializes 
all the mocks
- * declared in the class.
- */
-public abstract class MockitoTest  {
-  /**
-   * Initializes all fields annotated with {@link org.mockito.Mock}.
-   */
-  @Before
-  public final void initMockito() {
-    MockitoAnnotations.initMocks(this);
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/thrift/Config.java
----------------------------------------------------------------------
diff --git a/commons/src/main/java/com/twitter/common/thrift/Config.java 
b/commons/src/main/java/com/twitter/common/thrift/Config.java
deleted file mode 100644
index 96f4f26..0000000
--- a/commons/src/main/java/com/twitter/common/thrift/Config.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.thrift;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.twitter.common.quantity.Amount;
-import com.twitter.common.quantity.Time;
-import com.twitter.common.stats.Stats;
-import com.twitter.common.stats.StatsProvider;
-
-/**
- * Represents the configuration for a thrift call.  Use {@link #builder()} to 
create a new one or
- * or {@link #builder(Config)} to create a new config based on another config.
- *
- * <p>If a deadline is specified, it acts as a global timeout for each thrift 
call made.
- * Obtaining connections, performing the remote call and executing retries are 
all expected to
- * complete within this deadline.  When the specified deadline is not met, an
- * {@link TTimeoutException} will be thrown.
- *
- * <p>If max retries is specified as zero (never retry), then the list of 
retryable exceptions are
- * ignored.  It is only when max retries is greater than zero that list of 
retryable exceptions is
- * used to determine if a particular failed call should be retried.
- *
- * @author John Sirois
- */
-public class Config {
-
-  /**
-   * Created a builder for a new {@link Config}.  Default values are as 
follows:
-   * <ul>
-   * <li>{@link #getRequestTimeout()} 0
-   * <li>{@link #getMaxRetries()} 0
-   * <li>{@link #getRetryableExceptions()} []
-   * <li>{@link #isDebug()} ()} false
-   * </ul>
-   */
-  public static Builder builder() {
-    return new Builder();
-  }
-
-  /**
-   *
-   * @param config the builder configuration to use
-   */
-  public static Builder builder(Config config) {
-    Preconditions.checkNotNull(config);
-    return new Builder(config);
-  }
-
-  private static final Amount<Long,Time> DEADLINE_BLOCKING = Amount.of(0L, 
Time.MILLISECONDS);
-
-  @VisibleForTesting
-  static final Amount<Long,Time> DEFAULT_CONNECT_TIMEOUT = Amount.of(5L, 
Time.SECONDS);
-
-  private Amount<Long, Time> requestTimeout = DEADLINE_BLOCKING;
-  private Amount<Long, Time> connectTimeout = DEFAULT_CONNECT_TIMEOUT;
-  private int maxRetries;
-  private ImmutableSet<Class<? extends Exception>> retryableExceptions = 
ImmutableSet.of();
-  private boolean debug = false;
-  private boolean enableStats = true;
-  private StatsProvider statsProvider = Stats.STATS_PROVIDER;
-
-  private Config() {
-    // defaults
-  }
-
-  private Config(Config copyFrom) {
-    requestTimeout = copyFrom.requestTimeout;
-    maxRetries = copyFrom.maxRetries;
-    retryableExceptions = copyFrom.retryableExceptions;
-    debug = copyFrom.debug;
-    statsProvider = copyFrom.statsProvider;
-  }
-
-  /**
-   * Returns the maximum time to wait for any thrift call to complete.  A 
deadline of 0 means to
-   * wait forever
-   */
-  public Amount<Long, Time> getRequestTimeout() {
-    return requestTimeout;
-  }
-
-  /**
-   * Returns the maximum time to wait for a connection to be established.  A 
deadline of 0 means to
-   * wait forever
-   */
-  public Amount<Long, Time> getConnectTimeout() {
-    return connectTimeout;
-  }
-
-  /**
-   * Returns the maximum number of retries to perform for each thrift call.  A 
value of 0 means to
-   * never retry and in this case {@link #getRetryableExceptions()} will be an 
empty set.
-   */
-  public int getMaxRetries() {
-    return maxRetries;
-  }
-
-  /**
-   * Returns the set of exceptions to retry calls for.  The returned set will 
only be empty if
-   * {@link #getMaxRetries()} is 0.
-   */
-  public ImmutableSet<Class<? extends Exception>> getRetryableExceptions() {
-    return retryableExceptions;
-  }
-
-  /**
-   * Returns {@code true} if the client should log extra debugging 
information.  Currently this
-   * includes method call arguments when RPCs fail with exceptions.
-   */
-  public boolean isDebug() {
-    return debug;
-  }
-
-  /**
-   * Returns {@code true} if the client should track request statistics.
-   */
-  public boolean enableStats() {
-    return enableStats;
-  }
-
-  /**
-   * Returns the stats provider to use to record Thrift client stats.
-   */
-  public StatsProvider getStatsProvider() {
-    return statsProvider;
-  }
-
-  // This was made public because it seems to be causing problems for scala 
users when it is not
-  // public.
-  public static abstract class AbstractBuilder<T extends AbstractBuilder> {
-    private final Config config;
-
-    AbstractBuilder() {
-      this.config = new Config();
-    }
-
-    AbstractBuilder(Config template) {
-      Preconditions.checkNotNull(template);
-      this.config = new Config(template);
-    }
-
-    protected abstract T getThis();
-
-    // TODO(John Sirois): extra validation or design ... can currently do 
strange things like:
-    // builder.blocking().withDeadline(1, TimeUnit.MILLISECONDS)
-    // builder.noRetries().retryOn(TException.class)
-
-    /**
-     * Specifies that all calls be blocking calls with no inherent deadline.  
It may be the
-     * case that underlying transports will eventually deadline, but {@link 
Thrift} will not
-     * enforce a deadline.
-     */
-    public final T blocking() {
-      config.requestTimeout = DEADLINE_BLOCKING;
-      return getThis();
-    }
-
-    /**
-     * Specifies that all calls be subject to a global timeout.  This deadline 
includes all call
-     * activities, including obtaining a free connection and any automatic 
retries.
-     */
-    public final T withRequestTimeout(Amount<Long, Time> timeout) {
-      Preconditions.checkNotNull(timeout);
-      Preconditions.checkArgument(timeout.getValue() >= 0,
-          "A negative deadline is invalid: %s", timeout);
-      config.requestTimeout = timeout;
-      return getThis();
-    }
-
-    /**
-     * Assigns the timeout for all connections established with the blocking 
client.
-     * On an asynchronous client this timeout is only used for the connection 
pool lock
-     * acquisition on initial calls (not retries, @see withRetries).  The 
actual network
-     * connection timeout for the asynchronous client is governed by 
socketTimeout.
-     *
-     * @param timeout Connection timeout.
-     * @return A reference to the builder.
-     */
-    public final T withConnectTimeout(Amount<Long, Time> timeout) {
-      Preconditions.checkNotNull(timeout);
-      Preconditions.checkArgument(timeout.getValue() >= 0,
-          "A negative deadline is invalid: %s", timeout);
-      config.connectTimeout = timeout;
-      return getThis();
-    }
-
-    /**
-     * Specifies that no calls be automatically retried.
-     */
-    public final T noRetries() {
-      config.maxRetries = 0;
-      config.retryableExceptions = ImmutableSet.of();
-      return getThis();
-    }
-
-    /**
-     * Specifies that failing calls meeting {@link #retryOn retry} criteria be 
retried up to a
-     * maximum of {@code retries} times before failing.  On an asynchronous 
client, these retries
-     * will be forced to be non-blocking, failing fast if they cannot 
immediately acquire the
-     * connection pool locks, so they only provide a best-effort retry 
strategy there.
-     */
-    public final T withRetries(int retries) {
-      Preconditions.checkArgument(retries >= 0, "A negative retry count is 
invalid: %d", retries);
-      config.maxRetries = retries;
-      return getThis();
-    }
-
-    /**
-     * Specifies the set of exception classes that are to be considered 
retryable (if retries are
-     * enabled).  Any exceptions thrown by the underlying thrift call will be 
considered retryable
-     * if they are an instance of any one of the specified exception classes.  
The set of exception
-     * classes must contain at least exception class.  To specify no retries 
either use
-     * {@link #noRetries()} or pass zero to {@link #withRetries(int)}.
-     */
-    public final T retryOn(Iterable<? extends Class<? extends Exception>> 
retryableExceptions) {
-      Preconditions.checkNotNull(retryableExceptions);
-      ImmutableSet<Class<? extends Exception>> classes =
-          ImmutableSet.copyOf(Iterables.filter(retryableExceptions, 
Predicates.notNull()));
-      Preconditions.checkArgument(!classes.isEmpty(),
-          "Must provide at least one retryable exception class");
-      config.retryableExceptions = classes;
-      return getThis();
-    }
-
-    /**
-     * Specifies the set of exception classes that are to be considered 
retryable (if retries are
-     * enabled).  Any exceptions thrown by the underlying thrift call will be 
considered retryable
-     * if they are an instance of any one of the specified exception classes.  
The set of exception
-     * classes must contain at least exception class.  To specify no retries 
either use
-     * {@link #noRetries()} or pass zero to {@link #withRetries(int)}.
-     */
-    public final T retryOn(Class<? extends Exception> exception) {
-      Preconditions.checkNotNull(exception);
-      config.retryableExceptions =
-          ImmutableSet.<Class<? extends 
Exception>>builder().add(exception).build();
-      return getThis();
-    }
-
-    /**
-     * When {@code debug == true}, specifies that extra debugging information 
should be logged.
-     */
-    public final T withDebug(boolean debug) {
-      config.debug = debug;
-      return getThis();
-    }
-
-    /**
-     * Disables stats collection on the client (enabled by default).
-     */
-    public T disableStats() {
-      config.enableStats = false;
-      return getThis();
-    }
-
-    /**
-     * Registers a custom stats provider to use to track various client stats.
-     */
-    public T withStatsProvider(StatsProvider statsProvider) {
-      config.statsProvider = Preconditions.checkNotNull(statsProvider);
-      return getThis();
-    }
-
-    protected final Config getConfig() {
-      return config;
-    }
-  }
-
-  public static final class Builder extends AbstractBuilder<Builder> {
-    private Builder() {
-      super();
-    }
-
-    private Builder(Config template) {
-      super(template);
-    }
-
-    @Override
-    protected Builder getThis() {
-      return this;
-    }
-
-    public Config create() {
-      return getConfig();
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/thrift/TResourceExhaustedException.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/thrift/TResourceExhaustedException.java
 
b/commons/src/main/java/com/twitter/common/thrift/TResourceExhaustedException.java
deleted file mode 100644
index 51ca1dc..0000000
--- 
a/commons/src/main/java/com/twitter/common/thrift/TResourceExhaustedException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.thrift;
-
-import org.apache.thrift.TException;
-
-/**
- * @author Adam Samet
- *
- * This is exception is thrown when there are no available instances of a 
thrift backend
- * service to serve requests.
- */
-public class TResourceExhaustedException extends TException {
-
-  private static final long serialVersionUID = 1L;
-
-  public TResourceExhaustedException(String message) {
-    super(message);
-  }
-
-  public TResourceExhaustedException(Throwable cause) {
-    super(cause);
-  }
-
-  public TResourceExhaustedException(String message, Throwable cause) {
-    super(message, cause);
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/thrift/TTimeoutException.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/thrift/TTimeoutException.java 
b/commons/src/main/java/com/twitter/common/thrift/TTimeoutException.java
deleted file mode 100644
index a610510..0000000
--- a/commons/src/main/java/com/twitter/common/thrift/TTimeoutException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.thrift;
-
-import org.apache.thrift.TException;
-
-/**
- * @author Adam Samet
- *
- * This is exception is thrown when accessing a thrift service resource times 
out.
- */
-public class TTimeoutException extends TException {
-
-  private static final long serialVersionUID = 1L;
-
-  public TTimeoutException(String message) {
-    super(message);
-  }
-
-  public TTimeoutException(Throwable cause) {
-    super(cause);
-  }
-
-  public TTimeoutException(String message, Throwable cause) {
-    super(message, cause);
-  }
-}

http://git-wip-us.apache.org/repos/asf/aurora/blob/06ddaadb/commons/src/main/java/com/twitter/common/thrift/TTransportConnection.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/com/twitter/common/thrift/TTransportConnection.java 
b/commons/src/main/java/com/twitter/common/thrift/TTransportConnection.java
deleted file mode 100644
index 7c0474e..0000000
--- a/commons/src/main/java/com/twitter/common/thrift/TTransportConnection.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Licensed 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.
- */
-package com.twitter.common.thrift;
-
-import com.google.common.base.Preconditions;
-import com.twitter.common.net.pool.Connection;
-import com.twitter.common.net.pool.ConnectionPool;
-import org.apache.thrift.transport.TTransport;
-
-import java.net.InetSocketAddress;
-
-/**
- * A {@link ConnectionPool} compatible thrift connection that can work with 
any valid thrift
- * transport.
- *
- * @author John Sirois
- */
-public class TTransportConnection implements Connection<TTransport, 
InetSocketAddress> {
-
-  private final TTransport transport;
-  private final InetSocketAddress endpoint;
-
-  public TTransportConnection(TTransport transport, InetSocketAddress 
endpoint) {
-    this.transport = Preconditions.checkNotNull(transport);
-    this.endpoint = Preconditions.checkNotNull(endpoint);
-  }
-
-  /**
-   * Returns {@code true} if the underlying transport is still open.  To 
invalidate a transport it
-   * should be closed.
-   *
-   * <p>TODO(John Sirois): it seems like an improper soc to have validity 
testing here and not also an
-   * invalidation method - correct or accept
-   */
-  @Override
-  public boolean isValid() {
-    return transport.isOpen();
-  }
-
-  @Override
-  public TTransport get() {
-    return transport;
-  }
-
-  @Override
-  public void close() {
-    transport.close();
-  }
-
-  @Override
-  public InetSocketAddress getEndpoint() {
-    return endpoint;
-  }
-
-  @Override
-  public String toString() {
-    return endpoint.toString();
-  }
-}

Reply via email to