diff --git a/common/pom.xml b/common/pom.xml
index 5ef138151d..3162c5161d 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -96,13 +96,8 @@
test
- org.powermock
- powermock-api-mockito
- test
-
-
- org.powermock
- powermock-module-junit4
+ org.mockito
+ mockito-inlinetest
@@ -123,7 +118,7 @@
org.apache.maven.pluginsmaven-jar-plugin
- 3.0.2
+ ${maven.plugin.jar.version}
@@ -144,13 +139,17 @@
org.codehaus.mojoexec-maven-plugin
- 1.2.1
+ 1.6.0create-plugin-test-jar
- jar
+
+ ${env.JAVA_HOME}/bin/jarcvfmplugin_test.jar
diff --git a/common/src/main/java/net/opentsdb/collections/LongIntHashTable.java b/common/src/main/java/net/opentsdb/collections/LongIntHashTable.java
index d0785861c6..ad835870a6 100644
--- a/common/src/main/java/net/opentsdb/collections/LongIntHashTable.java
+++ b/common/src/main/java/net/opentsdb/collections/LongIntHashTable.java
@@ -14,18 +14,19 @@
// limitations under the License.
package net.opentsdb.collections;
+import java.io.Closeable;
+import java.math.BigInteger;
+
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.Unsafe;
-import java.io.Closeable;
-import java.math.BigInteger;
-
/**
* A linear probing Map for long keys and int values. Stores data off heap.
*
-// * NOTE: There is now a hacky, ugly way to rehash the map without resizing when
-// * deletes start to result in too many scans for missed entries. If the average
+ // * NOTE: There is now a hacky, ugly way to rehash the map without resizing when
+ // * deletes start to result in too many scans for missed entries. If the average
* number of scans per operation (any operation) exceeds the scan rehash threshold
* then we'll pick the next prime number from the primes set to hash with. It will
* roll over but by that time the key set should hopefully be fairly new.
diff --git a/common/src/main/java/net/opentsdb/collections/LongLongHashTable.java b/common/src/main/java/net/opentsdb/collections/LongLongHashTable.java
index 375cfa30df..9084e9714c 100644
--- a/common/src/main/java/net/opentsdb/collections/LongLongHashTable.java
+++ b/common/src/main/java/net/opentsdb/collections/LongLongHashTable.java
@@ -14,13 +14,14 @@
// limitations under the License.
package net.opentsdb.collections;
+import java.io.Closeable;
+import java.math.BigInteger;
+
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.Unsafe;
-import java.io.Closeable;
-import java.math.BigInteger;
-
/**
* A linear probing primitive Map for long keys and long values. Stores data off heap.
*
diff --git a/common/src/main/java/net/opentsdb/collections/UnsafeHelper.java b/common/src/main/java/net/opentsdb/collections/UnsafeHelper.java
index 789f3934cf..89ac3080c8 100644
--- a/common/src/main/java/net/opentsdb/collections/UnsafeHelper.java
+++ b/common/src/main/java/net/opentsdb/collections/UnsafeHelper.java
@@ -14,10 +14,11 @@
// limitations under the License.
package net.opentsdb.collections;
-import sun.misc.Unsafe;
-
import java.lang.reflect.Field;
+
+import sun.misc.Unsafe;
+
/**
* An internal helper class to access {@link Unsafe}.
*/
diff --git a/common/src/main/java/net/opentsdb/configuration/ConfigArgP.java b/common/src/main/java/net/opentsdb/configuration/ConfigArgP.java
index e920b43e12..80215d85fa 100644
--- a/common/src/main/java/net/opentsdb/configuration/ConfigArgP.java
+++ b/common/src/main/java/net/opentsdb/configuration/ConfigArgP.java
@@ -34,17 +34,17 @@
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
-import net.opentsdb.utils.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import net.opentsdb.utils.Config;
+
/**
*
Title: ConfigArgP
*
Description: Wraps {@link Config} and {@link ArgP} instances for a consolidated configuration and command line handler
diff --git a/common/src/main/java/net/opentsdb/configuration/ConfigurationEntrySchema.java b/common/src/main/java/net/opentsdb/configuration/ConfigurationEntrySchema.java
index eaa370b07f..79a34d039f 100644
--- a/common/src/main/java/net/opentsdb/configuration/ConfigurationEntrySchema.java
+++ b/common/src/main/java/net/opentsdb/configuration/ConfigurationEntrySchema.java
@@ -202,6 +202,13 @@ public ValidationResult validate(final Object value) {
if (value == null && nullable) {
return ConfigurationValueValidator.OK;
}
+
+ // If the given value already has the expected type, then we need no round
+ // trip. By skipping convertValue() below, we avoid problems with classes
+ // that do not round-trip successfully through serde.
+ if (type != null && value.getClass().equals(type)) {
+ return ConfigurationValueValidator.OK;
+ }
try {
if (type_reference != null) {
diff --git a/common/src/main/java/net/opentsdb/configuration/provider/PropertiesFileProvider.java b/common/src/main/java/net/opentsdb/configuration/provider/PropertiesFileProvider.java
index 4401a7cabf..05be13eef3 100644
--- a/common/src/main/java/net/opentsdb/configuration/provider/PropertiesFileProvider.java
+++ b/common/src/main/java/net/opentsdb/configuration/provider/PropertiesFileProvider.java
@@ -21,13 +21,12 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Properties;
-import java.util.Set;
-
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
diff --git a/common/src/main/java/net/opentsdb/configuration/provider/Provider.java b/common/src/main/java/net/opentsdb/configuration/provider/Provider.java
index 295f62f9a7..33331745b5 100644
--- a/common/src/main/java/net/opentsdb/configuration/provider/Provider.java
+++ b/common/src/main/java/net/opentsdb/configuration/provider/Provider.java
@@ -14,13 +14,12 @@
// limitations under the License.
package net.opentsdb.configuration.provider;
-import net.opentsdb.configuration.Configuration;
-import net.opentsdb.configuration.ConfigurationOverride;
-
import java.io.Closeable;
import java.util.Map;
import io.netty.util.TimerTask;
+import net.opentsdb.configuration.Configuration;
+import net.opentsdb.configuration.ConfigurationOverride;
/**
* The base class for a {@link Configuration} provider. It maintains a reference
diff --git a/common/src/main/java/net/opentsdb/configuration/provider/YamlJsonBaseProvider.java b/common/src/main/java/net/opentsdb/configuration/provider/YamlJsonBaseProvider.java
index 50a5dab5d5..486379246b 100644
--- a/common/src/main/java/net/opentsdb/configuration/provider/YamlJsonBaseProvider.java
+++ b/common/src/main/java/net/opentsdb/configuration/provider/YamlJsonBaseProvider.java
@@ -18,8 +18,8 @@
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;
-import java.util.Set;
import java.util.Map.Entry;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
diff --git a/common/src/main/java/net/opentsdb/core/Registry.java b/common/src/main/java/net/opentsdb/core/Registry.java
index 35172572c2..41d84c2487 100644
--- a/common/src/main/java/net/opentsdb/core/Registry.java
+++ b/common/src/main/java/net/opentsdb/core/Registry.java
@@ -18,14 +18,15 @@
import java.util.Map;
import java.util.concurrent.ExecutorService;
-import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
+import com.google.common.reflect.TypeToken;
+
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.pools.ObjectPool;
import net.opentsdb.query.QueryIteratorFactory;
-import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
import net.opentsdb.query.QueryNodeFactory;
+import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
/**
* A shared location for registering context, mergers, plugins, etc.
diff --git a/common/src/main/java/net/opentsdb/core/TSDB.java b/common/src/main/java/net/opentsdb/core/TSDB.java
index 20f737a4d9..783c83d2da 100644
--- a/common/src/main/java/net/opentsdb/core/TSDB.java
+++ b/common/src/main/java/net/opentsdb/core/TSDB.java
@@ -17,6 +17,7 @@
import java.util.concurrent.ExecutorService;
import com.stumbleupon.async.Deferred;
+
import io.netty.util.Timer;
import net.opentsdb.configuration.Configuration;
import net.opentsdb.query.QueryContext;
diff --git a/common/src/main/java/net/opentsdb/data/DefaultHashedLowLevelMetricDataWrapper.java b/common/src/main/java/net/opentsdb/data/DefaultHashedLowLevelMetricDataWrapper.java
index 69c87773f4..a1bb63bf5e 100644
--- a/common/src/main/java/net/opentsdb/data/DefaultHashedLowLevelMetricDataWrapper.java
+++ b/common/src/main/java/net/opentsdb/data/DefaultHashedLowLevelMetricDataWrapper.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data;
+import java.io.IOException;
+import java.util.Arrays;
+
import net.opentsdb.data.LowLevelMetricData.HashedLowLevelMetricData;
import net.opentsdb.pools.CloseablePooledObject;
import net.opentsdb.pools.PooledObject;
import net.opentsdb.storage.TimeSeriesDataConsumer.WriteCallback;
import net.opentsdb.storage.WriteStatus;
-import java.io.IOException;
-import java.util.Arrays;
-
/**
* A wrapper used when forwarding data to another consumer but some of that
* data needs to be skipped.
diff --git a/common/src/main/java/net/opentsdb/data/LowLevelMetricDataStringIdWrapper.java b/common/src/main/java/net/opentsdb/data/LowLevelMetricDataStringIdWrapper.java
index 55afb31c54..3d8aa0ad41 100644
--- a/common/src/main/java/net/opentsdb/data/LowLevelMetricDataStringIdWrapper.java
+++ b/common/src/main/java/net/opentsdb/data/LowLevelMetricDataStringIdWrapper.java
@@ -14,13 +14,14 @@
// limitations under the License.
package net.opentsdb.data;
+import java.util.Map;
+
import com.google.common.collect.Maps;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.common.Const;
-import java.util.Map;
+import net.opentsdb.common.Const;
-public class LowLevelMetricDataStringIdWrapper implements TimeSeriesDatumStringId {
+ public class LowLevelMetricDataStringIdWrapper implements TimeSeriesDatumStringId {
private LowLevelMetricData data;
private Map tags;
diff --git a/common/src/main/java/net/opentsdb/data/TimeSeriesDataSourceFactory.java b/common/src/main/java/net/opentsdb/data/TimeSeriesDataSourceFactory.java
index dfc9e07502..8d00a99f2b 100644
--- a/common/src/main/java/net/opentsdb/data/TimeSeriesDataSourceFactory.java
+++ b/common/src/main/java/net/opentsdb/data/TimeSeriesDataSourceFactory.java
@@ -16,9 +16,10 @@
import java.util.List;
-import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
+import com.google.common.reflect.TypeToken;
+
import net.opentsdb.core.TSDBPlugin;
import net.opentsdb.query.QueryNodeConfig;
import net.opentsdb.query.QueryNodeFactory;
diff --git a/common/src/main/java/net/opentsdb/data/TypedTimeSeriesIterator.java b/common/src/main/java/net/opentsdb/data/TypedTimeSeriesIterator.java
index 3c78916d1a..8cf3d24285 100644
--- a/common/src/main/java/net/opentsdb/data/TypedTimeSeriesIterator.java
+++ b/common/src/main/java/net/opentsdb/data/TypedTimeSeriesIterator.java
@@ -14,18 +14,18 @@
// limitations under the License.
package net.opentsdb.data;
-import com.google.common.reflect.TypeToken;
-
import java.io.Closeable;
import java.util.Iterator;
+import com.google.common.reflect.TypeToken;
+
/**
* An iterator for {@link TimeSeriesValue}s that lets us determine the
* type of the underlying data without having to resolve the types.
*
* @since 3.0
*/
-public interface TypedTimeSeriesIterator
+public interface TypedTimeSeriesIterator
extends Iterator>, Closeable {
/**
diff --git a/common/src/main/java/net/opentsdb/meta/BatchMetaQuery.java b/common/src/main/java/net/opentsdb/meta/BatchMetaQuery.java
index e9e4347dc2..926c0553eb 100644
--- a/common/src/main/java/net/opentsdb/meta/BatchMetaQuery.java
+++ b/common/src/main/java/net/opentsdb/meta/BatchMetaQuery.java
@@ -14,12 +14,13 @@
// limitations under the License.
package net.opentsdb.meta;
-import com.google.common.hash.HashCode;
-import net.opentsdb.data.TimeStamp;
-
import java.util.ArrayList;
import java.util.List;
+import com.google.common.hash.HashCode;
+
+import net.opentsdb.data.TimeStamp;
+
public interface BatchMetaQuery {
public static enum QueryType {
diff --git a/common/src/main/java/net/opentsdb/meta/MetaDataStorageResult.java b/common/src/main/java/net/opentsdb/meta/MetaDataStorageResult.java
index 406ccd663a..c1704e24f5 100644
--- a/common/src/main/java/net/opentsdb/meta/MetaDataStorageResult.java
+++ b/common/src/main/java/net/opentsdb/meta/MetaDataStorageResult.java
@@ -17,10 +17,10 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import com.google.common.reflect.TypeToken;
-import java.util.Set;
import net.opentsdb.data.TimeSeriesId;
import net.opentsdb.utils.Pair;
import net.opentsdb.utils.UniqueKeyPair;
diff --git a/common/src/main/java/net/opentsdb/meta/MetaQuery.java b/common/src/main/java/net/opentsdb/meta/MetaQuery.java
index c4e62919b5..43a8b4123b 100644
--- a/common/src/main/java/net/opentsdb/meta/MetaQuery.java
+++ b/common/src/main/java/net/opentsdb/meta/MetaQuery.java
@@ -15,6 +15,7 @@
package net.opentsdb.meta;
import com.google.common.hash.HashCode;
+
import net.opentsdb.query.filter.QueryFilter;
/**
diff --git a/common/src/main/java/net/opentsdb/query/ChainedQueryContextFilter.java b/common/src/main/java/net/opentsdb/query/ChainedQueryContextFilter.java
index 8ea844ee66..cbc48dcf44 100644
--- a/common/src/main/java/net/opentsdb/query/ChainedQueryContextFilter.java
+++ b/common/src/main/java/net/opentsdb/query/ChainedQueryContextFilter.java
@@ -14,21 +14,24 @@
// limitations under the License.
package net.opentsdb.query;
+import java.util.List;
+import java.util.Map;
+
+
+import com.stumbleupon.async.Deferred;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.fasterxml.jackson.core.type.TypeReference;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
-import com.stumbleupon.async.Deferred;
+
import net.opentsdb.auth.AuthState;
import net.opentsdb.configuration.ConfigurationEntrySchema;
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.meta.BatchMetaQuery;
import net.opentsdb.meta.MetaQuery;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.Map;
/**
* A chain of query context filters processed in the order of definition.
@@ -36,7 +39,7 @@
* @since 3.0
*/
public class ChainedQueryContextFilter extends BaseTSDBPlugin
- implements QueryContextFilter {
+ implements QueryContextFilter {
private static final Logger LOG = LoggerFactory.getLogger(
ChainedQueryContextFilter.class);
diff --git a/common/src/main/java/net/opentsdb/query/QueryContext.java b/common/src/main/java/net/opentsdb/query/QueryContext.java
index 6f0bfb279b..28e8eb58aa 100644
--- a/common/src/main/java/net/opentsdb/query/QueryContext.java
+++ b/common/src/main/java/net/opentsdb/query/QueryContext.java
@@ -18,9 +18,10 @@
import java.util.List;
import java.util.Map;
-import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
+import com.google.common.reflect.TypeToken;
+
import net.opentsdb.auth.AuthState;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.TimeSeriesId;
diff --git a/common/src/main/java/net/opentsdb/query/QueryNodeConfig.java b/common/src/main/java/net/opentsdb/query/QueryNodeConfig.java
index 101515df47..f2894b94f9 100644
--- a/common/src/main/java/net/opentsdb/query/QueryNodeConfig.java
+++ b/common/src/main/java/net/opentsdb/query/QueryNodeConfig.java
@@ -14,12 +14,13 @@
// limitations under the License.
package net.opentsdb.query;
-import com.google.common.hash.HashCode;
-import net.opentsdb.configuration.Configuration;
-
import java.util.List;
import java.util.Map;
+import com.google.common.hash.HashCode;
+
+import net.opentsdb.configuration.Configuration;
+
/**
* The configuration interface for a particular query node. Queries will populate
* the configs when instantiating a DAG.
diff --git a/common/src/main/java/net/opentsdb/query/QueryPipelineContext.java b/common/src/main/java/net/opentsdb/query/QueryPipelineContext.java
index d87670dec3..e171bcc827 100644
--- a/common/src/main/java/net/opentsdb/query/QueryPipelineContext.java
+++ b/common/src/main/java/net/opentsdb/query/QueryPipelineContext.java
@@ -16,9 +16,10 @@
import java.util.Collection;
-import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
+import com.google.common.reflect.TypeToken;
+
import net.opentsdb.core.TSDB;
import net.opentsdb.data.TimeSeriesDataSource;
import net.opentsdb.data.TimeSeriesId;
diff --git a/common/src/main/java/net/opentsdb/query/filter/ChainFilter.java b/common/src/main/java/net/opentsdb/query/filter/ChainFilter.java
index 60d3703c54..097fd986bf 100644
--- a/common/src/main/java/net/opentsdb/query/filter/ChainFilter.java
+++ b/common/src/main/java/net/opentsdb/query/filter/ChainFilter.java
@@ -16,12 +16,13 @@
import java.util.List;
+import com.stumbleupon.async.Deferred;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.common.Const;
import net.opentsdb.stats.Span;
diff --git a/common/src/main/java/net/opentsdb/query/filter/ChainFilterFactory.java b/common/src/main/java/net/opentsdb/query/filter/ChainFilterFactory.java
index ede2739e8c..dd61a3a3b7 100644
--- a/common/src/main/java/net/opentsdb/query/filter/ChainFilterFactory.java
+++ b/common/src/main/java/net/opentsdb/query/filter/ChainFilterFactory.java
@@ -14,11 +14,12 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import com.stumbleupon.async.Deferred;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
diff --git a/common/src/main/java/net/opentsdb/query/filter/NotFilter.java b/common/src/main/java/net/opentsdb/query/filter/NotFilter.java
index db20912f86..9cca2a93d8 100644
--- a/common/src/main/java/net/opentsdb/query/filter/NotFilter.java
+++ b/common/src/main/java/net/opentsdb/query/filter/NotFilter.java
@@ -14,18 +14,20 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import java.util.List;
+
+
+import com.stumbleupon.async.Deferred;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.common.Const;
import net.opentsdb.stats.Span;
-import java.util.List;
-
/**
* Inverts the match on a filter.
*
diff --git a/common/src/main/java/net/opentsdb/query/filter/NotFilterFactory.java b/common/src/main/java/net/opentsdb/query/filter/NotFilterFactory.java
index 0a29db3962..7883788cb6 100644
--- a/common/src/main/java/net/opentsdb/query/filter/NotFilterFactory.java
+++ b/common/src/main/java/net/opentsdb/query/filter/NotFilterFactory.java
@@ -14,10 +14,11 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import com.stumbleupon.async.Deferred;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
diff --git a/common/src/main/java/net/opentsdb/query/filter/QueryFilter.java b/common/src/main/java/net/opentsdb/query/filter/QueryFilter.java
index 8db183dd80..f2c61b6137 100644
--- a/common/src/main/java/net/opentsdb/query/filter/QueryFilter.java
+++ b/common/src/main/java/net/opentsdb/query/filter/QueryFilter.java
@@ -14,9 +14,10 @@
// limitations under the License.
package net.opentsdb.query.filter;
-import com.google.common.hash.HashCode;
import com.stumbleupon.async.Deferred;
+import com.google.common.hash.HashCode;
+
import net.opentsdb.stats.Span;
/**
diff --git a/common/src/main/java/net/opentsdb/query/plan/QueryPlanner.java b/common/src/main/java/net/opentsdb/query/plan/QueryPlanner.java
index 3f6c515d4c..b0faeeedf9 100644
--- a/common/src/main/java/net/opentsdb/query/plan/QueryPlanner.java
+++ b/common/src/main/java/net/opentsdb/query/plan/QueryPlanner.java
@@ -16,9 +16,10 @@
import java.util.Collection;
-import com.google.common.graph.MutableGraph;
import com.stumbleupon.async.Deferred;
+import com.google.common.graph.MutableGraph;
+
import net.opentsdb.query.QueryNode;
import net.opentsdb.query.QueryNodeConfig;
import net.opentsdb.query.QueryNodeFactory;
diff --git a/common/src/main/java/net/opentsdb/query/readcache/CachedQueryNode.java b/common/src/main/java/net/opentsdb/query/readcache/CachedQueryNode.java
index 662692fdfb..9920e71b6f 100644
--- a/common/src/main/java/net/opentsdb/query/readcache/CachedQueryNode.java
+++ b/common/src/main/java/net/opentsdb/query/readcache/CachedQueryNode.java
@@ -18,9 +18,10 @@
import java.util.List;
import java.util.Map;
-import com.google.common.hash.HashCode;
import com.stumbleupon.async.Deferred;
+import com.google.common.hash.HashCode;
+
import net.opentsdb.configuration.Configuration;
import net.opentsdb.data.PartialTimeSeries;
import net.opentsdb.query.QueryNode;
diff --git a/common/src/main/java/net/opentsdb/rollup/RollupConfig.java b/common/src/main/java/net/opentsdb/rollup/RollupConfig.java
index c1833ada58..668e425b63 100644
--- a/common/src/main/java/net/opentsdb/rollup/RollupConfig.java
+++ b/common/src/main/java/net/opentsdb/rollup/RollupConfig.java
@@ -14,11 +14,11 @@
// limitations under the License.
package net.opentsdb.rollup;
-import net.opentsdb.exceptions.IllegalDataException;
-
import java.util.List;
import java.util.Map;
+import net.opentsdb.exceptions.IllegalDataException;
+
public interface RollupConfig {
/** @return The immutable map of aggregations to IDs for serialization. */
diff --git a/common/src/main/java/net/opentsdb/utils/Bytes.java b/common/src/main/java/net/opentsdb/utils/Bytes.java
index cd8a77cad8..6d2632583a 100644
--- a/common/src/main/java/net/opentsdb/utils/Bytes.java
+++ b/common/src/main/java/net/opentsdb/utils/Bytes.java
@@ -21,9 +21,8 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.TreeMap;
import java.util.Map.Entry;
-
+import java.util.TreeMap;
import javax.xml.bind.DatatypeConverter;
import com.google.common.collect.Lists;
diff --git a/common/src/main/java/net/opentsdb/utils/DateTime.java b/common/src/main/java/net/opentsdb/utils/DateTime.java
index 949596da09..9a6ebe3839 100644
--- a/common/src/main/java/net/opentsdb/utils/DateTime.java
+++ b/common/src/main/java/net/opentsdb/utils/DateTime.java
@@ -87,13 +87,13 @@ public static final long parseDateTimeString(final String datetime,
}
if (datetime.toLowerCase().equals("now")) {
- return System.currentTimeMillis();
+ return currentTimeMillis();
}
if (datetime.toLowerCase().endsWith("-ago")) {
long interval = DateTime.parseDuration(
datetime.substring(0, datetime.length() - 4));
- return System.currentTimeMillis() - interval;
+ return currentTimeMillis() - interval;
}
if (datetime.contains("/") || datetime.contains(":")) {
@@ -387,6 +387,9 @@ public static final int getDurationInterval(final String duration) {
* @throws NullPointerException if the value is null
*/
public static boolean isRelativeDate(final String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
return value.toLowerCase().endsWith("-ago");
}
diff --git a/common/src/main/java/net/opentsdb/utils/OffHeapDebugAllocator.java b/common/src/main/java/net/opentsdb/utils/OffHeapDebugAllocator.java
index 02d3ddfbf9..83e8ef6d51 100644
--- a/common/src/main/java/net/opentsdb/utils/OffHeapDebugAllocator.java
+++ b/common/src/main/java/net/opentsdb/utils/OffHeapDebugAllocator.java
@@ -17,16 +17,6 @@
package net.opentsdb.utils;
-import com.google.common.collect.Maps;
-import io.netty.util.Timeout;
-import io.netty.util.TimerTask;
-import net.opentsdb.collections.LongLongHashTable;
-import net.opentsdb.collections.UnsafeHelper;
-import net.opentsdb.core.TSDB;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import sun.misc.Unsafe;
-
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -38,6 +28,19 @@
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import sun.misc.Unsafe;
+
+import com.google.common.collect.Maps;
+
+import io.netty.util.Timeout;
+import io.netty.util.TimerTask;
+import net.opentsdb.collections.LongLongHashTable;
+import net.opentsdb.collections.UnsafeHelper;
+import net.opentsdb.core.TSDB;
+
/**
* A helper that tracks memory allocations, frees and reads. Just used for
* debugging as, naturally, it incurs a fair bit of overhead. And it's not a
@@ -325,6 +328,7 @@ int getStackTrace() {
StackTraceElement element = stack[idx];
if (element.getClassName().startsWith("sun.") ||
element.getClassName().startsWith("java.") ||
+ element.getClassName().startsWith("jdk.") ||
element.getClassName().contains("Java8StackHelper") ||
element.getClassName().contains("OffHeapDebugAllocator")) {
continue;
diff --git a/common/src/main/java/net/opentsdb/utils/PluginLoader.java b/common/src/main/java/net/opentsdb/utils/PluginLoader.java
index 540ab487da..34dce23ffa 100644
--- a/common/src/main/java/net/opentsdb/utils/PluginLoader.java
+++ b/common/src/main/java/net/opentsdb/utils/PluginLoader.java
@@ -327,7 +327,8 @@ public static void loadJAR(String jar) throws IOException, SecurityException,
* @throws IOException if the directory does not exist or cannot be accessed
* @throws SecurityException if there is a security manager present and the
* operation is denied
- * @throws IllegalArgumentException if the path was not a directory
+ * @throws IllegalArgumentException if the path was empty or not a directory
+ * @throws NullPointerException if the path was null
* @throws NoSuchMethodException if there is an error with the class loader
* @throws IllegalAccessException if a security manager is present and the
* operation was denied
@@ -336,6 +337,12 @@ public static void loadJAR(String jar) throws IOException, SecurityException,
public static void loadJARs(String directory) throws SecurityException,
IllegalArgumentException, IOException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException {
+ if (directory == null) {
+ throw new NullPointerException("The given path was null");
+ } else if (directory.isEmpty()) {
+ throw new IllegalArgumentException("The given path was empty");
+ }
+
File file = new File(directory);
if (!file.isDirectory()) {
throw new IllegalArgumentException(
diff --git a/common/src/main/java/net/opentsdb/utils/RefreshingSSLContext.java b/common/src/main/java/net/opentsdb/utils/RefreshingSSLContext.java
index ebde2eeafc..c7dd734572 100644
--- a/common/src/main/java/net/opentsdb/utils/RefreshingSSLContext.java
+++ b/common/src/main/java/net/opentsdb/utils/RefreshingSSLContext.java
@@ -39,7 +39,6 @@
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.List;
import java.util.concurrent.TimeUnit;
-
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
diff --git a/common/src/test/java/net/opentsdb/collections/TestDirectByteArray.java b/common/src/test/java/net/opentsdb/collections/TestDirectByteArray.java
index c9607abb74..0b72f9c26a 100644
--- a/common/src/test/java/net/opentsdb/collections/TestDirectByteArray.java
+++ b/common/src/test/java/net/opentsdb/collections/TestDirectByteArray.java
@@ -14,17 +14,18 @@
// limitations under the License.
package net.opentsdb.collections;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.Random;
+
+
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
-import java.util.Random;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
public class TestDirectByteArray {
@Test
public void testEmptyArray() {
diff --git a/common/src/test/java/net/opentsdb/collections/TestDirectIntArray.java b/common/src/test/java/net/opentsdb/collections/TestDirectIntArray.java
index 1eda888779..ac94985584 100644
--- a/common/src/test/java/net/opentsdb/collections/TestDirectIntArray.java
+++ b/common/src/test/java/net/opentsdb/collections/TestDirectIntArray.java
@@ -14,14 +14,15 @@
// limitations under the License.
package net.opentsdb.collections;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvSource;
-
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+
public class TestDirectIntArray {
@Test
diff --git a/common/src/test/java/net/opentsdb/collections/TestDirectLongArray.java b/common/src/test/java/net/opentsdb/collections/TestDirectLongArray.java
index d2dd9af7a2..4313db793d 100644
--- a/common/src/test/java/net/opentsdb/collections/TestDirectLongArray.java
+++ b/common/src/test/java/net/opentsdb/collections/TestDirectLongArray.java
@@ -14,14 +14,15 @@
// limitations under the License.
package net.opentsdb.collections;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvSource;
-
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+
public class TestDirectLongArray {
@Test
void testEmptyArray() {
diff --git a/common/src/test/java/net/opentsdb/collections/TestLongIntHashTable.java b/common/src/test/java/net/opentsdb/collections/TestLongIntHashTable.java
index 2d22670bb6..73d8e56ac2 100644
--- a/common/src/test/java/net/opentsdb/collections/TestLongIntHashTable.java
+++ b/common/src/test/java/net/opentsdb/collections/TestLongIntHashTable.java
@@ -14,18 +14,6 @@
// limitations under the License.
package net.opentsdb.collections;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.stream.Stream;
-
import static net.opentsdb.collections.LongIntHashTable.NOT_FOUND;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -35,6 +23,18 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.params.provider.Arguments.arguments;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
public class TestLongIntHashTable {
private Random random = new Random();
diff --git a/common/src/test/java/net/opentsdb/collections/TestLongLongHashTable.java b/common/src/test/java/net/opentsdb/collections/TestLongLongHashTable.java
index 39d440603e..6bb81e885e 100644
--- a/common/src/test/java/net/opentsdb/collections/TestLongLongHashTable.java
+++ b/common/src/test/java/net/opentsdb/collections/TestLongLongHashTable.java
@@ -14,19 +14,6 @@
// limitations under the License.
package net.opentsdb.collections;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.powermock.reflect.Whitebox;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.stream.Stream;
-
import static net.opentsdb.collections.LongLongHashTable.NOT_FOUND;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -36,6 +23,18 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.params.provider.Arguments.arguments;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
public class TestLongLongHashTable {
private Random random = new Random();
diff --git a/common/src/test/java/net/opentsdb/collections/TestUnsafeHelper.java b/common/src/test/java/net/opentsdb/collections/TestUnsafeHelper.java
index 58f6d80f8f..c2daaa89c7 100644
--- a/common/src/test/java/net/opentsdb/collections/TestUnsafeHelper.java
+++ b/common/src/test/java/net/opentsdb/collections/TestUnsafeHelper.java
@@ -14,11 +14,11 @@
// limitations under the License.
package net.opentsdb.collections;
-import org.junit.Test;
+import static org.junit.Assert.assertNotNull;
import java.lang.reflect.Field;
-import static org.junit.Assert.assertNotNull;
+import org.junit.Test;
public class TestUnsafeHelper {
diff --git a/common/src/test/java/net/opentsdb/configuration/TestConfigurationEntry.java b/common/src/test/java/net/opentsdb/configuration/TestConfigurationEntry.java
index 9ecd2fc923..a6ae4cdf6a 100644
--- a/common/src/test/java/net/opentsdb/configuration/TestConfigurationEntry.java
+++ b/common/src/test/java/net/opentsdb/configuration/TestConfigurationEntry.java
@@ -20,7 +20,7 @@
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -29,12 +29,12 @@
import com.google.common.collect.Lists;
+import net.opentsdb.configuration.Configuration;
+import net.opentsdb.configuration.ConfigurationCallback;
import net.opentsdb.configuration.ConfigurationEntry;
import net.opentsdb.configuration.ConfigurationEntrySchema;
import net.opentsdb.configuration.ConfigurationOverride;
import net.opentsdb.configuration.ConfigurationValueValidator;
-import net.opentsdb.configuration.Configuration;
-import net.opentsdb.configuration.ConfigurationCallback;
import net.opentsdb.configuration.ConfigurationValueValidator.ValidationResult;
import net.opentsdb.configuration.provider.CommandLineProvider;
import net.opentsdb.configuration.provider.Provider;
diff --git a/common/src/test/java/net/opentsdb/configuration/TestConfigurationEntrySchema.java b/common/src/test/java/net/opentsdb/configuration/TestConfigurationEntrySchema.java
index a169befbaf..43dd2250b6 100644
--- a/common/src/test/java/net/opentsdb/configuration/TestConfigurationEntrySchema.java
+++ b/common/src/test/java/net/opentsdb/configuration/TestConfigurationEntrySchema.java
@@ -20,7 +20,7 @@
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
diff --git a/common/src/test/java/net/opentsdb/configuration/TestConfigurationOverride.java b/common/src/test/java/net/opentsdb/configuration/TestConfigurationOverride.java
index 295d28fa5a..f22361ed7d 100644
--- a/common/src/test/java/net/opentsdb/configuration/TestConfigurationOverride.java
+++ b/common/src/test/java/net/opentsdb/configuration/TestConfigurationOverride.java
@@ -19,7 +19,7 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
diff --git a/common/src/test/java/net/opentsdb/configuration/provider/TestEnvironmentProvider.java b/common/src/test/java/net/opentsdb/configuration/provider/TestEnvironmentProvider.java
index af52f72db2..86ca582ce2 100644
--- a/common/src/test/java/net/opentsdb/configuration/provider/TestEnvironmentProvider.java
+++ b/common/src/test/java/net/opentsdb/configuration/provider/TestEnvironmentProvider.java
@@ -16,12 +16,12 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import java.util.Map;
import java.util.Map.Entry;
diff --git a/common/src/test/java/net/opentsdb/configuration/provider/TestPropertiesFileProvider.java b/common/src/test/java/net/opentsdb/configuration/provider/TestPropertiesFileProvider.java
index 536a85cffa..2389d44166 100644
--- a/common/src/test/java/net/opentsdb/configuration/provider/TestPropertiesFileProvider.java
+++ b/common/src/test/java/net/opentsdb/configuration/provider/TestPropertiesFileProvider.java
@@ -17,20 +17,22 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.File;
-import java.io.FileInputStream;
+import java.io.FileWriter;
import java.util.Properties;
+import org.junit.After;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.junit.rules.TemporaryFolder;
+import org.mockito.MockedConstruction;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
import com.google.common.hash.HashCode;
import com.google.common.hash.HashFunction;
@@ -43,150 +45,103 @@
import net.opentsdb.configuration.ConfigurationException;
import net.opentsdb.configuration.ConfigurationOverride;
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({ PropertiesFileProvider.class, File.class, Files.class })
public class TestPropertiesFileProvider {
+ private MockedStatic mockedFiles;
private ProviderFactory factory;
private Configuration config;
private HashedWheelTimer timer;
private ByteSource source;
private File file;
private HashCode hash;
-
+
+ @Rule
+ public TemporaryFolder folder = new TemporaryFolder();
+
@Before
public void before() throws Exception {
+ mockedFiles = Mockito.mockStatic(Files.class);
factory = mock(ProviderFactory.class);
config = mock(Configuration.class);
timer = mock(HashedWheelTimer.class);
source = mock(ByteSource.class);
file = mock(File.class);
-
+
when(file.exists()).thenReturn(true);
-
- PowerMockito.whenNew(File.class)
- .withAnyArguments()
- .thenReturn(file);
-
- PowerMockito.mockStatic(Files.class);
- when(Files.asByteSource(any(File.class))).thenReturn(source);
-
+ mockedFiles.when(() -> Files.asByteSource(any(File.class))).thenReturn(source);
+
hash = Const.HASH_FUNCTION().hashInt(1);
when(source.hash(any(HashFunction.class))).thenReturn(hash);
}
-
- @Test
+
+ @After
+ public void tearDownStaticMocks() {
+ mockedFiles.closeOnDemand();
+ }
+
+ @Test(expected = ConfigurationException.class)
public void ctorDefault() throws Exception {
- PowerMockito.whenNew(File.class)
- .withAnyArguments()
- .thenReturn(mock(File.class));
- try {
- new PropertiesFileProvider(factory, config, timer).close();;
- fail("Expected ConfigurationException");
- } catch (ConfigurationException e) { }
-
- final File local = mock(File.class);
- when(local.exists()).thenReturn(true);
-
- PowerMockito.whenNew(File.class)
- .withAnyArguments()
- .thenReturn(local);
- PowerMockito.whenNew(FileInputStream.class)
- .withAnyArguments()
- .thenReturn(mock(FileInputStream.class));
new PropertiesFileProvider(factory, config, timer).close();
}
-
- @Test
+
+ @Test(expected = IllegalArgumentException.class)
public void ctorNoProtocol() throws Exception {
- try {
- new PropertiesFileProvider(factory, config, timer,
- "opentsdb.conf").close();
- fail("Expected IllegalArgumentException");
- } catch (IllegalArgumentException e) { }
+ new PropertiesFileProvider(factory, config, timer,
+ "opentsdb.conf").close();
}
@Test
- public void ctorWithFile() throws Exception {
+ public void testRealFile() throws Exception {
new PropertiesFileProvider(factory, config, timer,
- "file://opentsdb.conf").close();
+ "file://src/test/resources/opentsdb.conf").close();
- new PropertiesFileProvider(factory, config, timer,
- "FiLe://opentsdb.conf").close();
+ try (final PropertiesFileProvider provider = new PropertiesFileProvider(
+ factory, config, timer, "file://src/test/resources/opentsdb.conf")) {
+ assertNull(provider.getSetting("no.such.key"));
+
+ ConfigurationOverride override = provider.getSetting("tsd.network.port");
+ assertEquals("1234", override.getValue());
+ assertEquals("src/test/resources/opentsdb.conf", override.getSource());
+ }
}
-
+
@Test
public void reload() throws Exception {
- final Properties properties = new Properties();
- properties.put("tsd.conf", "foo");
- properties.put("key.2", "42");
-
- File file = mock(File.class);
- when(file.exists()).thenReturn(true);
- PowerMockito.whenNew(File.class).withAnyArguments().thenReturn(file);
-
- PowerMockito.mockStatic(Properties.class);
- PowerMockito.whenNew(Properties.class).withAnyArguments()
- .thenReturn(properties);
-
- PowerMockito.whenNew(FileInputStream.class)
- .withAnyArguments()
- .thenReturn(mock(FileInputStream.class));
- final PropertiesFileProvider provider = new PropertiesFileProvider(factory,
- config, timer, "file://opentsdb.conf");
-
- assertEquals(2, provider.cache().size());
- assertEquals("foo", provider.cache().get("tsd.conf"));
- assertEquals("42", provider.cache().get("key.2"));
-
- // key change
- properties.put("key.2", "24");
- hash = Const.HASH_FUNCTION().hashInt(2);
- when(source.hash(any(HashFunction.class))).thenReturn(hash);
- PowerMockito.whenNew(Properties.class).withAnyArguments()
- .thenReturn(properties);
- provider.reload();
-
- assertEquals(2, provider.cache().size());
- assertEquals("foo", provider.cache().get("tsd.conf"));
- assertEquals("24", provider.cache().get("key.2"));
-
- // drop and add
- properties.remove("key.2");
- properties.put("key.3", "boo!");
-
- hash = Const.HASH_FUNCTION().hashInt(3);
- when(source.hash(any(HashFunction.class))).thenReturn(hash);
- PowerMockito.whenNew(Properties.class).withAnyArguments()
- .thenReturn(properties);
- provider.reload();
-
- assertEquals(2, provider.cache().size());
- assertEquals("foo", provider.cache().get("tsd.conf"));
- assertEquals("boo!", provider.cache().get("key.3"));
-
- provider.close();
- }
-
- @Test
- public void getSetting() throws Exception {
- final Properties properties = new Properties();
- properties.put("tsd.conf", "foo");
- properties.put("key.2", "42");
-
- PowerMockito.mockStatic(Properties.class);
- PowerMockito.whenNew(Properties.class).withAnyArguments()
- .thenReturn(properties);
-
- PowerMockito.whenNew(FileInputStream.class)
- .withAnyArguments()
- .thenReturn(mock(FileInputStream.class));
- final PropertiesFileProvider provider = new PropertiesFileProvider(factory, config,
- timer, "file://opentsdb.conf");
-
- assertNull(provider.getSetting("no.such.key"));
- ConfigurationOverride override = provider.getSetting("tsd.conf");
- assertEquals("opentsdb.conf", override.getSource());
- assertEquals("foo", override.getValue());
- provider.close();
+ final File confFile = folder.newFile("opentsdb.conf");
+
+ FileWriter writer = new FileWriter(confFile, false);
+ writer.write("tsd.conf = foo\nkey.2 = 42\n");
+ writer.close();
+
+ try (final PropertiesFileProvider provider = new PropertiesFileProvider(
+ factory, config, timer, "file://" + confFile)) {
+
+ assertEquals(2, provider.cache().size());
+ assertEquals("foo", provider.cache().get("tsd.conf"));
+ assertEquals("42", provider.cache().get("key.2"));
+
+ // change value of key.2
+ writer = new FileWriter(confFile, false);
+ writer.write("tsd.conf = foo\nkey.2 = 24\n");
+ writer.close();
+ hash = Const.HASH_FUNCTION().hashInt(2);
+ when(source.hash(any(HashFunction.class))).thenReturn(hash);
+ provider.reload();
+
+ assertEquals(2, provider.cache().size());
+ assertEquals("foo", provider.cache().get("tsd.conf"));
+ assertEquals("24", provider.cache().get("key.2"));
+
+ // drop key.2 and add key.3
+ writer = new FileWriter(confFile, false);
+ writer.write("tsd.conf = foo\nkey.3 = boo!\n");
+ writer.close();
+ hash = Const.HASH_FUNCTION().hashInt(3);
+ when(source.hash(any(HashFunction.class))).thenReturn(hash);
+ provider.reload();
+
+ assertEquals(2, provider.cache().size());
+ assertEquals("foo", provider.cache().get("tsd.conf"));
+ assertEquals("boo!", provider.cache().get("key.3"));
+ }
}
}
diff --git a/common/src/test/java/net/opentsdb/configuration/provider/TestProvider.java b/common/src/test/java/net/opentsdb/configuration/provider/TestProvider.java
index a2d44f5489..d31b0d80b1 100644
--- a/common/src/test/java/net/opentsdb/configuration/provider/TestProvider.java
+++ b/common/src/test/java/net/opentsdb/configuration/provider/TestProvider.java
@@ -18,10 +18,10 @@
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
diff --git a/common/src/test/java/net/opentsdb/configuration/provider/TestYamlJsonFileProvider.java b/common/src/test/java/net/opentsdb/configuration/provider/TestYamlJsonFileProvider.java
index ebfecc3fe9..c38697abef 100644
--- a/common/src/test/java/net/opentsdb/configuration/provider/TestYamlJsonFileProvider.java
+++ b/common/src/test/java/net/opentsdb/configuration/provider/TestYamlJsonFileProvider.java
@@ -20,156 +20,141 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+//import static org.mockito.Mockito.never;
+//import static org.mockito.Mockito.verify;
+//import static org.mockito.Mockito.when;
+
import java.io.ByteArrayInputStream;
import java.io.File;
+import java.io.FileWriter;
import java.util.List;
import java.util.Map;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.junit.rules.TemporaryFolder;
+import org.mockito.Mockito;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.JsonNodeType;
-import com.google.common.hash.HashCode;
-import com.google.common.hash.HashFunction;
-import com.google.common.io.ByteSource;
-import com.google.common.io.Files;
+//import com.google.common.hash.HashFunction;
import io.netty.util.HashedWheelTimer;
-import net.opentsdb.common.Const;
import net.opentsdb.configuration.Configuration;
-import net.opentsdb.utils.UnitTestException;
+//import net.opentsdb.utils.UnitTestException;
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({ YamlJsonFileProvider.class, File.class, Files.class })
public class TestYamlJsonFileProvider {
private ProviderFactory factory;
private Configuration config;
private HashedWheelTimer timer;
- private ByteSource source;
- private File file;
- private HashCode hash;
-
+
+ @Rule
+ public TemporaryFolder tempDir = new TemporaryFolder();
+
@Before
public void before() throws Exception {
factory = mock(ProviderFactory.class);
config = mock(Configuration.class);
timer = mock(HashedWheelTimer.class);
- source = mock(ByteSource.class);
- file = mock(File.class);
-
- when(file.exists()).thenReturn(true);
-
- PowerMockito.whenNew(File.class)
- .withAnyArguments()
- .thenReturn(file);
-
- PowerMockito.mockStatic(Files.class);
- when(Files.asByteSource(any(File.class))).thenReturn(source);
-
- hash = Const.HASH_FUNCTION().hashInt(1);
- when(source.hash(any(HashFunction.class))).thenReturn(hash);
}
-
+
@Test
- public void ctorEmpty() throws Exception {
- String json = "";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
-
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
- verify(source, times(1)).openStream();
+ public void fileEmpty() throws Exception {
+ final File jsonFile = tempDir.newFile("test.json");
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
assertTrue(provider.cache.isEmpty());
- assertEquals("test.json", provider.file_name);
- assertEquals(hash.asLong(), provider.last_hash);
+ assertEquals(jsonFile.toString(), provider.file_name);
+ assertEquals(0, provider.last_hash);
}
-
+
@Test
- public void ctorEmptyJsonObject() throws Exception {
- String json = "{}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
-
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
- verify(source, times(1)).openStream();
+ public void fileEmptyJsonObject() throws Exception {
+ final File jsonFile = tempDir.newFile("test.json");
+ final FileWriter writer = new FileWriter(jsonFile, false);
+ writer.write("{}");
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
assertTrue(provider.cache.isEmpty());
- assertEquals("test.json", provider.file_name);
- assertEquals(hash.asLong(), provider.last_hash);
+ assertEquals(jsonFile.toString(), provider.file_name);
+ assertEquals(0x466E20057851C2D2L,provider.last_hash);
}
-
+
@Test
- public void ctorJsonArray() throws Exception {
- String json = "[]";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
-
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
- verify(source, times(1)).openStream();
+ public void fileJsonArray() throws Exception {
+ final File jsonFile = tempDir.newFile("test.json");
+ final FileWriter writer = new FileWriter(jsonFile, false);
+ writer.write("[]");
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
assertTrue(provider.cache.isEmpty());
- assertEquals("test.json", provider.file_name);
- assertEquals(hash.asLong(), provider.last_hash);
+ assertEquals(jsonFile.toString(), provider.file_name);
+ assertEquals(0xCF252FDCD0C57791L, provider.last_hash);
}
-
+
+ /*
@Test
- public void ctorException() throws Exception {
- String json = "";
- when(source.hash(any(HashFunction.class))).thenThrow(
- new UnitTestException());
-
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
+ public void hashException() throws Exception {
+ final File jsonFile = tempDir.newFile("test.json");
+
+ Mockito.doThrow(new UnitTestException()).when(source).hash(
+ any(HashFunction.class));
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
verify(source, never()).openStream();
assertTrue(provider.cache.isEmpty());
- assertEquals("test.json", provider.file_name);
+ assertEquals(jsonFile.toString(), provider.file_name);
assertEquals(0, provider.last_hash);
}
-
+ */
+
@Test
public void flatJsonObject() throws Exception {
- String json = "{\"key.a\":\"a String\",\"key.b\":null,\"key.c\":"
- + "42.5,\"key.d\":24,\"key.e\":true,\"key.f\":[\"s1\",\"s2\"],"
- + "\"key.g\":{\"k1\":\"v1\",\"k2\":\"v2\"}}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
+ final File jsonFile = tempDir.newFile("test.json");
+ final FileWriter writer = new FileWriter(jsonFile, false);
+ writer.write("{\"key.a\":\"a String\",\"key.b\":null,\"key.c\":"
+ + "42.5,\"key.d\":24,\"key.e\":true,\"key.f\":[\"s1\",\"s2\"],"
+ + "\"key.g\":{\"k1\":\"v1\",\"k2\":\"v2\"}}");
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
+ assertEquals(jsonFile.toString(), provider.file_name);
+ assertEquals(0xE31ED7ED74C4AA12L, provider.last_hash);
+
assertEquals(6, provider.cache.size());
-
+
assertTrue(provider.cache.get("key.a") instanceof String);
assertEquals("a String", provider.getSetting("key.a").getValue());
-
+
assertFalse(provider.cache.containsKey("key.b"));
assertNull(provider.getSetting("key.b"));
-
+
assertTrue(Double.class.isInstance(provider.cache.get("key.c")));
assertEquals(42.5, (double) provider.getSetting("key.c").getValue(), 0.001);
-
+
assertTrue(Long.class.isInstance(provider.cache.get("key.d")));
assertEquals(24, (long) provider.getSetting("key.d").getValue());
-
+
assertTrue(Boolean.class.isInstance(provider.cache.get("key.e")));
assertTrue((boolean) provider.getSetting("key.e").getValue());
-
+
TypeReference> ref = new TypeReference>() { };
assertTrue(provider.getSetting("key.f").getValue() instanceof JsonNode);
List list = Configuration.OBJECT_MAPPER.convertValue(
@@ -177,50 +162,57 @@ public void flatJsonObject() throws Exception {
assertEquals(2, list.size());
assertTrue(list.contains("s1"));
assertTrue(list.contains("s2"));
-
+
assertTrue(provider.getSetting("key.g").getValue() instanceof JsonNode);
PojoTest pojo = Configuration.OBJECT_MAPPER.convertValue(
provider.getSetting("key.g").getValue(), PojoTest.class);
assertEquals("v1", pojo.k1);
assertEquals("v2", pojo.k2);
}
-
+
@Test
public void flatYamlObject() throws Exception {
- String json = "--- \n" +
- "key.a: \"a String\"\n" +
- "key.b: null\n" +
- "key.c: 42.5\n" +
- "key.d: 24\n" +
- "key.e: true\n" +
- "key.f: \n" +
- " - s1\n" +
- " - s2\n" +
- "key.g: \n" +
- " k1: v1\n" +
+ final String yaml = "--- \n" +
+ "key.a: \"a String\"\n" +
+ "key.b: null\n" +
+ "key.c: 42.5\n" +
+ "key.d: 24\n" +
+ "key.e: true\n" +
+ "key.f: \n" +
+ " - s1\n" +
+ " - s2\n" +
+ "key.g: \n" +
+ " k1: v1\n" +
" k2: v2\n";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.yaml");
-
+
+ final File yamlFile = tempDir.newFile("test.json");
+ final FileWriter writer = new FileWriter(yamlFile, false);
+ writer.write(yaml);
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + yamlFile);
+
+ assertEquals(yamlFile.toString(), provider.file_name);
+ assertEquals(0x4DEEE69DB7B627D7L, provider.last_hash);
+
assertEquals(6, provider.cache.size());
-
+
assertTrue(provider.cache.get("key.a") instanceof String);
assertEquals("a String", provider.getSetting("key.a").getValue());
-
+
assertFalse(provider.cache.containsKey("key.b"));
assertNull(provider.getSetting("key.b"));
-
+
assertTrue(Double.class.isInstance(provider.cache.get("key.c")));
assertEquals(42.5, (double) provider.getSetting("key.c").getValue(), 0.001);
-
+
assertTrue(Long.class.isInstance(provider.cache.get("key.d")));
assertEquals(24, (long) provider.getSetting("key.d").getValue());
-
+
assertTrue(Boolean.class.isInstance(provider.cache.get("key.e")));
assertTrue((boolean) provider.getSetting("key.e").getValue());
-
+
TypeReference> ref = new TypeReference>() { };
assertTrue(provider.getSetting("key.f").getValue() instanceof JsonNode);
List list = Configuration.OBJECT_MAPPER.convertValue(
@@ -228,166 +220,204 @@ public void flatYamlObject() throws Exception {
assertEquals(2, list.size());
assertTrue(list.contains("s1"));
assertTrue(list.contains("s2"));
-
+
assertTrue(provider.getSetting("key.g").getValue() instanceof JsonNode);
PojoTest pojo = Configuration.OBJECT_MAPPER.convertValue(
provider.getSetting("key.g").getValue(), PojoTest.class);
assertEquals("v1", pojo.k1);
assertEquals("v2", pojo.k2);
}
-
+
@Test
public void nestedJson() throws Exception {
- String json = "{\"root\":{\"a\":{\"b\":\"Hello\",\"c\":\"World\"},"
+ final String json = "{\"root\":{\"a\":{\"b\":\"Hello\",\"c\":\"World\"},"
+ "\"array\":[{\"k\":\"v\"}]}}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
+
+ final File jsonFile = tempDir.newFile("test.json");
+ final FileWriter writer = new FileWriter(jsonFile, false);
+ writer.write(json);
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
+ assertEquals(jsonFile.toString(), provider.file_name);
+ assertEquals(0x6CFBB3C2F4FA54D8L, provider.last_hash);
+
assertEquals(1, provider.cache.size());
assertTrue(provider.getSetting("root").getValue() instanceof JsonNode);
-
+
JsonNode node = (JsonNode) provider.getSetting("root.a").getValue();
assertEquals(JsonNodeType.OBJECT, node.getNodeType());
assertNotNull(node.get("b"));
assertEquals(2, provider.cache.size());
assertSame(node, provider.cache.get("root.a"));
-
+
assertEquals("Hello", provider.getSetting("root.a.b").getValue());
assertEquals(3, provider.cache.size());
assertEquals("Hello", provider.cache.get("root.a.b"));
-
+
assertNull(provider.getSetting("root.a.d"));
assertNull(provider.getSetting("root.array.k"));
assertEquals(3, provider.cache.size());
}
-
+
@Test
public void nestedYaml() throws Exception {
- String yaml = "--- \n" +
- "root: \n" +
- " a: \n" +
- " b: Hello\n" +
- " c: World\n" +
- " array: \n" +
- " - \n" +
- " k: v\n" +
+ final String yaml = "--- \n" +
+ "root: \n" +
+ " a: \n" +
+ " b: Hello\n" +
+ " c: World\n" +
+ " array: \n" +
+ " - \n" +
+ " k: v\n" +
"";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(yaml.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
+
+ final File yamlFile = tempDir.newFile("test.json");
+ final FileWriter writer = new FileWriter(yamlFile, false);
+ writer.write(yaml);
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + yamlFile);
+
+ assertEquals(yamlFile.toString(), provider.file_name);
+ assertEquals(0xFBFD981526D227B0L, provider.last_hash);
+
assertEquals(1, provider.cache.size());
assertTrue(provider.getSetting("root").getValue() instanceof JsonNode);
-
+
JsonNode node = (JsonNode) provider.getSetting("root.a").getValue();
assertEquals(JsonNodeType.OBJECT, node.getNodeType());
assertNotNull(node.get("b"));
assertEquals(2, provider.cache.size());
assertSame(node, provider.cache.get("root.a"));
-
+
assertEquals("Hello", provider.getSetting("root.a.b").getValue());
assertEquals(3, provider.cache.size());
assertEquals("Hello", provider.cache.get("root.a.b"));
-
+
assertNull(provider.getSetting("root.a.d"));
assertNull(provider.getSetting("root.array.k"));
assertEquals(3, provider.cache.size());
}
-
+
@Test
public void nestedTypes() throws Exception {
- String yaml = "--- \n" +
- "root: \n" +
- " a: \n" +
- " b: Hello\n" +
- " c: 24\n" +
+ final String yaml = "--- \n" +
+ "root: \n" +
+ " a: \n" +
+ " b: Hello\n" +
+ " c: 24\n" +
" d: 42.5\n" +
- " e: true\n" +
- " f: ~\n" +
+ " e: true\n" +
+ " f: ~\n" +
"";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(yaml.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
+
+ final File yamlFile = tempDir.newFile("test.json");
+ final FileWriter writer = new FileWriter(yamlFile, false);
+ writer.write(yaml);
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + yamlFile);
+
+ assertEquals(yamlFile.toString(), provider.file_name);
+ assertEquals(0x006197E3E9FD901BL, provider.last_hash);
+
assertEquals(1, provider.cache.size());
assertTrue(provider.getSetting("root").getValue() instanceof JsonNode);
-
+
assertEquals("Hello", provider.getSetting("root.a.b").getValue());
assertEquals(2, provider.cache.size());
-
+
assertEquals(24, (long) provider.getSetting("root.a.c").getValue());
assertEquals(3, provider.cache.size());
-
+
assertEquals(42.5, (double) provider.getSetting("root.a.d").getValue(), 0.001);
assertEquals(4, provider.cache.size());
-
+
assertTrue((boolean) provider.getSetting("root.a.e").getValue());
assertEquals(5, provider.cache.size());
-
+
assertNull(provider.getSetting("root.a.f"));
}
-
+
@Test
public void badParse() throws Exception {
- String json = "{\"key.a\":\"a String\",\"key.b\":null,\"key.c\":"
+ final String json = "{\"key.a\":\"a String\",\"key.b\":null,\"key.c\":"
+ "42.5,\"key.d\":24,\"key.e\":true,\"key.f\":[\"s1\",\"s2\"],"
+ "\"key.g\":{\"k1\":\"v1\",\"k}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
+
+ final File jsonFile = tempDir.newFile("test.json");
+ final FileWriter writer = new FileWriter(jsonFile, false);
+ writer.write(json);
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
assertTrue(provider.cache.isEmpty());
}
-
+
@Test
public void reloadFlatSameHash() throws Exception {
- String json = "{\"key.a\":\"a String\",\"key.b\":null,\"key.c\":"
+ final String json = "{\"key.a\":\"a String\",\"key.b\":null,\"key.c\":"
+ "42.5,\"key.d\":24,\"key.e\":true,\"key.f\":[\"s1\",\"s2\"],"
+ "\"key.g\":{\"k1\":\"v1\",\"k2\":\"v2\"}}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
+
+ final File jsonFile = tempDir.newFile("test.json");
+ final FileWriter writer = new FileWriter(jsonFile, false);
+ writer.write(json);
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
+ final long expectedHashCode = 0xE31ED7ED74C4AA12L;
+ assertEquals(jsonFile.toString(), provider.file_name);
+ assertEquals(expectedHashCode, provider.last_hash);
assertEquals(6, provider.cache.size());
- verify(source, times(1)).openStream();
-
+
provider.reload();
- verify(source, times(1)).openStream();
+
+ assertEquals(jsonFile.toString(), provider.file_name);
+ assertEquals(expectedHashCode, provider.last_hash);
+ assertEquals(6, provider.cache.size());
}
-
+
@Test
public void reloadFlatChanges() throws Exception {
String json = "{\"key.a\":\"a String\",\"key.b\":null,\"key.c\":"
+ "42.5,\"key.d\":24,\"key.e\":true,\"key.f\":[\"s1\",\"s2\"],"
+ "\"key.g\":{\"k1\":\"v1\",\"k2\":\"v2\"}}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
+
+ final File jsonFile = tempDir.newFile("test.json");
+ FileWriter writer = new FileWriter(jsonFile, false);
+ writer.write(json);
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
assertEquals(6, provider.cache.size());
- verify(source, times(1)).openStream();
-
+
assertTrue(provider.cache.get("key.a") instanceof String);
assertEquals("a String", provider.getSetting("key.a").getValue());
-
+
assertFalse(provider.cache.containsKey("key.b"));
assertNull(provider.getSetting("key.b"));
-
+
assertTrue(Double.class.isInstance(provider.cache.get("key.c")));
assertEquals(42.5, (double) provider.getSetting("key.c").getValue(), 0.001);
-
+
assertTrue(Long.class.isInstance(provider.cache.get("key.d")));
assertEquals(24, (long) provider.getSetting("key.d").getValue());
-
+
assertTrue(Boolean.class.isInstance(provider.cache.get("key.e")));
assertTrue((boolean) provider.getSetting("key.e").getValue());
-
+
TypeReference> ref = new TypeReference>() { };
assertTrue(provider.getSetting("key.f").getValue() instanceof JsonNode);
List list = Configuration.OBJECT_MAPPER.convertValue(
@@ -395,82 +425,83 @@ public void reloadFlatChanges() throws Exception {
assertEquals(2, list.size());
assertTrue(list.contains("s1"));
assertTrue(list.contains("s2"));
-
+
assertTrue(provider.getSetting("key.g").getValue() instanceof JsonNode);
PojoTest pojo = Configuration.OBJECT_MAPPER.convertValue(
provider.getSetting("key.g").getValue(), PojoTest.class);
assertEquals("v1", pojo.k1);
assertEquals("v2", pojo.k2);
-
+
// reload
json = "{\"key.a\":\"Diff string\",\"key.b\":\"Set\",\"key.c\":"
+ "42.5,\"key.e\":false,\"key.f\":[\"s2\"],"
+ "\"key.g\":{\"k1\":\"va\",\"k3\":\"vb\"}}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
-
- hash = Const.HASH_FUNCTION().hashInt(2);
- when(source.hash(any(HashFunction.class))).thenReturn(hash);
+ writer = new FileWriter(jsonFile, false);
+ writer.write(json);
+ writer.close();
+
provider.reload();
- verify(source, times(2)).openStream();
assertEquals(6, provider.cache.size());
-
+
assertTrue(provider.cache.get("key.a") instanceof String);
assertEquals("Diff string", provider.getSetting("key.a").getValue());
-
+
assertTrue(provider.cache.containsKey("key.b"));
assertEquals("Set", provider.getSetting("key.b").getValue());
-
+
assertTrue(Double.class.isInstance(provider.cache.get("key.c")));
assertEquals(42.5, (double) provider.getSetting("key.c").getValue(), 0.001);
-
+
assertFalse(provider.cache.containsKey("key.d"));
assertNull(provider.getSetting("key.d"));
-
+
assertTrue(Boolean.class.isInstance(provider.cache.get("key.e")));
assertFalse((boolean) provider.getSetting("key.e").getValue());
-
+
assertTrue(provider.getSetting("key.f").getValue() instanceof JsonNode);
list = Configuration.OBJECT_MAPPER.convertValue(
provider.getSetting("key.f").getValue(), ref);
assertEquals(1, list.size());
assertTrue(list.contains("s2"));
-
+
assertTrue(provider.getSetting("key.g").getValue() instanceof JsonNode);
pojo = Configuration.OBJECT_MAPPER.convertValue(
provider.getSetting("key.g").getValue(), PojoTest.class);
assertEquals("va", pojo.k1);
assertNull(pojo.k2);
}
-
+
@Test
public void reloadFlatToEmpty() throws Exception {
String json = "{\"key.a\":\"a String\",\"key.b\":null,\"key.c\":"
+ "42.5,\"key.d\":24,\"key.e\":true,\"key.f\":[\"s1\",\"s2\"],"
+ "\"key.g\":{\"k1\":\"v1\",\"k2\":\"v2\"}}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
+
+ final File jsonFile = tempDir.newFile("test.json");
+ FileWriter writer = new FileWriter(jsonFile, false);
+ writer.write(json);
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
assertEquals(6, provider.cache.size());
- verify(source, times(1)).openStream();
-
+
assertTrue(provider.cache.get("key.a") instanceof String);
assertEquals("a String", provider.getSetting("key.a").getValue());
-
+
assertFalse(provider.cache.containsKey("key.b"));
assertNull(provider.getSetting("key.b"));
-
+
assertTrue(Double.class.isInstance(provider.cache.get("key.c")));
assertEquals(42.5, (double) provider.getSetting("key.c").getValue(), 0.001);
-
+
assertTrue(Long.class.isInstance(provider.cache.get("key.d")));
assertEquals(24, (long) provider.getSetting("key.d").getValue());
-
+
assertTrue(Boolean.class.isInstance(provider.cache.get("key.e")));
assertTrue((boolean) provider.getSetting("key.e").getValue());
-
+
TypeReference> ref = new TypeReference>() { };
assertTrue(provider.getSetting("key.f").getValue() instanceof JsonNode);
List list = Configuration.OBJECT_MAPPER.convertValue(
@@ -478,125 +509,126 @@ public void reloadFlatToEmpty() throws Exception {
assertEquals(2, list.size());
assertTrue(list.contains("s1"));
assertTrue(list.contains("s2"));
-
+
assertTrue(provider.getSetting("key.g").getValue() instanceof JsonNode);
PojoTest pojo = Configuration.OBJECT_MAPPER.convertValue(
provider.getSetting("key.g").getValue(), PojoTest.class);
assertEquals("v1", pojo.k1);
assertEquals("v2", pojo.k2);
-
+
// reload
json = "{}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
-
- hash = Const.HASH_FUNCTION().hashInt(2);
- when(source.hash(any(HashFunction.class))).thenReturn(hash);
+ writer = new FileWriter(jsonFile, false);
+ writer.write(json);
+ writer.close();
+
provider.reload();
- verify(source, times(2)).openStream();
assertEquals(0, provider.cache.size());
}
-
+
@Test
public void reloadNested() throws Exception {
String json = "{\"root\":{\"a\":{\"b\":\"Hello\",\"c\":\"World\"},"
+ "\"array\":[{\"k\":\"v\"}]}}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
- YamlJsonFileProvider provider = new YamlJsonFileProvider(
- factory, config, timer, "file://test.json");
-
+
+ final File jsonFile = tempDir.newFile("test.json");
+ FileWriter writer = new FileWriter(jsonFile, false);
+ writer.write(json);
+ writer.close();
+
+ final YamlJsonFileProvider provider = new YamlJsonFileProvider(
+ factory, config, timer, "file://" + jsonFile);
+
assertEquals(1, provider.cache.size());
assertTrue(provider.getSetting("root").getValue() instanceof JsonNode);
-
+
JsonNode node = (JsonNode) provider.getSetting("root.a").getValue();
assertEquals(JsonNodeType.OBJECT, node.getNodeType());
assertNotNull(node.get("b"));
assertEquals(2, provider.cache.size());
assertSame(node, provider.cache.get("root.a"));
-
+
assertEquals("Hello", provider.getSetting("root.a.b").getValue());
assertEquals(3, provider.cache.size());
assertEquals("Hello", provider.cache.get("root.a.b"));
-
+
assertNull(provider.getSetting("root.a.d"));
assertNull(provider.getSetting("root.array.k"));
assertEquals(3, provider.cache.size());
-
+
json = "{\"root\":{\"a\":{\"b\":\"Diff\",\"c\":\"Value\"},"
+ "\"array\":[{\"k1\":\"v1\"}]}}";
- when(source.openStream()).thenReturn(
- new ByteArrayInputStream(json.getBytes()));
-
- hash = Const.HASH_FUNCTION().hashInt(2);
- when(source.hash(any(HashFunction.class))).thenReturn(hash);
+ writer = new FileWriter(jsonFile, false);
+ writer.write(json);
+ writer.close();
+
provider.reload();
- verify(source, times(2)).openStream();
assertEquals(3, provider.cache.size());
-
+
node = (JsonNode) provider.getSetting("root.a").getValue();
assertEquals(JsonNodeType.OBJECT, node.getNodeType());
assertNotNull(node.get("b"));
assertEquals(3, provider.cache.size());
assertSame(node, provider.cache.get("root.a"));
-
- TypeReference
-
+
diff --git a/core/src/main/java/net/opentsdb/core/DefaultRegistry.java b/core/src/main/java/net/opentsdb/core/DefaultRegistry.java
index a04a73ad2a..331995749f 100644
--- a/core/src/main/java/net/opentsdb/core/DefaultRegistry.java
+++ b/core/src/main/java/net/opentsdb/core/DefaultRegistry.java
@@ -23,16 +23,6 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Strings;
-import com.google.common.collect.Maps;
-import com.google.common.io.Files;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Callback;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.configuration.ConfigurationEntrySchema;
import net.opentsdb.data.TimeSeriesDataSourceFactory;
import net.opentsdb.data.TimeSeriesDataType;
@@ -40,15 +30,25 @@
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.pools.ObjectPool;
import net.opentsdb.query.QueryIteratorFactory;
-import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
-import net.opentsdb.query.pojo.TagVFilter;
-import net.opentsdb.query.processor.ProcessorFactory;
import net.opentsdb.query.QueryNodeFactory;
import net.opentsdb.query.execution.QueryExecutorFactory;
import net.opentsdb.query.hacluster.HAClusterConfig;
+import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
+import net.opentsdb.query.pojo.TagVFilter;
+import net.opentsdb.query.processor.ProcessorFactory;
import net.opentsdb.query.serdes.TimeSeriesSerdes;
import net.opentsdb.utils.JSON;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
+import com.google.common.io.Files;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Callback;
+import com.stumbleupon.async.Deferred;
+
/**
* A shared location for registering context, mergers, plugins, etc.
*
diff --git a/core/src/main/java/net/opentsdb/core/DefaultTSDB.java b/core/src/main/java/net/opentsdb/core/DefaultTSDB.java
index 3a63ffe62d..09f2a8ecfd 100644
--- a/core/src/main/java/net/opentsdb/core/DefaultTSDB.java
+++ b/core/src/main/java/net/opentsdb/core/DefaultTSDB.java
@@ -17,30 +17,29 @@
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+import java.util.*;
+import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicLong;
-import com.google.common.collect.Maps;
-import com.stumbleupon.async.Callback;
-import com.stumbleupon.async.Deferred;
-import com.stumbleupon.async.DeferredGroupException;
-
-import io.netty.util.HashedWheelTimer;
-import io.netty.util.Timer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import net.opentsdb.auth.Authentication;
+import net.opentsdb.configuration.Configuration;
+import net.opentsdb.query.QueryContext;
+import net.opentsdb.query.pojo.TagVFilter;
+import net.opentsdb.stats.BlackholeStatsCollector;
+//import net.opentsdb.rollup.RollupConfig;
+//import net.opentsdb.rollup.RollupInterval;
+//import net.opentsdb.rollup.RollupUtils;
+//import net.opentsdb.search.SearchPlugin;
+//import net.opentsdb.search.SearchQuery;
+//import net.opentsdb.tools.StartupPlugin;
+//import net.opentsdb.stats.Histogram;
+//import net.opentsdb.stats.QueryStats;
+//import net.opentsdb.stats.StatsCollector;
+import net.opentsdb.stats.StatsCollector;
+import net.opentsdb.threadpools.FixedThreadPoolExecutor;
+import net.opentsdb.threadpools.TSDBThreadPoolExecutor;
+import net.opentsdb.threadpools.TSDTask;
//import org.hbase.async.AppendRequest;
//import org.hbase.async.Bytes;
//import org.hbase.async.Bytes.ByteMap;
@@ -68,24 +67,17 @@
import net.opentsdb.utils.DateTime;
import net.opentsdb.utils.PluginLoader;
import net.opentsdb.utils.Threads;
-import net.opentsdb.auth.Authentication;
-import net.opentsdb.configuration.Configuration;
-import net.opentsdb.query.QueryContext;
-import net.opentsdb.query.pojo.TagVFilter;
-import net.opentsdb.stats.BlackholeStatsCollector;
-//import net.opentsdb.rollup.RollupConfig;
-//import net.opentsdb.rollup.RollupInterval;
-//import net.opentsdb.rollup.RollupUtils;
-//import net.opentsdb.search.SearchPlugin;
-//import net.opentsdb.search.SearchQuery;
-//import net.opentsdb.tools.StartupPlugin;
-//import net.opentsdb.stats.Histogram;
-//import net.opentsdb.stats.QueryStats;
-//import net.opentsdb.stats.StatsCollector;
-import net.opentsdb.stats.StatsCollector;
-import net.opentsdb.threadpools.FixedThreadPoolExecutor;
-import net.opentsdb.threadpools.TSDBThreadPoolExecutor;
-import net.opentsdb.threadpools.TSDTask;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Maps;
+import com.stumbleupon.async.Callback;
+import com.stumbleupon.async.Deferred;
+import com.stumbleupon.async.DeferredGroupException;
+
+import io.netty.util.HashedWheelTimer;
+import io.netty.util.Timer;
/**
* Thread-safe implementation of the TSDB client.
diff --git a/core/src/main/java/net/opentsdb/core/PluginConfigValidator.java b/core/src/main/java/net/opentsdb/core/PluginConfigValidator.java
index f1a533399d..05725a445b 100644
--- a/core/src/main/java/net/opentsdb/core/PluginConfigValidator.java
+++ b/core/src/main/java/net/opentsdb/core/PluginConfigValidator.java
@@ -14,13 +14,13 @@
// limitations under the License.
package net.opentsdb.core;
-import com.fasterxml.jackson.databind.JsonNode;
-
import net.opentsdb.configuration.Configuration;
import net.opentsdb.configuration.ConfigurationEntrySchema;
import net.opentsdb.configuration.ConfigurationOverride;
import net.opentsdb.configuration.ConfigurationValueValidator;
+import com.fasterxml.jackson.databind.JsonNode;
+
/**
* Simple config validation class that allows the plugin config to be
* either a path to a file or the actual YAML/JSON config.
diff --git a/core/src/main/java/net/opentsdb/core/PluginsConfig.java b/core/src/main/java/net/opentsdb/core/PluginsConfig.java
index 0fbcfc41ed..37551cc3bc 100644
--- a/core/src/main/java/net/opentsdb/core/PluginsConfig.java
+++ b/core/src/main/java/net/opentsdb/core/PluginsConfig.java
@@ -20,14 +20,20 @@
import java.util.Objects;
import java.util.Set;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import net.opentsdb.exceptions.PluginLoadException;
+import net.opentsdb.query.pojo.Validatable;
+import net.opentsdb.utils.Deferreds;
+import net.opentsdb.utils.JSON;
+import net.opentsdb.utils.PluginLoader;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
@@ -36,12 +42,6 @@
import com.stumbleupon.async.Callback;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.exceptions.PluginLoadException;
-import net.opentsdb.query.pojo.Validatable;
-import net.opentsdb.utils.Deferreds;
-import net.opentsdb.utils.JSON;
-import net.opentsdb.utils.PluginLoader;
-
/**
* The configuration class that handles loading, initializing and shutting down
* of TSDB plugins. It should ONLY be instantiated and dealt with via the
diff --git a/core/src/main/java/net/opentsdb/data/BaseTimeSeriesByteId.java b/core/src/main/java/net/opentsdb/data/BaseTimeSeriesByteId.java
index 73e2f29c5b..644a58fc6d 100644
--- a/core/src/main/java/net/opentsdb/data/BaseTimeSeriesByteId.java
+++ b/core/src/main/java/net/opentsdb/data/BaseTimeSeriesByteId.java
@@ -19,18 +19,20 @@
import java.util.Collections;
import java.util.List;
import java.util.Map.Entry;
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Deferred;
-import net.openhft.hashing.LongHashFunction;
import net.opentsdb.common.Const;
import net.opentsdb.stats.Span;
import net.opentsdb.utils.ByteSet;
import net.opentsdb.utils.Bytes;
import net.opentsdb.utils.Bytes.ByteMap;
+import net.openhft.hashing.LongHashFunction;
+
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Deferred;
+
/**
* A basic {@link TimeSeriesByteId} implementation that accepts strings for all
* parameters. Includes a useful builder and after building, all lists are
diff --git a/core/src/main/java/net/opentsdb/data/BaseTimeSeriesDatumStringId.java b/core/src/main/java/net/opentsdb/data/BaseTimeSeriesDatumStringId.java
index 8474614c14..3cb9606fd9 100644
--- a/core/src/main/java/net/opentsdb/data/BaseTimeSeriesDatumStringId.java
+++ b/core/src/main/java/net/opentsdb/data/BaseTimeSeriesDatumStringId.java
@@ -19,22 +19,23 @@
import java.util.Map.Entry;
import java.util.TreeMap;
+import net.opentsdb.common.Const;
+import net.opentsdb.utils.Comparators.MapComparator;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+import net.openhft.hashing.LongHashFunction;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Maps;
import com.google.common.reflect.TypeToken;
-import net.openhft.hashing.LongHashFunction;
-import net.opentsdb.common.Const;
-import net.opentsdb.utils.Comparators.MapComparator;
-
/**
* A basic {@link TimeSeriesDatumStringId} implementation that accepts
* strings for all parameters. Includes a useful builder and after
diff --git a/core/src/main/java/net/opentsdb/data/BaseTimeSeriesStringId.java b/core/src/main/java/net/opentsdb/data/BaseTimeSeriesStringId.java
index 9f654fb29d..458d8412b9 100644
--- a/core/src/main/java/net/opentsdb/data/BaseTimeSeriesStringId.java
+++ b/core/src/main/java/net/opentsdb/data/BaseTimeSeriesStringId.java
@@ -14,21 +14,20 @@
// limitations under the License.
package net.opentsdb.data;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Set;
-import java.util.TreeMap;
+
+
+import net.opentsdb.common.Const;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+import net.openhft.hashing.LongHashFunction;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
@@ -37,9 +36,6 @@
import com.google.common.collect.Ordering;
import com.google.common.reflect.TypeToken;
-import net.openhft.hashing.LongHashFunction;
-import net.opentsdb.common.Const;
-
/**
* A basic {@link TimeSeriesStringId} implementation that accepts strings for all
* parameters. Includes a useful builder and after building, all lists are
diff --git a/core/src/main/java/net/opentsdb/data/MergedTimeSeriesId.java b/core/src/main/java/net/opentsdb/data/MergedTimeSeriesId.java
index ece1a24786..5864f87433 100644
--- a/core/src/main/java/net/opentsdb/data/MergedTimeSeriesId.java
+++ b/core/src/main/java/net/opentsdb/data/MergedTimeSeriesId.java
@@ -14,23 +14,20 @@
// limitations under the License.
package net.opentsdb.data;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Set;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
import net.opentsdb.common.Const;
import net.opentsdb.utils.ByteSet;
import net.opentsdb.utils.Bytes;
import net.opentsdb.utils.Bytes.ByteMap;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
/**
* An ID that can be used to merge multiple time series into one. Use by
* calling {@link #newBuilder()} and calling
diff --git a/core/src/main/java/net/opentsdb/data/NoDataPartialTimeSeries.java b/core/src/main/java/net/opentsdb/data/NoDataPartialTimeSeries.java
index de043dfcab..72eeec5563 100644
--- a/core/src/main/java/net/opentsdb/data/NoDataPartialTimeSeries.java
+++ b/core/src/main/java/net/opentsdb/data/NoDataPartialTimeSeries.java
@@ -14,13 +14,13 @@
// limitations under the License.
package net.opentsdb.data;
-import com.google.common.reflect.TypeToken;
-
import net.opentsdb.common.Const;
import net.opentsdb.data.types.numeric.NumericLongArrayType;
import net.opentsdb.pools.CloseablePooledObject;
import net.opentsdb.pools.PooledObject;
+import com.google.common.reflect.TypeToken;
+
/**
* A simple implementation of a PTS that contains no data. Can be used when a
* set or segment doesn't have any data.
diff --git a/core/src/main/java/net/opentsdb/data/iterators/SlicedTimeSeries.java b/core/src/main/java/net/opentsdb/data/iterators/SlicedTimeSeries.java
index 59e65a7f60..0335b3d00a 100644
--- a/core/src/main/java/net/opentsdb/data/iterators/SlicedTimeSeries.java
+++ b/core/src/main/java/net/opentsdb/data/iterators/SlicedTimeSeries.java
@@ -14,20 +14,14 @@
// limitations under the License.
package net.opentsdb.data.iterators;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
+
+
+import net.opentsdb.data.*;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TypedTimeSeriesIterator;
/**
* A logical view on top of one or more time series iterators. For example, if
diff --git a/core/src/main/java/net/opentsdb/data/types/alert/AlertType.java b/core/src/main/java/net/opentsdb/data/types/alert/AlertType.java
index 3bd411facd..2ec7458e92 100644
--- a/core/src/main/java/net/opentsdb/data/types/alert/AlertType.java
+++ b/core/src/main/java/net/opentsdb/data/types/alert/AlertType.java
@@ -16,12 +16,13 @@
import java.util.Set;
-import com.google.common.collect.Sets;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.data.types.numeric.NumericType;
+import com.google.common.collect.Sets;
+import com.google.common.reflect.TypeToken;
+
/**
* A class denoting information surrounding an alert or issue with a time series.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/alert/AlertTypeList.java b/core/src/main/java/net/opentsdb/data/types/alert/AlertTypeList.java
index de551de863..14544c2507 100644
--- a/core/src/main/java/net/opentsdb/data/types/alert/AlertTypeList.java
+++ b/core/src/main/java/net/opentsdb/data/types/alert/AlertTypeList.java
@@ -16,12 +16,13 @@
import java.util.List;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeriesValue;
import net.opentsdb.data.TypedTimeSeriesIterator;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+
/**
* A class to handle a list of alert values and provide an iterator over them.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/alert/AlertValue.java b/core/src/main/java/net/opentsdb/data/types/alert/AlertValue.java
index 9e79930d54..b9178c4108 100644
--- a/core/src/main/java/net/opentsdb/data/types/alert/AlertValue.java
+++ b/core/src/main/java/net/opentsdb/data/types/alert/AlertValue.java
@@ -14,13 +14,13 @@
// limitations under the License.
package net.opentsdb.data.types.alert;
-import com.google.common.reflect.TypeToken;
-
import net.opentsdb.data.TimeSeriesValue;
import net.opentsdb.data.TimeStamp;
import net.opentsdb.data.types.numeric.MutableNumericType;
import net.opentsdb.data.types.numeric.NumericType;
+import com.google.common.reflect.TypeToken;
+
/**
* A specific instance of an alert value. Just a simple object with a builder
* to fill it out.
diff --git a/core/src/main/java/net/opentsdb/data/types/annotation/AnnotationType.java b/core/src/main/java/net/opentsdb/data/types/annotation/AnnotationType.java
index ebdaf7995f..ae1c125fe5 100644
--- a/core/src/main/java/net/opentsdb/data/types/annotation/AnnotationType.java
+++ b/core/src/main/java/net/opentsdb/data/types/annotation/AnnotationType.java
@@ -14,10 +14,10 @@
// limitations under the License.
package net.opentsdb.data.types.annotation;
-import com.google.common.reflect.TypeToken;
-
import net.opentsdb.data.TimeSeriesDataType;
+import com.google.common.reflect.TypeToken;
+
/**
* Base type for Annotations.
* TODO - implement
diff --git a/core/src/main/java/net/opentsdb/data/types/event/EventGroupType.java b/core/src/main/java/net/opentsdb/data/types/event/EventGroupType.java
index 880c6ca04a..2eac335672 100644
--- a/core/src/main/java/net/opentsdb/data/types/event/EventGroupType.java
+++ b/core/src/main/java/net/opentsdb/data/types/event/EventGroupType.java
@@ -14,10 +14,13 @@
// limitations under the License.
package net.opentsdb.data.types.event;
-import com.google.common.reflect.TypeToken;
import java.util.Map;
+
+
import net.opentsdb.data.TimeSeriesDataType;
+import com.google.common.reflect.TypeToken;
+
/**
* The type for grouping events based on tags.
*/
diff --git a/core/src/main/java/net/opentsdb/data/types/event/EventType.java b/core/src/main/java/net/opentsdb/data/types/event/EventType.java
index 398399b84d..af0f193e75 100644
--- a/core/src/main/java/net/opentsdb/data/types/event/EventType.java
+++ b/core/src/main/java/net/opentsdb/data/types/event/EventType.java
@@ -18,11 +18,12 @@
import java.util.List;
import java.util.Map;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.data.TimeStamp;
+import com.google.common.reflect.TypeToken;
+
public interface EventType extends TimeSeriesDataType {
/** The data type reference to pass around. */
diff --git a/core/src/main/java/net/opentsdb/data/types/event/EventsGroupValue.java b/core/src/main/java/net/opentsdb/data/types/event/EventsGroupValue.java
index 2f93efbd0e..ddb807d638 100644
--- a/core/src/main/java/net/opentsdb/data/types/event/EventsGroupValue.java
+++ b/core/src/main/java/net/opentsdb/data/types/event/EventsGroupValue.java
@@ -14,15 +14,19 @@
// limitations under the License.
package net.opentsdb.data.types.event;
+import java.util.Map;
+
+
+import net.opentsdb.data.TimeSeriesValue;
+import net.opentsdb.data.TimeStamp;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.reflect.TypeToken;
-import java.util.Map;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
@JsonInclude(Include.NON_DEFAULT)
@JsonIgnoreProperties(ignoreUnknown = true)
diff --git a/core/src/main/java/net/opentsdb/data/types/event/EventsValue.java b/core/src/main/java/net/opentsdb/data/types/event/EventsValue.java
index 9b92564156..eb70616d04 100644
--- a/core/src/main/java/net/opentsdb/data/types/event/EventsValue.java
+++ b/core/src/main/java/net/opentsdb/data/types/event/EventsValue.java
@@ -15,15 +15,9 @@
package net.opentsdb.data.types.event;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.util.List;
import java.util.Map;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.MillisecondTimeStamp;
import net.opentsdb.data.SecondTimeStamp;
@@ -31,6 +25,14 @@
import net.opentsdb.data.TimeStamp;
import net.opentsdb.query.processor.rate.RateConfig;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+import com.google.common.reflect.TypeToken;
+
@JsonInclude(Include.NON_DEFAULT)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonDeserialize(builder = EventsValue.Builder.class)
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/IncomingDataPoint.java b/core/src/main/java/net/opentsdb/data/types/numeric/IncomingDataPoint.java
index 21cb03504f..cc80c77173 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/IncomingDataPoint.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/IncomingDataPoint.java
@@ -21,7 +21,6 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/MutableNumericSummaryValue.java b/core/src/main/java/net/opentsdb/data/types/numeric/MutableNumericSummaryValue.java
index 99ceed54d4..403a33eb49 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/MutableNumericSummaryValue.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/MutableNumericSummaryValue.java
@@ -19,13 +19,14 @@
import java.util.Map;
import java.util.Map.Entry;
-import com.google.common.collect.Maps;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.MillisecondTimeStamp;
import net.opentsdb.data.TimeSeriesValue;
import net.opentsdb.data.TimeStamp;
+import com.google.common.collect.Maps;
+import com.google.common.reflect.TypeToken;
+
/**
* A mutable summary value with timestamp. It contains a map of summary
* IDs to {@link MutableNumericType} values.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/MutableNumericValue.java b/core/src/main/java/net/opentsdb/data/types/numeric/MutableNumericValue.java
index 176b283ce4..8096bcb233 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/MutableNumericValue.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/MutableNumericValue.java
@@ -14,13 +14,13 @@
// limitations under the License.
package net.opentsdb.data.types.numeric;
-import com.google.common.reflect.TypeToken;
-
import net.opentsdb.data.MillisecondTimeStamp;
import net.opentsdb.data.TimeSeriesValue;
import net.opentsdb.data.TimeStamp;
import net.opentsdb.data.TimeStamp.Op;
+import com.google.common.reflect.TypeToken;
+
/**
* A simple mutable data point for holding primitive signed numbers including
* {@link Long}s or {@link Double}s. The class is also nullable so that if the
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/NumericArrayTimeSeries.java b/core/src/main/java/net/opentsdb/data/types/numeric/NumericArrayTimeSeries.java
index de52393d3d..8c808cf546 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/NumericArrayTimeSeries.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/NumericArrayTimeSeries.java
@@ -18,16 +18,11 @@
import java.util.List;
import java.util.Optional;
+import net.opentsdb.data.*;
+
import com.google.common.collect.Lists;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-
/**
* A simple implementation of the {@link NumericArrayType} primarily
* for testing.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/NumericArrayType.java b/core/src/main/java/net/opentsdb/data/types/numeric/NumericArrayType.java
index efb9c0157c..644fe3a6de 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/NumericArrayType.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/NumericArrayType.java
@@ -17,11 +17,11 @@
import java.util.Collections;
import java.util.List;
+import net.opentsdb.data.TimeSeriesDataType;
+
import com.google.common.collect.Lists;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeriesDataType;
-
/**
* TODO - scratch work for now when we have a normalized timeseries.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/NumericByteArraySummaryType.java b/core/src/main/java/net/opentsdb/data/types/numeric/NumericByteArraySummaryType.java
index fda3b6f78f..cde87c9d62 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/NumericByteArraySummaryType.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/NumericByteArraySummaryType.java
@@ -14,10 +14,10 @@
// limitations under the License.
package net.opentsdb.data.types.numeric;
-import com.google.common.reflect.TypeToken;
-
import net.opentsdb.data.TimeSeriesDataType;
+import com.google.common.reflect.TypeToken;
+
/**
* For summaries we'll do:
* <8B timestamp><1B num following values><1B type><1B flags>...[repeat]
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/NumericLongArrayType.java b/core/src/main/java/net/opentsdb/data/types/numeric/NumericLongArrayType.java
index 916de4696d..4f6f465cb3 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/NumericLongArrayType.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/NumericLongArrayType.java
@@ -14,10 +14,10 @@
// limitations under the License.
package net.opentsdb.data.types.numeric;
-import com.google.common.reflect.TypeToken;
-
import net.opentsdb.data.TimeSeriesDataType;
+import com.google.common.reflect.TypeToken;
+
/**
* An encoding of timestamp and numeric values in a {@link long[]} for better
* cache usage so that we're working on a vector instead of iterators. This is
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/NumericMillisecondShard.java b/core/src/main/java/net/opentsdb/data/types/numeric/NumericMillisecondShard.java
index db74ec4c3e..0a94f8b804 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/NumericMillisecondShard.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/NumericMillisecondShard.java
@@ -17,29 +17,17 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Optional;
+import java.util.*;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.MillisecondTimeStamp;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
+import net.opentsdb.data.*;
import net.opentsdb.storage.schemas.tsdb1x.NumericCodec;
import net.opentsdb.utils.Bytes;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+
/**
* A class that concatenates individual numeric data points into two byte arrays
* for a fairly quick and easy way to cache the information. Note that this
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/NumericSummaryType.java b/core/src/main/java/net/opentsdb/data/types/numeric/NumericSummaryType.java
index 183c360237..c5158b3d63 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/NumericSummaryType.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/NumericSummaryType.java
@@ -17,12 +17,13 @@
import java.util.Collection;
import java.util.List;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.rollup.DefaultRollupConfig;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+
/**
* A summary of numeric data, e.g. a time interval rollup (downsample)
* or a pre-aggregation of some data. E.g this type can contain
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/NumericType.java b/core/src/main/java/net/opentsdb/data/types/numeric/NumericType.java
index e00aa075d5..4be325addf 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/NumericType.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/NumericType.java
@@ -16,11 +16,11 @@
import java.util.List;
+import net.opentsdb.data.TimeSeriesDataType;
+
import com.google.common.collect.Lists;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeriesDataType;
-
/**
* Represents a single numeric data point.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayAggregatorUtils.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayAggregatorUtils.java
index c768a6711c..3d5fdd6dec 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayAggregatorUtils.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayAggregatorUtils.java
@@ -14,18 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-import net.opentsdb.data.types.numeric.NumericArrayType;
-import net.opentsdb.data.types.numeric.NumericType;
-
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAmount;
import java.util.Optional;
+
+import net.opentsdb.data.*;
+import net.opentsdb.data.types.numeric.NumericArrayType;
+import net.opentsdb.data.types.numeric.NumericType;
+
/**
* Utilities for numeric array aggregators.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayAverageFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayAverageFactory.java
index 12f48e1a02..bb7b577103 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayAverageFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayAverageFactory.java
@@ -16,8 +16,6 @@
import java.util.Arrays;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
@@ -25,6 +23,9 @@
import net.opentsdb.pools.IntArrayPool;
import net.opentsdb.pools.PooledObject;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Computes the average across the array. Returns a double array always.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayCountFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayCountFactory.java
index f9cb85fec2..f9e3e9818a 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayCountFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayCountFactory.java
@@ -16,12 +16,13 @@
import java.util.Arrays;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Just the count.
* Note: This aggregator will always return a long array and ignores
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayFirstFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayFirstFactory.java
index fd8022cea2..d57f369b01 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayFirstFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayFirstFactory.java
@@ -14,12 +14,12 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Returns the first values honoring infectious NaN.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayLastFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayLastFactory.java
index 219537f19c..d21f890051 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayLastFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayLastFactory.java
@@ -14,12 +14,12 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Returns the last values honoring infectious NaN.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMaxFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMaxFactory.java
index ad666e788a..a783f48948 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMaxFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMaxFactory.java
@@ -14,12 +14,12 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Just the max.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMedianFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMedianFactory.java
index e00c912047..784fdd5b38 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMedianFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMedianFactory.java
@@ -16,12 +16,13 @@
import java.util.Arrays;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Computes the median across the array.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMinFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMinFactory.java
index be8620a9a4..f51e189ab7 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMinFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayMinFactory.java
@@ -14,12 +14,12 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Just the min.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayPercentileFactories.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayPercentileFactories.java
index bb16c013d0..2926f2ca0c 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayPercentileFactories.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArrayPercentileFactories.java
@@ -16,15 +16,15 @@
import java.util.Arrays;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.AggregatorConfig;
+
import org.apache.commons.math3.stat.descriptive.rank.Percentile;
import org.apache.commons.math3.stat.descriptive.rank.Percentile.EstimationType;
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.AggregatorConfig;
-
/**
* Instantiates a bunch of factories for various percentile functions, the same
* we had in TSDB 2.x and {@link PercentilesFactories}.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArraySumFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArraySumFactory.java
index 6beae0449d..bd35c79379 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArraySumFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ArraySumFactory.java
@@ -14,12 +14,12 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Returns a Sum array aggregator.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/AverageFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/AverageFactory.java
index b1bf81b0e3..f9be183948 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/AverageFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/AverageFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Computes the average. For longs, if the result is a whole number, it will
* return a long, otherwise it will return a double.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/BaseArrayAggregator.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/BaseArrayAggregator.java
index 802fba86ee..4f6f4e8b51 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/BaseArrayAggregator.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/BaseArrayAggregator.java
@@ -14,14 +14,14 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.reflect.TypeToken;
+import java.util.Arrays;
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.pools.ArrayObjectPool;
import net.opentsdb.pools.PooledObject;
-import java.util.Arrays;
+import com.google.common.reflect.TypeToken;
/**
* A base implementation for numeric array aggregation functions.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/BaseNumericAggregator.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/BaseNumericAggregator.java
index a1b925dae6..0a3bb4f617 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/BaseNumericAggregator.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/BaseNumericAggregator.java
@@ -14,10 +14,10 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-
import net.opentsdb.data.types.numeric.NumericType;
+import com.google.common.base.Strings;
+
/**
* A base implementation for numeric iterators that stores the name as well as
* a numeric value implementation to populate with a result.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/CountFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/CountFactory.java
index 0575b64992..7a42421c6c 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/CountFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/CountFactory.java
@@ -14,14 +14,14 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Simply returns the {@code limit} value of the {@link #run(double[], int)}
* or {@link #run(long[], int)} calls.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ExponentialWeightedMovingAverageFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ExponentialWeightedMovingAverageFactory.java
index 3ec8218748..28a5a6b9ce 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ExponentialWeightedMovingAverageFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/ExponentialWeightedMovingAverageFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Computes the exponential moving average using the values between the two
* offsets. It uses a provided alpha or the default calculated alpha based on
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/FirstFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/FirstFactory.java
index 964b2b28c9..c96bea6ae9 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/FirstFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/FirstFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Returns the first value in the array.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/LastFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/LastFactory.java
index 32b3747282..b60d0eb1ad 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/LastFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/LastFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Returns the last value in the array.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MaxFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MaxFactory.java
index 328314c0b4..8475f00406 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MaxFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MaxFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Finds the largest value in the array.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MedianFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MedianFactory.java
index 7218fe9f55..1c726a125b 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MedianFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MedianFactory.java
@@ -16,8 +16,6 @@
import java.util.Arrays;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
@@ -25,6 +23,9 @@
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Returns the median value of the set. For even set sizes, the upper most
* value of the median is returned.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MinFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MinFactory.java
index bfa40754c5..94ab7cad70 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MinFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MinFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Finds the smallest value in the array.
*
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MovingMedianFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MovingMedianFactory.java
index db8b0cae8f..a099681ec6 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MovingMedianFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MovingMedianFactory.java
@@ -16,8 +16,6 @@
import java.util.Arrays;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
@@ -25,6 +23,9 @@
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Computes the moving median without weighting. Just looks at the values
* between the offsets, sorts them and finds the median.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MultiplyFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MultiplyFactory.java
index d680771c4b..0f7d1cffb8 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MultiplyFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/MultiplyFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Calculates the product of all values in the array.
* TODO - handle integer overflows.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/PercentilesFactories.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/PercentilesFactories.java
index 7e1b377e2c..3621985d25 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/PercentilesFactories.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/PercentilesFactories.java
@@ -14,6 +14,12 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.AggregatorConfig;
+import net.opentsdb.data.types.numeric.MutableNumericValue;
+import net.opentsdb.exceptions.IllegalDataException;
+
import org.apache.commons.math3.stat.descriptive.rank.Percentile;
import org.apache.commons.math3.stat.descriptive.rank.Percentile.EstimationType;
import org.apache.commons.math3.util.ResizableDoubleArray;
@@ -22,12 +28,6 @@
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.AggregatorConfig;
-import net.opentsdb.data.types.numeric.MutableNumericValue;
-import net.opentsdb.exceptions.IllegalDataException;
-
public class PercentilesFactories {
public static class P999Factory extends BaseTSDBPlugin implements
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/StandardDeviationFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/StandardDeviationFactory.java
index 6bcf9bb456..3c88360aaa 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/StandardDeviationFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/StandardDeviationFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Standard Deviation aggregator.
* Can compute without storing all of the data points in memory at the same
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/SumFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/SumFactory.java
index 95e112f747..d4323cce2a 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/SumFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/SumFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Aggregator that simply sums all of the values in the array.
* TODO - handle integer overflows.
diff --git a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/WeightedMovingAverageFactory.java b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/WeightedMovingAverageFactory.java
index d2bc25be63..92d782f5a8 100644
--- a/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/WeightedMovingAverageFactory.java
+++ b/core/src/main/java/net/opentsdb/data/types/numeric/aggregators/WeightedMovingAverageFactory.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.data.types.numeric.aggregators;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.AggregatorConfig;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.exceptions.IllegalDataException;
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Computes the moving average weighted by the number of values in the array
* (between the offsets). Heaviest weighting applied to higher indexed values
diff --git a/core/src/main/java/net/opentsdb/data/types/status/StatusGroupIterator.java b/core/src/main/java/net/opentsdb/data/types/status/StatusGroupIterator.java
index 79c0f4cae6..0299036e9f 100644
--- a/core/src/main/java/net/opentsdb/data/types/status/StatusGroupIterator.java
+++ b/core/src/main/java/net/opentsdb/data/types/status/StatusGroupIterator.java
@@ -15,10 +15,11 @@
package net.opentsdb.data.types.status;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeriesValue;
import net.opentsdb.data.TypedTimeSeriesIterator;
+import com.google.common.reflect.TypeToken;
+
public class StatusGroupIterator extends StatusGroupValue implements TypedTimeSeriesIterator {
boolean has_next = true;
diff --git a/core/src/main/java/net/opentsdb/data/types/status/StatusGroupType.java b/core/src/main/java/net/opentsdb/data/types/status/StatusGroupType.java
index e847a7b2c1..b95609fcbd 100644
--- a/core/src/main/java/net/opentsdb/data/types/status/StatusGroupType.java
+++ b/core/src/main/java/net/opentsdb/data/types/status/StatusGroupType.java
@@ -15,9 +15,10 @@
package net.opentsdb.data.types.status;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeriesDataType;
+import com.google.common.reflect.TypeToken;
+
public interface StatusGroupType extends TimeSeriesDataType {
TypeToken TYPE = TypeToken.of(StatusGroupType.class);
diff --git a/core/src/main/java/net/opentsdb/data/types/status/StatusGroupValue.java b/core/src/main/java/net/opentsdb/data/types/status/StatusGroupValue.java
index 9ad4de7ccd..d4f55db23f 100644
--- a/core/src/main/java/net/opentsdb/data/types/status/StatusGroupValue.java
+++ b/core/src/main/java/net/opentsdb/data/types/status/StatusGroupValue.java
@@ -15,10 +15,11 @@
package net.opentsdb.data.types.status;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeriesValue;
import net.opentsdb.data.TimeStamp;
+import com.google.common.reflect.TypeToken;
+
public class StatusGroupValue implements StatusGroupType, TimeSeriesValue {
private StatusValue[] statuses;
diff --git a/core/src/main/java/net/opentsdb/data/types/status/StatusIterator.java b/core/src/main/java/net/opentsdb/data/types/status/StatusIterator.java
index b202d4eda7..31fef39868 100644
--- a/core/src/main/java/net/opentsdb/data/types/status/StatusIterator.java
+++ b/core/src/main/java/net/opentsdb/data/types/status/StatusIterator.java
@@ -15,12 +15,14 @@
package net.opentsdb.data.types.status;
-import com.google.common.reflect.TypeToken;
+import java.util.Map;
+
+
import net.opentsdb.data.TimeSeriesValue;
import net.opentsdb.data.TimeStamp;
import net.opentsdb.data.TypedTimeSeriesIterator;
-import java.util.Map;
+import com.google.common.reflect.TypeToken;
public class StatusIterator extends StatusValue implements TypedTimeSeriesIterator {
diff --git a/core/src/main/java/net/opentsdb/data/types/status/StatusType.java b/core/src/main/java/net/opentsdb/data/types/status/StatusType.java
index e309472836..d05bafe4d7 100644
--- a/core/src/main/java/net/opentsdb/data/types/status/StatusType.java
+++ b/core/src/main/java/net/opentsdb/data/types/status/StatusType.java
@@ -15,11 +15,13 @@
package net.opentsdb.data.types.status;
-import com.google.common.reflect.TypeToken;
+import java.util.Map;
+
+
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.data.TimeStamp;
-import java.util.Map;
+import com.google.common.reflect.TypeToken;
/**
* Represents a status
diff --git a/core/src/main/java/net/opentsdb/data/types/status/StatusValue.java b/core/src/main/java/net/opentsdb/data/types/status/StatusValue.java
index 6a2423d9d0..86500861a4 100644
--- a/core/src/main/java/net/opentsdb/data/types/status/StatusValue.java
+++ b/core/src/main/java/net/opentsdb/data/types/status/StatusValue.java
@@ -15,11 +15,13 @@
package net.opentsdb.data.types.status;
-import com.google.common.reflect.TypeToken;
+import java.util.Map;
+
+
import net.opentsdb.data.TimeSeriesValue;
import net.opentsdb.data.TimeStamp;
-import java.util.Map;
+import com.google.common.reflect.TypeToken;
public class StatusValue implements StatusType, TimeSeriesValue {
diff --git a/core/src/main/java/net/opentsdb/meta/DefaultBatchMetaQuery.java b/core/src/main/java/net/opentsdb/meta/DefaultBatchMetaQuery.java
index 51fecf8d99..ab51adbc3f 100644
--- a/core/src/main/java/net/opentsdb/meta/DefaultBatchMetaQuery.java
+++ b/core/src/main/java/net/opentsdb/meta/DefaultBatchMetaQuery.java
@@ -14,25 +14,27 @@
// limitations under the License.
package net.opentsdb.meta;
+import java.util.ArrayList;
+import java.util.List;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.MillisecondTimeStamp;
+import net.opentsdb.data.TimeStamp;
+import net.opentsdb.query.filter.QueryFilter;
+import net.opentsdb.utils.DateTime;
+
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.google.common.base.Strings;
+import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.MillisecondTimeStamp;
-import net.opentsdb.query.filter.QueryFilter;
-import net.opentsdb.utils.DateTime;
-
-import java.util.ArrayList;
-import java.util.List;
/**
* Represents parameters to search for metadata.
diff --git a/core/src/main/java/net/opentsdb/meta/DefaultMetaQuery.java b/core/src/main/java/net/opentsdb/meta/DefaultMetaQuery.java
index 7161e5c2ee..fd707e9972 100644
--- a/core/src/main/java/net/opentsdb/meta/DefaultMetaQuery.java
+++ b/core/src/main/java/net/opentsdb/meta/DefaultMetaQuery.java
@@ -14,23 +14,26 @@
// limitations under the License.
package net.opentsdb.meta;
+import java.util.List;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.meta.BatchMetaQuery.QueryType;
+import net.opentsdb.query.filter.DefaultNamedFilter;
+import net.opentsdb.query.filter.QueryFilter;
+import net.opentsdb.query.filter.QueryFilterFactory;
+import net.opentsdb.utils.JSON;
+
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.query.filter.DefaultNamedFilter;
-import net.opentsdb.query.filter.QueryFilter;
-import net.opentsdb.query.filter.QueryFilterFactory;
-import net.opentsdb.meta.BatchMetaQuery.QueryType;
-import net.opentsdb.utils.JSON;
-
-import java.util.List;
/**
* Represents parameters to search for metadata.
diff --git a/core/src/main/java/net/opentsdb/meta/MetaDataCache.java b/core/src/main/java/net/opentsdb/meta/MetaDataCache.java
index 05efcc0d8e..118dc92913 100644
--- a/core/src/main/java/net/opentsdb/meta/MetaDataCache.java
+++ b/core/src/main/java/net/opentsdb/meta/MetaDataCache.java
@@ -12,11 +12,11 @@
// see .
package net.opentsdb.meta;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.stats.StatsCollector;
+import com.stumbleupon.async.Deferred;
+
/**
* This is a first stab at a meta data cache. Initially it only handles
* incrementing TSUID counters in a local database. The class will then
diff --git a/core/src/main/java/net/opentsdb/meta/MetaDataStorageSchema.java b/core/src/main/java/net/opentsdb/meta/MetaDataStorageSchema.java
index 201ae6f853..81b4e45980 100644
--- a/core/src/main/java/net/opentsdb/meta/MetaDataStorageSchema.java
+++ b/core/src/main/java/net/opentsdb/meta/MetaDataStorageSchema.java
@@ -14,16 +14,17 @@
// limitations under the License.
package net.opentsdb.meta;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.stumbleupon.async.Deferred;
+import java.util.Map;
import net.opentsdb.core.TSDB;
import net.opentsdb.query.QueryPipelineContext;
import net.opentsdb.query.TimeSeriesDataSourceConfig;
import net.opentsdb.stats.Span;
-import java.util.Map;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import com.stumbleupon.async.Deferred;
/**
* Handles querying a meta data store for time series identifiers given
diff --git a/core/src/main/java/net/opentsdb/pools/BaseArrayObjectPoolAllocator.java b/core/src/main/java/net/opentsdb/pools/BaseArrayObjectPoolAllocator.java
index e27ef96cc7..8b756d2c23 100644
--- a/core/src/main/java/net/opentsdb/pools/BaseArrayObjectPoolAllocator.java
+++ b/core/src/main/java/net/opentsdb/pools/BaseArrayObjectPoolAllocator.java
@@ -14,18 +14,18 @@
// limitations under the License.
package net.opentsdb.pools;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import net.opentsdb.configuration.Configuration;
import net.opentsdb.core.TSDB;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* Base class for the pooled array allocators.
*
* @since 3.0
*/
-public abstract class BaseArrayObjectPoolAllocator
+public abstract class BaseArrayObjectPoolAllocator
extends BaseObjectPoolAllocator implements ArrayObjectPoolAllocator {
private static final Logger LOG = LoggerFactory.getLogger(
BaseArrayObjectPoolAllocator.class);
diff --git a/core/src/main/java/net/opentsdb/pools/BaseObjectPoolAllocator.java b/core/src/main/java/net/opentsdb/pools/BaseObjectPoolAllocator.java
index ea92d9b4d2..90d2c5bf6b 100644
--- a/core/src/main/java/net/opentsdb/pools/BaseObjectPoolAllocator.java
+++ b/core/src/main/java/net/opentsdb/pools/BaseObjectPoolAllocator.java
@@ -14,14 +14,14 @@
// limitations under the License.
package net.opentsdb.pools;
+import net.opentsdb.configuration.Configuration;
+import net.opentsdb.core.TSDB;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.configuration.Configuration;
-import net.opentsdb.core.TSDB;
-
/**
* A useful base class for object pool allocators.
*
diff --git a/core/src/main/java/net/opentsdb/pools/BlockingQueueArrayObjectPool.java b/core/src/main/java/net/opentsdb/pools/BlockingQueueArrayObjectPool.java
index 62d5cfb492..61b003cdf8 100644
--- a/core/src/main/java/net/opentsdb/pools/BlockingQueueArrayObjectPool.java
+++ b/core/src/main/java/net/opentsdb/pools/BlockingQueueArrayObjectPool.java
@@ -19,6 +19,8 @@
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
+import net.opentsdb.core.TSDB;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,7 +28,6 @@
import io.netty.util.Timeout;
import io.netty.util.TimerTask;
-import net.opentsdb.core.TSDB;
/**
* This is a super simple {@link BlockingQueue} based pool if no other
diff --git a/core/src/main/java/net/opentsdb/pools/BlockingQueueObjectPool.java b/core/src/main/java/net/opentsdb/pools/BlockingQueueObjectPool.java
index 114d0ad624..261496b6f3 100644
--- a/core/src/main/java/net/opentsdb/pools/BlockingQueueObjectPool.java
+++ b/core/src/main/java/net/opentsdb/pools/BlockingQueueObjectPool.java
@@ -19,6 +19,8 @@
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
+import net.opentsdb.core.TSDB;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,7 +28,6 @@
import io.netty.util.Timeout;
import io.netty.util.TimerTask;
-import net.opentsdb.core.TSDB;
/**
* This is a super simple {@link BlockingQueue} based pool if no other
diff --git a/core/src/main/java/net/opentsdb/pools/ByteArrayPool.java b/core/src/main/java/net/opentsdb/pools/ByteArrayPool.java
index f907cb7676..56d52156fb 100644
--- a/core/src/main/java/net/opentsdb/pools/ByteArrayPool.java
+++ b/core/src/main/java/net/opentsdb/pools/ByteArrayPool.java
@@ -14,13 +14,13 @@
// limitations under the License.
package net.opentsdb.pools;
+import net.opentsdb.configuration.Configuration;
+import net.opentsdb.core.TSDB;
+
import com.google.common.base.Strings;
import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.configuration.Configuration;
-import net.opentsdb.core.TSDB;
-
/**
* An allocator and pool for primitive byte arrays.
*
diff --git a/core/src/main/java/net/opentsdb/pools/DoubleArrayPool.java b/core/src/main/java/net/opentsdb/pools/DoubleArrayPool.java
index f8b15a6246..500ced1dbf 100644
--- a/core/src/main/java/net/opentsdb/pools/DoubleArrayPool.java
+++ b/core/src/main/java/net/opentsdb/pools/DoubleArrayPool.java
@@ -14,13 +14,13 @@
// limitations under the License.
package net.opentsdb.pools;
+import net.opentsdb.configuration.Configuration;
+import net.opentsdb.core.TSDB;
+
import com.google.common.base.Strings;
import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.configuration.Configuration;
-import net.opentsdb.core.TSDB;
-
/**
* An allocator and pool for primitive double arrays.
*
diff --git a/core/src/main/java/net/opentsdb/pools/DummyArrayObjectPool.java b/core/src/main/java/net/opentsdb/pools/DummyArrayObjectPool.java
index 869a76ee8b..a16ca65317 100644
--- a/core/src/main/java/net/opentsdb/pools/DummyArrayObjectPool.java
+++ b/core/src/main/java/net/opentsdb/pools/DummyArrayObjectPool.java
@@ -16,10 +16,11 @@
import java.time.temporal.ChronoUnit;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
+import com.stumbleupon.async.Deferred;
+
/**
* This is a non-pooling pool that is used if no default implementation is found.
* It will allocate an object and wrapper for each call. Boo!
diff --git a/core/src/main/java/net/opentsdb/pools/DummyObjectPool.java b/core/src/main/java/net/opentsdb/pools/DummyObjectPool.java
index 6a58b45896..7d7b775a64 100644
--- a/core/src/main/java/net/opentsdb/pools/DummyObjectPool.java
+++ b/core/src/main/java/net/opentsdb/pools/DummyObjectPool.java
@@ -16,10 +16,11 @@
import java.time.temporal.ChronoUnit;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
+import com.stumbleupon.async.Deferred;
+
/**
* This is a non-pooling pool that is used if no default implementation is found.
* It will allocate an object and wrapper for each call. Boo!
diff --git a/core/src/main/java/net/opentsdb/pools/IntArrayPool.java b/core/src/main/java/net/opentsdb/pools/IntArrayPool.java
index 3615dc652b..865ded2c71 100644
--- a/core/src/main/java/net/opentsdb/pools/IntArrayPool.java
+++ b/core/src/main/java/net/opentsdb/pools/IntArrayPool.java
@@ -14,12 +14,12 @@
// limitations under the License.
package net.opentsdb.pools;
+import net.opentsdb.core.TSDB;
+
import com.google.common.base.Strings;
import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.TSDB;
-
/**
* An allocator and pool for primitive integer arrays.
*
diff --git a/core/src/main/java/net/opentsdb/pools/LongArrayPool.java b/core/src/main/java/net/opentsdb/pools/LongArrayPool.java
index 650080337b..a785bdd5db 100644
--- a/core/src/main/java/net/opentsdb/pools/LongArrayPool.java
+++ b/core/src/main/java/net/opentsdb/pools/LongArrayPool.java
@@ -14,12 +14,12 @@
// limitations under the License.
package net.opentsdb.pools;
+import net.opentsdb.core.TSDB;
+
import com.google.common.base.Strings;
import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.TSDB;
-
/**
* An allocator and pool for primitive long arrays.
*
diff --git a/core/src/main/java/net/opentsdb/pools/NoDataPartialTimeSeriesPool.java b/core/src/main/java/net/opentsdb/pools/NoDataPartialTimeSeriesPool.java
index c0f95e52bc..4103442669 100644
--- a/core/src/main/java/net/opentsdb/pools/NoDataPartialTimeSeriesPool.java
+++ b/core/src/main/java/net/opentsdb/pools/NoDataPartialTimeSeriesPool.java
@@ -14,13 +14,13 @@
// limitations under the License.
package net.opentsdb.pools;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.NoDataPartialTimeSeries;
+
import com.google.common.base.Strings;
import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.NoDataPartialTimeSeries;
-
/**
* Simple pool for sentinels marking an empty time series set.
*
diff --git a/core/src/main/java/net/opentsdb/pools/StringBuilderPool.java b/core/src/main/java/net/opentsdb/pools/StringBuilderPool.java
index 51779e1375..61530228bc 100644
--- a/core/src/main/java/net/opentsdb/pools/StringBuilderPool.java
+++ b/core/src/main/java/net/opentsdb/pools/StringBuilderPool.java
@@ -14,12 +14,12 @@
// limitations under the License.
package net.opentsdb.pools;
+import net.opentsdb.core.TSDB;
+
import com.google.common.base.Strings;
import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.TSDB;
-
/**
* An allocator and pool for string builders used during serialization.
*
diff --git a/core/src/main/java/net/opentsdb/query/AbstractQueryNode.java b/core/src/main/java/net/opentsdb/query/AbstractQueryNode.java
index 2fc1cf899f..cd67f7fec2 100644
--- a/core/src/main/java/net/opentsdb/query/AbstractQueryNode.java
+++ b/core/src/main/java/net/opentsdb/query/AbstractQueryNode.java
@@ -16,16 +16,17 @@
import java.util.Collection;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.stumbleupon.async.Deferred;
import net.opentsdb.data.PartialTimeSeries;
import net.opentsdb.data.TimeSeriesDataSource;
import net.opentsdb.exceptions.QueryUpstreamException;
import net.opentsdb.stats.Span;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.stumbleupon.async.Deferred;
+
/**
* A base class for nodes that holds a link to the context, upstream and
* downstream nodes.
diff --git a/core/src/main/java/net/opentsdb/query/AbstractQueryPipelineContext.java b/core/src/main/java/net/opentsdb/query/AbstractQueryPipelineContext.java
index f045f44721..62a281cec9 100644
--- a/core/src/main/java/net/opentsdb/query/AbstractQueryPipelineContext.java
+++ b/core/src/main/java/net/opentsdb/query/AbstractQueryPipelineContext.java
@@ -14,17 +14,22 @@
// limitations under the License.
package net.opentsdb.query;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.PartialTimeSeries;
+import net.opentsdb.data.TimeSeriesDataSource;
+import net.opentsdb.data.TimeSeriesId;
import net.opentsdb.data.TimeStamp.Op;
import net.opentsdb.data.types.status.StatusGroupQueryResult;
import net.opentsdb.data.types.status.Summary;
+import net.opentsdb.query.hacluster.HACluster;
+import net.opentsdb.query.plan.DefaultQueryPlanner;
+import net.opentsdb.stats.Span;
+import net.opentsdb.utils.JSON;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,15 +41,6 @@
import com.stumbleupon.async.Callback;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.PartialTimeSeries;
-import net.opentsdb.data.TimeSeriesDataSource;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.query.hacluster.HACluster;
-import net.opentsdb.query.plan.DefaultQueryPlanner;
-import net.opentsdb.stats.Span;
-import net.opentsdb.utils.JSON;
-
/**
* A useful base class for {@link QueryPipelineContext}s that stores references
* to the TSDB, query, graph, roots and sinks.
diff --git a/core/src/main/java/net/opentsdb/query/BadQueryResult.java b/core/src/main/java/net/opentsdb/query/BadQueryResult.java
index 32b51f4f2d..9f0135260a 100644
--- a/core/src/main/java/net/opentsdb/query/BadQueryResult.java
+++ b/core/src/main/java/net/opentsdb/query/BadQueryResult.java
@@ -18,8 +18,6 @@
import java.util.Collections;
import java.util.List;
-import com.google.common.base.Strings;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.common.Const;
import net.opentsdb.data.TimeSeries;
@@ -27,6 +25,9 @@
import net.opentsdb.data.TimeSpecification;
import net.opentsdb.rollup.RollupConfig;
+import com.google.common.base.Strings;
+import com.google.common.reflect.TypeToken;
+
/**
* A simple buildable class for a failed query.
*/
diff --git a/core/src/main/java/net/opentsdb/query/BaseQueryContext.java b/core/src/main/java/net/opentsdb/query/BaseQueryContext.java
index ba97654114..a2fe52dcf1 100644
--- a/core/src/main/java/net/opentsdb/query/BaseQueryContext.java
+++ b/core/src/main/java/net/opentsdb/query/BaseQueryContext.java
@@ -14,9 +14,6 @@
// limitations under the License.
package net.opentsdb.query;
-import com.google.common.collect.Lists;
-import com.stumbleupon.async.Callback;
-import com.stumbleupon.async.Deferred;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
@@ -25,7 +22,6 @@
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.auth.AuthState;
import net.opentsdb.common.Const;
import net.opentsdb.core.TSDB;
@@ -37,6 +33,11 @@
import net.opentsdb.stats.Span;
import net.opentsdb.utils.Deferreds;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Callback;
+import com.stumbleupon.async.Deferred;
+
/**
* A base class for QueryContext's.
*
diff --git a/core/src/main/java/net/opentsdb/query/BaseQueryNodeConfig.java b/core/src/main/java/net/opentsdb/query/BaseQueryNodeConfig.java
index 8aea48c309..acba41a70a 100644
--- a/core/src/main/java/net/opentsdb/query/BaseQueryNodeConfig.java
+++ b/core/src/main/java/net/opentsdb/query/BaseQueryNodeConfig.java
@@ -18,23 +18,24 @@
import java.util.List;
import java.util.Map;
+import net.opentsdb.configuration.Configuration;
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.utils.Comparators;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
+import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import com.google.common.base.Objects;
-
import com.google.common.hash.HashCode;
import com.google.common.hash.Hasher;
-import net.opentsdb.configuration.Configuration;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.utils.Comparators;
/**
* A basic configuration implementation handling the ID and overrides
diff --git a/core/src/main/java/net/opentsdb/query/BaseQueryNodeConfigWithInterpolators.java b/core/src/main/java/net/opentsdb/query/BaseQueryNodeConfigWithInterpolators.java
index 0a26b56f4b..d9490b94f8 100644
--- a/core/src/main/java/net/opentsdb/query/BaseQueryNodeConfigWithInterpolators.java
+++ b/core/src/main/java/net/opentsdb/query/BaseQueryNodeConfigWithInterpolators.java
@@ -14,9 +14,21 @@
// limitations under the License.
package net.opentsdb.query;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+
+import net.opentsdb.core.TSDB;
+import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
+import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
+import net.opentsdb.utils.Comparators.MapComparator;
+
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -24,16 +36,6 @@
import com.google.common.hash.Hashing;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
-import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
-import net.opentsdb.utils.Comparators.MapComparator;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
/**
* Base node config class that handles interpolation configs.
*
@@ -41,8 +43,8 @@
*/
public abstract class BaseQueryNodeConfigWithInterpolators
,
- C extends BaseQueryNodeConfigWithInterpolators>
- extends BaseQueryNodeConfig {
+ C extends BaseQueryNodeConfigWithInterpolators>
+ extends BaseQueryNodeConfig {
/** A comparator for the interpolator map. */
protected static MapComparator, QueryInterpolatorConfig> INTERPOLATOR_CMP
diff --git a/core/src/main/java/net/opentsdb/query/BaseTimeSeriesDataSourceConfig.java b/core/src/main/java/net/opentsdb/query/BaseTimeSeriesDataSourceConfig.java
index ef811b3c59..b2d69a38bb 100644
--- a/core/src/main/java/net/opentsdb/query/BaseTimeSeriesDataSourceConfig.java
+++ b/core/src/main/java/net/opentsdb/query/BaseTimeSeriesDataSourceConfig.java
@@ -12,6 +12,25 @@
//see .
package net.opentsdb.query;
+import java.time.temporal.TemporalAmount;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.MillisecondTimeStamp;
+import net.opentsdb.data.TimeSeriesDataSource;
+import net.opentsdb.data.TimeStamp;
+import net.opentsdb.query.filter.MetricFilter;
+import net.opentsdb.query.filter.QueryFilter;
+import net.opentsdb.query.filter.QueryFilterFactory;
+import net.opentsdb.utils.Comparators;
+import net.opentsdb.utils.DateTime;
+import net.opentsdb.utils.Pair;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
@@ -19,31 +38,15 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-import com.google.common.base.Objects;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.MillisecondTimeStamp;
-import net.opentsdb.data.TimeSeriesDataSource;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.query.filter.MetricFilter;
-import net.opentsdb.query.filter.QueryFilter;
-import net.opentsdb.query.filter.QueryFilterFactory;
-import net.opentsdb.utils.Comparators;
-import net.opentsdb.utils.DateTime;
-import net.opentsdb.utils.Pair;
-
-import java.time.temporal.TemporalAmount;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
/**
* A simple base config class for {@link TimeSeriesDataSource} nodes.
diff --git a/core/src/main/java/net/opentsdb/query/BaseWrappedQueryResult.java b/core/src/main/java/net/opentsdb/query/BaseWrappedQueryResult.java
index 70b2077117..bbd3408169 100644
--- a/core/src/main/java/net/opentsdb/query/BaseWrappedQueryResult.java
+++ b/core/src/main/java/net/opentsdb/query/BaseWrappedQueryResult.java
@@ -17,13 +17,14 @@
import java.time.temporal.ChronoUnit;
import java.util.List;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.data.TimeSeriesId;
import net.opentsdb.data.TimeSpecification;
import net.opentsdb.rollup.RollupConfig;
+import com.google.common.reflect.TypeToken;
+
/**
* The base class for wrapped results wherein the implementation doesn't
* modify most of the underlying result but only needs to override a
diff --git a/core/src/main/java/net/opentsdb/query/ConvertedQueryResult.java b/core/src/main/java/net/opentsdb/query/ConvertedQueryResult.java
index ecf79e5268..18f152ee63 100644
--- a/core/src/main/java/net/opentsdb/query/ConvertedQueryResult.java
+++ b/core/src/main/java/net/opentsdb/query/ConvertedQueryResult.java
@@ -19,20 +19,15 @@
import java.util.List;
import java.util.Optional;
+import net.opentsdb.common.Const;
+import net.opentsdb.data.*;
+import net.opentsdb.stats.Span;
+
import com.google.common.collect.Lists;
import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Callback;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.common.Const;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesByteId;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-import net.opentsdb.stats.Span;
-
/**
* A generic class to convert a result with {@link Const#TS_BYTE_ID}
* encoded time series IDs to {@link Const#TS_STRING_ID} IDs. Call either
@@ -43,7 +38,7 @@
*
* @since 3.0
*/
-public class ConvertedQueryResult extends BaseWrappedQueryResult
+public class ConvertedQueryResult extends BaseWrappedQueryResult
implements Runnable {
/** The node to callback with the converted result. If this is null
diff --git a/core/src/main/java/net/opentsdb/query/DefaultQueryContextFilter.java b/core/src/main/java/net/opentsdb/query/DefaultQueryContextFilter.java
index 93389267b6..71c77a5273 100644
--- a/core/src/main/java/net/opentsdb/query/DefaultQueryContextFilter.java
+++ b/core/src/main/java/net/opentsdb/query/DefaultQueryContextFilter.java
@@ -19,19 +19,32 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.regex.Pattern;
import java.util.Set;
import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.regex.Pattern;
+import net.opentsdb.auth.AuthState;
+import net.opentsdb.configuration.ConfigurationEntrySchema;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.TimeStamp;
+import net.opentsdb.exceptions.QueryExecutionException;
import net.opentsdb.meta.BatchMetaQuery;
import net.opentsdb.meta.MetaQuery;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import net.opentsdb.query.PreAggConfig.MetricPattern;
+import net.opentsdb.query.PreAggConfig.TagsAndAggs;
+import net.opentsdb.query.TimeSeriesQuery.CacheMode;
+import net.opentsdb.query.filter.*;
+import net.opentsdb.query.processor.groupby.GroupByConfig;
+import net.opentsdb.storage.schemas.tsdb1x.Schema;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.KeyDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -40,26 +53,6 @@
import com.google.common.graph.MutableGraph;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.auth.AuthState;
-import net.opentsdb.configuration.ConfigurationEntrySchema;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.exceptions.QueryExecutionException;
-import net.opentsdb.query.PreAggConfig.MetricPattern;
-import net.opentsdb.query.PreAggConfig.TagsAndAggs;
-import net.opentsdb.query.TimeSeriesQuery.CacheMode;
-import net.opentsdb.query.filter.ChainFilter;
-import net.opentsdb.query.filter.ExplicitTagsFilter;
-import net.opentsdb.query.filter.FilterUtils;
-import net.opentsdb.query.filter.NestedQueryFilter;
-import net.opentsdb.query.filter.QueryFilter;
-import net.opentsdb.query.filter.TagValueFilter;
-import net.opentsdb.query.filter.TagValueLiteralOrFilter;
-import net.opentsdb.query.filter.TagValueWildcardFilter;
-import net.opentsdb.query.processor.groupby.GroupByConfig;
-import net.opentsdb.storage.schemas.tsdb1x.Schema;
-
/**
* Stub class for a super simple context filter that filters on the user and
* headers for now.
@@ -68,7 +61,7 @@
*
* @since 3.0
*/
-public class DefaultQueryContextFilter extends BaseTSDBPlugin
+public class DefaultQueryContextFilter extends BaseTSDBPlugin
implements QueryContextFilter {
private static final Logger LOG = LoggerFactory.getLogger(
DefaultQueryContextFilter.class);
diff --git a/core/src/main/java/net/opentsdb/query/DefaultTimeSeriesDataSourceConfig.java b/core/src/main/java/net/opentsdb/query/DefaultTimeSeriesDataSourceConfig.java
index a097f699a9..cca7d72f01 100644
--- a/core/src/main/java/net/opentsdb/query/DefaultTimeSeriesDataSourceConfig.java
+++ b/core/src/main/java/net/opentsdb/query/DefaultTimeSeriesDataSourceConfig.java
@@ -12,15 +12,16 @@
// see .
package net.opentsdb.query;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.google.common.hash.HashCode;
-import net.opentsdb.core.TSDB;
+import com.google.common.hash.HashCode;
@JsonInclude(Include.NON_DEFAULT)
@JsonDeserialize(builder = DefaultTimeSeriesDataSourceConfig.Builder.class)
diff --git a/core/src/main/java/net/opentsdb/query/PreAggConfig.java b/core/src/main/java/net/opentsdb/query/PreAggConfig.java
index 6cde94d591..43b1e00aa2 100644
--- a/core/src/main/java/net/opentsdb/query/PreAggConfig.java
+++ b/core/src/main/java/net/opentsdb/query/PreAggConfig.java
@@ -14,20 +14,20 @@
// limitations under the License.
package net.opentsdb.query;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Set;
-import java.util.TreeMap;
import java.util.regex.Pattern;
+
+import net.opentsdb.common.Const;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -35,8 +35,6 @@
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
-import net.opentsdb.common.Const;
-
@JsonInclude(Include.NON_NULL)
@JsonDeserialize(builder = PreAggConfig.Builder.class)
public class PreAggConfig {
diff --git a/core/src/main/java/net/opentsdb/query/ReadCacheQueryPipelineContext.java b/core/src/main/java/net/opentsdb/query/ReadCacheQueryPipelineContext.java
index 8a6cd51e58..3c70f35ed2 100644
--- a/core/src/main/java/net/opentsdb/query/ReadCacheQueryPipelineContext.java
+++ b/core/src/main/java/net/opentsdb/query/ReadCacheQueryPipelineContext.java
@@ -14,27 +14,11 @@
// limitations under the License.
package net.opentsdb.query;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.stumbleupon.async.Callback;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.common.Const;
import net.opentsdb.core.TSDB;
@@ -50,12 +34,7 @@
import net.opentsdb.query.processor.summarizer.SummarizerConfig;
import net.opentsdb.query.processor.summarizer.SummarizerFactory;
import net.opentsdb.query.processor.topn.TopNConfig;
-import net.opentsdb.query.readcache.CombinedCachedResult;
-import net.opentsdb.query.readcache.QueryReadCache;
-import net.opentsdb.query.readcache.ReadCacheCallback;
-import net.opentsdb.query.readcache.ReadCacheKeyGenerator;
-import net.opentsdb.query.readcache.ReadCacheQueryResult;
-import net.opentsdb.query.readcache.ReadCacheQueryResultSet;
+import net.opentsdb.query.readcache.*;
import net.opentsdb.query.serdes.SerdesOptions;
import net.opentsdb.stats.Span;
import net.opentsdb.stats.StatsCollector;
@@ -63,7 +42,17 @@
import net.opentsdb.utils.DateTime;
import net.opentsdb.utils.JSON;
-public class ReadCacheQueryPipelineContext extends AbstractQueryPipelineContext
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.stumbleupon.async.Callback;
+import com.stumbleupon.async.Deferred;
+
+public class ReadCacheQueryPipelineContext extends AbstractQueryPipelineContext
implements ReadCacheCallback {
static final Logger LOG = LoggerFactory.getLogger(
ReadCacheQueryPipelineContext.class);
diff --git a/core/src/main/java/net/opentsdb/query/SemanticQuery.java b/core/src/main/java/net/opentsdb/query/SemanticQuery.java
index 9ae25cad02..8fab004e90 100644
--- a/core/src/main/java/net/opentsdb/query/SemanticQuery.java
+++ b/core/src/main/java/net/opentsdb/query/SemanticQuery.java
@@ -12,16 +12,12 @@
//see .
package net.opentsdb.query;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.hash.HashCode;
-import com.google.common.base.Objects;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
-import com.google.common.hash.Hasher;
-import com.google.common.hash.Hashing;
import net.opentsdb.core.Const;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.MillisecondTimeStamp;
@@ -37,11 +33,16 @@
import net.opentsdb.utils.DateTime;
import net.opentsdb.utils.JSON;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TreeMap;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.hash.HashCode;
+import com.google.common.hash.Hasher;
+import com.google.common.hash.Hashing;
/**
* A generic query object that allows the construction of a complete DAG
diff --git a/core/src/main/java/net/opentsdb/query/TSQuery.java b/core/src/main/java/net/opentsdb/query/TSQuery.java
index dadc4489be..262b7fc090 100644
--- a/core/src/main/java/net/opentsdb/query/TSQuery.java
+++ b/core/src/main/java/net/opentsdb/query/TSQuery.java
@@ -19,20 +19,16 @@
import java.util.List;
import java.util.Map;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.google.common.base.Objects;
import net.opentsdb.core.TSDB;
-import net.opentsdb.query.pojo.Downsampler;
-import net.opentsdb.query.pojo.DownsamplingSpecification;
-import net.opentsdb.query.pojo.Filter;
-import net.opentsdb.query.pojo.Metric;
-import net.opentsdb.query.pojo.NumericFillPolicy;
-import net.opentsdb.query.pojo.TagVFilter;
+import net.opentsdb.query.pojo.*;
import net.opentsdb.query.pojo.TimeSeriesQuery;
-import net.opentsdb.query.pojo.Timespan;
import net.opentsdb.utils.DateTime;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import com.google.common.base.Objects;
+
/**
* Parameters and state to query the underlying storage system for
* timeseries data points. When setting up a query, use the setter methods to
diff --git a/core/src/main/java/net/opentsdb/query/TSSubQuery.java b/core/src/main/java/net/opentsdb/query/TSSubQuery.java
index 86ac71fc19..c2181c6912 100644
--- a/core/src/main/java/net/opentsdb/query/TSSubQuery.java
+++ b/core/src/main/java/net/opentsdb/query/TSSubQuery.java
@@ -14,11 +14,7 @@
// limitations under the License.
package net.opentsdb.query;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.types.numeric.aggregators.NumericAggregator;
@@ -29,6 +25,7 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
diff --git a/core/src/main/java/net/opentsdb/query/WrappedTimeSeriesDataSourceConfig.java b/core/src/main/java/net/opentsdb/query/WrappedTimeSeriesDataSourceConfig.java
index e81c02e2ca..9d42985d6b 100644
--- a/core/src/main/java/net/opentsdb/query/WrappedTimeSeriesDataSourceConfig.java
+++ b/core/src/main/java/net/opentsdb/query/WrappedTimeSeriesDataSourceConfig.java
@@ -19,12 +19,7 @@
import java.util.List;
import java.util.Map;
-import com.google.common.base.Objects;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.hash.HashCode;
-import com.google.common.hash.Hashing;
import net.opentsdb.configuration.Configuration;
import net.opentsdb.core.Const;
import net.opentsdb.data.TimeStamp;
@@ -33,6 +28,12 @@
import net.opentsdb.utils.Comparators;
import net.opentsdb.utils.Pair;
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.hash.HashCode;
+import com.google.common.hash.Hashing;
+
/**
* A simple wrapper around a config that allows for changing the ID.
*
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyPredictionResult.java b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyPredictionResult.java
index 5d8e702e08..49cd03895c 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyPredictionResult.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyPredictionResult.java
@@ -19,7 +19,6 @@
import java.time.temporal.TemporalAmount;
import java.util.List;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.data.TimeSeriesId;
@@ -31,6 +30,8 @@
import net.opentsdb.rollup.RollupConfig;
import net.opentsdb.utils.DateTime;
+import com.google.common.reflect.TypeToken;
+
/**
* Class that stores the predictions as a Result from a model.
*
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyPredictionTimeSeries.java b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyPredictionTimeSeries.java
index 7f167891ae..45b5e324fe 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyPredictionTimeSeries.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyPredictionTimeSeries.java
@@ -20,25 +20,19 @@
import java.util.Map;
import java.util.Optional;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.BaseTimeSeriesStringId;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
+import net.opentsdb.data.*;
import net.opentsdb.data.types.alert.AlertType;
import net.opentsdb.data.types.alert.AlertValue;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.data.types.numeric.aggregators.ArrayAggregatorUtils;
import net.opentsdb.data.types.numeric.aggregators.NumericArrayAggregator;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.common.reflect.TypeToken;
+
/**
* A time series used to store the predictions generated off a baseline via a
* time series model. It can be copied from a cached result too.
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyQueryResult.java b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyQueryResult.java
index 26ad738b03..cdd58fec00 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyQueryResult.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyQueryResult.java
@@ -19,19 +19,8 @@
import java.util.List;
import java.util.Optional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeSpecification;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.query.QueryNode;
@@ -39,6 +28,12 @@
import net.opentsdb.query.QueryResultId;
import net.opentsdb.rollup.RollupConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+
/**
* A result from EGADs. The class is meant to take the "current" results and
* a cached prediction (for a wider timespan). It will then align the prediction
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyThresholdEvaluator.java b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyThresholdEvaluator.java
index 82136ceee6..c7115b86ae 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyThresholdEvaluator.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyThresholdEvaluator.java
@@ -20,25 +20,21 @@
import java.util.List;
import java.util.Optional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-import net.opentsdb.data.types.alert.AlertValue;
import net.opentsdb.data.types.alert.AlertType.State;
+import net.opentsdb.data.types.alert.AlertValue;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.data.types.numeric.NumericSummaryType;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.query.QueryResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+
/**
* A class that takes a time series to evaluate and the matching prediction
* time series. It then iterates over the time series to generate alerts based
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyThresholdTimeSeries.java b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyThresholdTimeSeries.java
index 3be9580f87..b8d88857bb 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyThresholdTimeSeries.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyThresholdTimeSeries.java
@@ -19,22 +19,14 @@
import java.util.Map;
import java.util.Optional;
+import net.opentsdb.data.*;
+import net.opentsdb.data.types.numeric.NumericArrayType;
+
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.BaseTimeSeriesStringId;
-import net.opentsdb.data.SecondTimeStamp;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-import net.opentsdb.data.types.numeric.NumericArrayType;
-
/**
* An anomaly threshold computation time series (i.e. given the thresholds in a
* config, computes them using the prediction.
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyTimeSeries.java b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyTimeSeries.java
index 0c03188652..2d0ab81e40 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/AnomalyTimeSeries.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/AnomalyTimeSeries.java
@@ -18,16 +18,11 @@
import java.util.Map;
import java.util.Optional;
+import net.opentsdb.data.*;
+
import com.google.common.collect.Maps;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.BaseTimeSeriesStringId;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-
/**
* A time series class that simply tweaks the ID, adding a suffix string to
* the metric name and a tag for the given model to the tag set.
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyConfig.java b/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyConfig.java
index e6b45fa82c..36ce1b482b 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyConfig.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyConfig.java
@@ -17,28 +17,30 @@
import java.util.List;
import java.util.Objects;
+
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.query.BaseQueryNodeConfigWithInterpolators;
+import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
+import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
+
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.query.BaseQueryNodeConfigWithInterpolators;
-import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
-import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
-
/**
* Base class for an anomaly config object.
*
* @since 3.0
*/
-public abstract class BaseAnomalyConfig
- extends BaseQueryNodeConfigWithInterpolators
+public abstract class BaseAnomalyConfig
+ extends BaseQueryNodeConfigWithInterpolators
implements AnomalyConfig {
protected String training_interval;
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyFactory.java b/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyFactory.java
index d26fffc2ed..83ba69ce0d 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyFactory.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyFactory.java
@@ -24,14 +24,6 @@
import java.util.Map;
import java.util.function.Predicate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Strings;
-import com.google.common.collect.Maps;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.common.Const;
import net.opentsdb.core.BaseTSDBPlugin;
@@ -39,16 +31,10 @@
import net.opentsdb.data.TimeSeries;
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.TimeStamp.Op;
+import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.exceptions.QueryExecutionException;
-import net.opentsdb.query.AbstractQueryNode;
-import net.opentsdb.query.QueryIteratorFactory;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResult;
-import net.opentsdb.query.TimeSeriesQuery;
+import net.opentsdb.query.*;
import net.opentsdb.query.anomaly.AnomalyConfig.ExecutionMode;
import net.opentsdb.query.anomaly.AnomalyPredictionState.State;
import net.opentsdb.query.plan.QueryPlanner;
@@ -60,6 +46,15 @@
import net.opentsdb.utils.DateTime;
import net.opentsdb.utils.JSON;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Deferred;
+
/**
* A base factory for anomaly nodes that has launches a thread pool for running
* jobs without affecting other threads.
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyNode.java b/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyNode.java
index fedba90662..2629680271 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyNode.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/BaseAnomalyNode.java
@@ -24,40 +24,17 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import net.opentsdb.data.PartialTimeSeries;
+import net.opentsdb.data.TimeSeries;
import net.opentsdb.data.TimeSeriesDataSource;
+import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.TimeStamp.Op;
import net.opentsdb.data.types.numeric.aggregators.DefaultArrayAggregatorConfig;
import net.opentsdb.data.types.numeric.aggregators.NumericArrayAggregator;
import net.opentsdb.data.types.numeric.aggregators.NumericArrayAggregatorConfig;
import net.opentsdb.data.types.numeric.aggregators.NumericArrayAggregatorFactory;
-import net.opentsdb.query.TimeSeriesDataSourceConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.stumbleupon.async.Callback;
-import com.stumbleupon.async.Deferred;
-
-import gnu.trove.iterator.TLongObjectIterator;
-import gnu.trove.map.TLongObjectMap;
-import gnu.trove.map.hash.TLongObjectHashMap;
-import net.opentsdb.data.PartialTimeSeries;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TimeStamp.Op;
import net.opentsdb.exceptions.QueryExecutionException;
-import net.opentsdb.query.AbstractQueryNode;
-import net.opentsdb.query.QueryContext;
-import net.opentsdb.query.QueryMode;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResult;
-import net.opentsdb.query.QueryResultId;
-import net.opentsdb.query.QuerySink;
-import net.opentsdb.query.QuerySinkCallback;
-import net.opentsdb.query.SemanticQuery;
-import net.opentsdb.query.SemanticQueryContext;
+import net.opentsdb.query.*;
import net.opentsdb.query.anomaly.AnomalyConfig.ExecutionMode;
import net.opentsdb.query.anomaly.AnomalyPredictionState.State;
import net.opentsdb.query.processor.downsample.DownsampleConfig;
@@ -66,6 +43,17 @@
import net.opentsdb.utils.DateTime;
import net.opentsdb.utils.JSON;
+import gnu.trove.iterator.TLongObjectIterator;
+import gnu.trove.map.TLongObjectMap;
+import gnu.trove.map.hash.TLongObjectHashMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.stumbleupon.async.Callback;
+import com.stumbleupon.async.Deferred;
+
public class BaseAnomalyNode extends AbstractQueryNode {
private static final Logger LOG = LoggerFactory.getLogger(BaseAnomalyNode.class);
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/MemoryPredictionCache.java b/core/src/main/java/net/opentsdb/query/anomaly/MemoryPredictionCache.java
index 967befac58..2f52cf4047 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/MemoryPredictionCache.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/MemoryPredictionCache.java
@@ -18,15 +18,6 @@
import java.util.Map.Entry;
import java.util.concurrent.TimeUnit;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Strings;
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.collect.Lists;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.Const;
@@ -39,9 +30,19 @@
import net.opentsdb.query.readcache.ReadCacheSerdesFactory;
import net.opentsdb.stats.Span;
import net.opentsdb.utils.Bytes;
+import net.opentsdb.utils.Bytes.ByteArrayKey;
import net.opentsdb.utils.DateTime;
import net.opentsdb.utils.JSON;
-import net.opentsdb.utils.Bytes.ByteArrayKey;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.collect.Lists;
+import com.stumbleupon.async.Deferred;
/**
* Super simple in-memory prediction cache used for testing purposes.
diff --git a/core/src/main/java/net/opentsdb/query/anomaly/PredictionCache.java b/core/src/main/java/net/opentsdb/query/anomaly/PredictionCache.java
index 3d32be5127..725d819313 100644
--- a/core/src/main/java/net/opentsdb/query/anomaly/PredictionCache.java
+++ b/core/src/main/java/net/opentsdb/query/anomaly/PredictionCache.java
@@ -14,13 +14,13 @@
// limitations under the License.
package net.opentsdb.query.anomaly;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.TSDBPlugin;
import net.opentsdb.query.QueryPipelineContext;
import net.opentsdb.query.QueryResult;
import net.opentsdb.stats.Span;
+import com.stumbleupon.async.Deferred;
+
/**
* A cache for dealing with anomaly prediction results and state.
*
diff --git a/core/src/main/java/net/opentsdb/query/execution/DefaultQueryExecutorFactory.java b/core/src/main/java/net/opentsdb/query/execution/DefaultQueryExecutorFactory.java
index 48bd66186f..16550e1764 100644
--- a/core/src/main/java/net/opentsdb/query/execution/DefaultQueryExecutorFactory.java
+++ b/core/src/main/java/net/opentsdb/query/execution/DefaultQueryExecutorFactory.java
@@ -16,13 +16,13 @@
import java.lang.reflect.Constructor;
+import net.opentsdb.core.DefaultRegistry;
+import net.opentsdb.core.TSDB;
+
import com.google.common.base.Strings;
import com.google.common.reflect.TypeToken;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.DefaultRegistry;
-import net.opentsdb.core.TSDB;
-
/**
* Simple {@link QueryExecutorFactory} that takes the ctor and config.
*
diff --git a/core/src/main/java/net/opentsdb/query/execution/MetricShardingExecutor.java b/core/src/main/java/net/opentsdb/query/execution/MetricShardingExecutor.java
index 61f2f2584a..26c0563d3b 100644
--- a/core/src/main/java/net/opentsdb/query/execution/MetricShardingExecutor.java
+++ b/core/src/main/java/net/opentsdb/query/execution/MetricShardingExecutor.java
@@ -14,22 +14,24 @@
// limitations under the License.
package net.opentsdb.query.execution;
+import net.opentsdb.core.Const;
+import net.opentsdb.query.BaseQueryNodeConfig;
+import net.opentsdb.query.pojo.TimeSeriesQuery;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import io.opentracing.Span;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Ordering;
import com.google.common.hash.HashCode;
-import io.opentracing.Span;
-import net.opentsdb.core.Const;
-import net.opentsdb.query.BaseQueryNodeConfig;
-import net.opentsdb.query.pojo.TimeSeriesQuery;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* An executor that takes {@link TimeSeriesQuery}s that have 1 or more child
diff --git a/core/src/main/java/net/opentsdb/query/execution/QueryExecution.java b/core/src/main/java/net/opentsdb/query/execution/QueryExecution.java
index bf5bc804a5..954cc74d78 100644
--- a/core/src/main/java/net/opentsdb/query/execution/QueryExecution.java
+++ b/core/src/main/java/net/opentsdb/query/execution/QueryExecution.java
@@ -18,14 +18,15 @@
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicBoolean;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
+import net.opentsdb.query.execution.QueryExecutor;
+import net.opentsdb.query.pojo.TimeSeriesQuery;
import io.opentracing.Span;
import io.opentracing.Tracer;
import io.opentracing.Tracer.SpanBuilder;
-import net.opentsdb.query.execution.QueryExecutor;
-import net.opentsdb.query.pojo.TimeSeriesQuery;
+
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
/**
* A state container for asynchronous queries. All {@link QueryExecutor}s should
diff --git a/core/src/main/java/net/opentsdb/query/execution/QueryExecutor.java b/core/src/main/java/net/opentsdb/query/execution/QueryExecutor.java
index a677a1c48e..14d5f6f327 100644
--- a/core/src/main/java/net/opentsdb/query/execution/QueryExecutor.java
+++ b/core/src/main/java/net/opentsdb/query/execution/QueryExecutor.java
@@ -14,25 +14,25 @@
// limitations under the License.
package net.opentsdb.query.execution;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.atomic.AtomicBoolean;
+
+import net.opentsdb.exceptions.RemoteQueryExecutionException;
+import net.opentsdb.query.pojo.TimeSeriesQuery;
+import net.opentsdb.utils.Deferreds;
+
+import io.opentracing.Span;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.RejectedExecutionException;
-
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.stumbleupon.async.Deferred;
-import io.opentracing.Span;
-import net.opentsdb.exceptions.RemoteQueryExecutionException;
-import net.opentsdb.query.pojo.TimeSeriesQuery;
-import net.opentsdb.utils.Deferreds;
-
/**
* A base query executor that may spawn a tree of sub executors for processing.
* The executor can return data of any type.
diff --git a/core/src/main/java/net/opentsdb/query/execution/QueryExecutorConfig.java b/core/src/main/java/net/opentsdb/query/execution/QueryExecutorConfig.java
index 1dc0fa8975..d1f881aa8d 100644
--- a/core/src/main/java/net/opentsdb/query/execution/QueryExecutorConfig.java
+++ b/core/src/main/java/net/opentsdb/query/execution/QueryExecutorConfig.java
@@ -14,16 +14,17 @@
// limitations under the License.
package net.opentsdb.query.execution;
+import net.opentsdb.query.QueryNodeConfig;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver;
+
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
-import net.opentsdb.query.QueryNodeConfig;
-
/**
* The base class used for configuring an executor. This class must be
* serializable via Jackson for use in query overrides. Extend the Builder
@@ -43,9 +44,9 @@
*/
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = Id.NAME,
- include = JsonTypeInfo.As.PROPERTY,
- property = "executorType",
- visible = true)
+ include = JsonTypeInfo.As.PROPERTY,
+ property = "executorType",
+ visible = true)
public abstract class QueryExecutorConfig, C extends QueryExecutorConfig> implements QueryNodeConfig {
/** The class type of executor. */
protected final String executor_type;
diff --git a/core/src/main/java/net/opentsdb/query/execution/QueryExecutorFactory.java b/core/src/main/java/net/opentsdb/query/execution/QueryExecutorFactory.java
index 4a0ef7855e..bc14d47c4b 100644
--- a/core/src/main/java/net/opentsdb/query/execution/QueryExecutorFactory.java
+++ b/core/src/main/java/net/opentsdb/query/execution/QueryExecutorFactory.java
@@ -14,10 +14,10 @@
// limitations under the License.
package net.opentsdb.query.execution;
-import com.google.common.reflect.TypeToken;
-
import net.opentsdb.core.BaseTSDBPlugin;
+import com.google.common.reflect.TypeToken;
+
/**
* A factory used to generate a {@link QueryExecutor} for a new context. These
* factories can be instantiated once per JVM and the
diff --git a/core/src/main/java/net/opentsdb/query/execution/TimedQueryExecutor.java b/core/src/main/java/net/opentsdb/query/execution/TimedQueryExecutor.java
index d1bc5397cb..f6c330e7e3 100644
--- a/core/src/main/java/net/opentsdb/query/execution/TimedQueryExecutor.java
+++ b/core/src/main/java/net/opentsdb/query/execution/TimedQueryExecutor.java
@@ -14,22 +14,24 @@
// limitations under the License.
package net.opentsdb.query.execution;
+import net.opentsdb.core.Const;
+import net.opentsdb.exceptions.QueryExecutionException;
+import net.opentsdb.query.BaseQueryNodeConfig;
+import net.opentsdb.query.pojo.TimeSeriesQuery;
+
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import io.opentracing.Span;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Ordering;
import com.google.common.hash.HashCode;
-import io.opentracing.Span;
-import net.opentsdb.core.Const;
-import net.opentsdb.exceptions.QueryExecutionException;
-import net.opentsdb.query.BaseQueryNodeConfig;
-import net.opentsdb.query.pojo.TimeSeriesQuery;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* A {@link QueryExecutor} wrapper that uses a timer to kill a query that
diff --git a/core/src/main/java/net/opentsdb/query/execution/serdes/BaseSerdesOptions.java b/core/src/main/java/net/opentsdb/query/execution/serdes/BaseSerdesOptions.java
index e2f0d1ce2a..dc9ea19382 100644
--- a/core/src/main/java/net/opentsdb/query/execution/serdes/BaseSerdesOptions.java
+++ b/core/src/main/java/net/opentsdb/query/execution/serdes/BaseSerdesOptions.java
@@ -17,12 +17,13 @@
import java.util.Collections;
import java.util.List;
+import net.opentsdb.query.serdes.SerdesOptions;
+
import com.fasterxml.jackson.annotation.JsonProperty;
+
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
-import net.opentsdb.query.serdes.SerdesOptions;
-
/**
* A base serdes option class.
*
diff --git a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2ExpQuerySerdes.java b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2ExpQuerySerdes.java
index daceed85d4..21ba214d08 100644
--- a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2ExpQuerySerdes.java
+++ b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2ExpQuerySerdes.java
@@ -19,41 +19,23 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Map.Entry;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.Map.Entry;
-
-
-import net.opentsdb.data.TimeSeriesDataType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Callback;
-import com.stumbleupon.async.Deferred;
-import com.stumbleupon.async.DeferredGroupException;
import net.opentsdb.common.Const;
import net.opentsdb.core.TSDB;
-import net.opentsdb.data.MillisecondTimeStamp;
-import net.opentsdb.data.PartialTimeSeries;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesByteId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.data.types.numeric.NumericSummaryType;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.exceptions.QueryExecutionException;
import net.opentsdb.query.QueryContext;
+import net.opentsdb.query.QueryFillPolicy.FillWithRealPolicy;
import net.opentsdb.query.QueryNode;
import net.opentsdb.query.QueryResult;
-import net.opentsdb.query.QueryFillPolicy.FillWithRealPolicy;
import net.opentsdb.query.interpolation.QueryInterpolator;
import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
import net.opentsdb.query.interpolation.types.numeric.NumericInterpolatorConfig;
@@ -65,6 +47,16 @@
import net.opentsdb.utils.Exceptions;
import net.opentsdb.utils.JSON;
+import com.fasterxml.jackson.core.JsonGenerator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Callback;
+import com.stumbleupon.async.Deferred;
+import com.stumbleupon.async.DeferredGroupException;
+
/**
* A serializer mimicking the output of OpenTSDB 2.x's /api/query/exp
* endpoint.
diff --git a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2ExpQuerySerdesFactory.java b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2ExpQuerySerdesFactory.java
index a99798538e..2e77d49800 100644
--- a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2ExpQuerySerdesFactory.java
+++ b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2ExpQuerySerdesFactory.java
@@ -17,11 +17,6 @@
import java.io.InputStream;
import java.io.OutputStream;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
@@ -30,13 +25,20 @@
import net.opentsdb.query.serdes.SerdesOptions;
import net.opentsdb.query.serdes.TimeSeriesSerdes;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* A factory for returning JSON serializers for the OpenTSDB 2x
* expression format.
*
* @since 3.0
*/
-public class JsonV2ExpQuerySerdesFactory extends BaseTSDBPlugin
+public class JsonV2ExpQuerySerdesFactory extends BaseTSDBPlugin
implements SerdesFactory {
public static final String TYPE = "JsonV2ExpQuerySerdes";
diff --git a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdes.java b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdes.java
index b106d45ee6..1d88d74e3d 100644
--- a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdes.java
+++ b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdes.java
@@ -22,25 +22,10 @@
import java.util.List;
import java.util.Map.Entry;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.google.common.collect.Lists;
-import com.stumbleupon.async.Callback;
-import com.stumbleupon.async.Deferred;
-import com.stumbleupon.async.DeferredGroupException;
import net.opentsdb.common.Const;
-import net.opentsdb.data.PartialTimeSeries;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesByteId;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.data.types.numeric.NumericSummaryType;
import net.opentsdb.data.types.numeric.NumericType;
@@ -59,6 +44,15 @@
import net.opentsdb.utils.JSON;
import net.opentsdb.utils.Pair;
+import com.fasterxml.jackson.core.JsonGenerator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+import com.stumbleupon.async.Callback;
+import com.stumbleupon.async.Deferred;
+import com.stumbleupon.async.DeferredGroupException;
+
/**
* Simple serializer that outputs the time series in the same format as
* OpenTSDB 2.x's /api/query endpoint.
diff --git a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdesFactory.java b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdesFactory.java
index 383b3d762d..a84af922be 100644
--- a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdesFactory.java
+++ b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdesFactory.java
@@ -17,11 +17,6 @@
import java.io.InputStream;
import java.io.OutputStream;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
@@ -30,12 +25,19 @@
import net.opentsdb.query.serdes.SerdesOptions;
import net.opentsdb.query.serdes.TimeSeriesSerdes;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* A factory for returning JSON serializers for the OpenTSDB 2x format.
*
* @since 3.0
*/
-public class JsonV2QuerySerdesFactory extends BaseTSDBPlugin
+public class JsonV2QuerySerdesFactory extends BaseTSDBPlugin
implements SerdesFactory {
public static final String TYPE = "JsonV2QuerySerdes";
diff --git a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdesOptions.java b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdesOptions.java
index 2bffab7950..642c4f6c45 100644
--- a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdesOptions.java
+++ b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV2QuerySerdesOptions.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.query.execution.serdes;
+import net.opentsdb.query.TSQuery;
+import net.opentsdb.query.serdes.SerdesOptions;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import net.opentsdb.query.TSQuery;
-import net.opentsdb.query.serdes.SerdesOptions;
-
/**
* Serdes options for the Json version 2 serializer.
*
diff --git a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdes.java b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdes.java
index aa9362f18a..2cc21e1ef1 100644
--- a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdes.java
+++ b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdes.java
@@ -14,26 +14,23 @@
// limitations under the License.
package net.opentsdb.query.execution.serdes;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Callback;
-import com.stumbleupon.async.Deferred;
-import com.stumbleupon.async.DeferredGroupException;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+
import net.opentsdb.common.Const;
-import net.opentsdb.data.BaseTimeSeriesStringId;
-import net.opentsdb.data.PartialTimeSeries;
-import net.opentsdb.data.PartialTimeSeriesSet;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesByteId;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.alert.AlertType;
import net.opentsdb.data.types.event.EventGroupType;
import net.opentsdb.data.types.event.EventType;
@@ -43,11 +40,7 @@
import net.opentsdb.data.types.numeric.NumericLongArrayType;
import net.opentsdb.data.types.numeric.NumericSummaryType;
import net.opentsdb.data.types.numeric.NumericType;
-import net.opentsdb.data.types.status.StatusGroupType;
-import net.opentsdb.data.types.status.StatusGroupValue;
-import net.opentsdb.data.types.status.StatusType;
-import net.opentsdb.data.types.status.StatusValue;
-import net.opentsdb.data.types.status.Summary;
+import net.opentsdb.data.types.status.*;
import net.opentsdb.exceptions.QueryExecutionException;
import net.opentsdb.pools.PooledObject;
import net.opentsdb.pools.StringBuilderPool;
@@ -66,27 +59,17 @@
import net.opentsdb.utils.Exceptions;
import net.opentsdb.utils.JSON;
import net.opentsdb.utils.Pair;
+
+import com.fasterxml.jackson.core.JsonGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.concurrent.ForkJoinPool;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Callback;
+import com.stumbleupon.async.Deferred;
+import com.stumbleupon.async.DeferredGroupException;
public class JsonV3QuerySerdes implements TimeSeriesSerdes {
private static final Logger LOG = LoggerFactory.getLogger(
diff --git a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdesFactory.java b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdesFactory.java
index cfcde5c174..a04ddb3fbb 100644
--- a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdesFactory.java
+++ b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdesFactory.java
@@ -17,11 +17,6 @@
import java.io.InputStream;
import java.io.OutputStream;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
@@ -30,6 +25,13 @@
import net.opentsdb.query.serdes.SerdesOptions;
import net.opentsdb.query.serdes.TimeSeriesSerdes;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* A factory for returning JSON serializers for the OpenTSDB 3x format.
*
diff --git a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdesOptions.java b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdesOptions.java
index 39bd9ba4f8..dcf888e8af 100644
--- a/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdesOptions.java
+++ b/core/src/main/java/net/opentsdb/query/execution/serdes/JsonV3QuerySerdesOptions.java
@@ -14,14 +14,14 @@
// limitations under the License.
package net.opentsdb.query.execution.serdes;
+import net.opentsdb.query.serdes.SerdesOptions;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import net.opentsdb.query.serdes.SerdesOptions;
-
/**
* Serdes options for the Json version 3 serializer.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/AnyFieldRegexFactory.java b/core/src/main/java/net/opentsdb/query/filter/AnyFieldRegexFactory.java
index f713e1e045..8314ce56ac 100644
--- a/core/src/main/java/net/opentsdb/query/filter/AnyFieldRegexFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/AnyFieldRegexFactory.java
@@ -14,22 +14,23 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* Factory to construct the AnyFieldRegexp filter.
*
* @since 3.0
*/
public class AnyFieldRegexFactory extends BaseTSDBPlugin
- implements QueryFilterFactory {
+ implements QueryFilterFactory {
public static final String TYPE = "AnyFieldRegex";
diff --git a/core/src/main/java/net/opentsdb/query/filter/AnyFieldRegexFilter.java b/core/src/main/java/net/opentsdb/query/filter/AnyFieldRegexFilter.java
index b0a64af0c9..67385a613a 100644
--- a/core/src/main/java/net/opentsdb/query/filter/AnyFieldRegexFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/AnyFieldRegexFilter.java
@@ -17,19 +17,20 @@
import java.util.Map;
import java.util.regex.Pattern;
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-
/**
* Regular expression filter to search for in any field for meta.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/BaseFieldFilter.java b/core/src/main/java/net/opentsdb/query/filter/BaseFieldFilter.java
index 68138e1a03..523794be64 100644
--- a/core/src/main/java/net/opentsdb/query/filter/BaseFieldFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/BaseFieldFilter.java
@@ -14,10 +14,11 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.Const;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
-import net.opentsdb.core.Const;
/** A base class for tag value filters including the raw filter and the tag key to check on. */
public abstract class BaseFieldFilter implements QueryFilter {
diff --git a/core/src/main/java/net/opentsdb/query/filter/BaseTagValueFilter.java b/core/src/main/java/net/opentsdb/query/filter/BaseTagValueFilter.java
index 215556366d..3c6df87f83 100644
--- a/core/src/main/java/net/opentsdb/query/filter/BaseTagValueFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/BaseTagValueFilter.java
@@ -14,10 +14,11 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.Const;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
-import net.opentsdb.core.Const;
/**
* A base class for tag value filters including the raw filter and the
diff --git a/core/src/main/java/net/opentsdb/query/filter/DefaultNamedFilter.java b/core/src/main/java/net/opentsdb/query/filter/DefaultNamedFilter.java
index eac2229f14..a48acb3ead 100644
--- a/core/src/main/java/net/opentsdb/query/filter/DefaultNamedFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/DefaultNamedFilter.java
@@ -14,14 +14,16 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import java.util.List;
+
+
+import net.opentsdb.core.Const;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-
-import java.util.List;
/**
* A default implementation of the NamedFilter.
diff --git a/core/src/main/java/net/opentsdb/query/filter/ExplicitTagsFilter.java b/core/src/main/java/net/opentsdb/query/filter/ExplicitTagsFilter.java
index f343b5126e..6b83195944 100644
--- a/core/src/main/java/net/opentsdb/query/filter/ExplicitTagsFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/ExplicitTagsFilter.java
@@ -19,6 +19,9 @@
import java.util.Map;
import java.util.Set;
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
@@ -28,9 +31,6 @@
import com.google.common.hash.Hashing;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-
/**
* Attempts to walk all of the child filters and extract the tag keys
* to make sure the time series matched overall include all of the tags
diff --git a/core/src/main/java/net/opentsdb/query/filter/ExplicitTagsFilterFactory.java b/core/src/main/java/net/opentsdb/query/filter/ExplicitTagsFilterFactory.java
index 163b56869c..dc8fd4b65c 100644
--- a/core/src/main/java/net/opentsdb/query/filter/ExplicitTagsFilterFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/ExplicitTagsFilterFactory.java
@@ -14,20 +14,21 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* A factory to generate an ExplicitTags filter node.
*
* @since 3.0
*/
-public class ExplicitTagsFilterFactory extends BaseTSDBPlugin
+public class ExplicitTagsFilterFactory extends BaseTSDBPlugin
implements QueryFilterFactory {
static final String TYPE = "ExplicitTags";
diff --git a/core/src/main/java/net/opentsdb/query/filter/FieldLiteralOrFactory.java b/core/src/main/java/net/opentsdb/query/filter/FieldLiteralOrFactory.java
index e4e29374a3..28841d2dbb 100644
--- a/core/src/main/java/net/opentsdb/query/filter/FieldLiteralOrFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/FieldLiteralOrFactory.java
@@ -14,13 +14,15 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
/**
* Factory to construct the TagValueLiteralOr filter.
diff --git a/core/src/main/java/net/opentsdb/query/filter/FieldLiteralOrFilter.java b/core/src/main/java/net/opentsdb/query/filter/FieldLiteralOrFilter.java
index 0686669345..2d68d763eb 100644
--- a/core/src/main/java/net/opentsdb/query/filter/FieldLiteralOrFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/FieldLiteralOrFilter.java
@@ -14,11 +14,22 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+import net.opentsdb.utils.Comparators;
+import net.opentsdb.utils.StringUtils;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@@ -26,14 +37,6 @@
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-import net.opentsdb.utils.Comparators;
-import net.opentsdb.utils.StringUtils;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
/**
* Filters on a set of one or more case sensitive tag value strings.
diff --git a/core/src/main/java/net/opentsdb/query/filter/FieldRegexFactory.java b/core/src/main/java/net/opentsdb/query/filter/FieldRegexFactory.java
index d7d0ddb067..7932d1fc0b 100644
--- a/core/src/main/java/net/opentsdb/query/filter/FieldRegexFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/FieldRegexFactory.java
@@ -1,12 +1,14 @@
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
public class FieldRegexFactory extends BaseTSDBPlugin implements QueryFilterFactory {
diff --git a/core/src/main/java/net/opentsdb/query/filter/FieldRegexFilter.java b/core/src/main/java/net/opentsdb/query/filter/FieldRegexFilter.java
index 8d39cfa91a..cd548f1abd 100644
--- a/core/src/main/java/net/opentsdb/query/filter/FieldRegexFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/FieldRegexFilter.java
@@ -14,19 +14,22 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import java.util.regex.Pattern;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-
-import java.util.regex.Pattern;
/**
* Filters on a set of one or more case sensitive tag value strings.
diff --git a/core/src/main/java/net/opentsdb/query/filter/FilterUtils.java b/core/src/main/java/net/opentsdb/query/filter/FilterUtils.java
index b9cf2d3a16..771045bab0 100644
--- a/core/src/main/java/net/opentsdb/query/filter/FilterUtils.java
+++ b/core/src/main/java/net/opentsdb/query/filter/FilterUtils.java
@@ -14,16 +14,15 @@
// limitations under the License.
package net.opentsdb.query.filter;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-import net.opentsdb.data.TimeSeriesDatumStringId;
-
import java.util.Map;
import java.util.Map.Entry;
-
import java.util.Set;
+import net.opentsdb.data.TimeSeriesDatumStringId;
+
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
/**
* Utilities for working with filters.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/MetricLiteralFactory.java b/core/src/main/java/net/opentsdb/query/filter/MetricLiteralFactory.java
index b024c801bb..3ad6e1beed 100644
--- a/core/src/main/java/net/opentsdb/query/filter/MetricLiteralFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/MetricLiteralFactory.java
@@ -14,15 +14,16 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* Factory to construct the MetricLiteral filter.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/MetricLiteralFilter.java b/core/src/main/java/net/opentsdb/query/filter/MetricLiteralFilter.java
index 6d1f606afa..bb6b7d7421 100644
--- a/core/src/main/java/net/opentsdb/query/filter/MetricLiteralFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/MetricLiteralFilter.java
@@ -14,19 +14,20 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-
/**
* Filters by matching a case sensitive literal string for the metric.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/MetricRegexFactory.java b/core/src/main/java/net/opentsdb/query/filter/MetricRegexFactory.java
index 484f19488c..675d86725c 100644
--- a/core/src/main/java/net/opentsdb/query/filter/MetricRegexFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/MetricRegexFactory.java
@@ -14,22 +14,23 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* Factory to construct the MetricRegex filter.
*
* @since 3.0
*/
public class MetricRegexFactory extends BaseTSDBPlugin
- implements QueryFilterFactory {
+ implements QueryFilterFactory {
static final String TYPE = "MetricRegex";
diff --git a/core/src/main/java/net/opentsdb/query/filter/MetricRegexFilter.java b/core/src/main/java/net/opentsdb/query/filter/MetricRegexFilter.java
index 18b9cf445f..2a2094152f 100644
--- a/core/src/main/java/net/opentsdb/query/filter/MetricRegexFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/MetricRegexFilter.java
@@ -14,21 +14,23 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import java.util.regex.Pattern;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-
-import java.util.regex.Pattern;
-
/**
* Filters by matching a regex for metric
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/PassThroughFilterFactory.java b/core/src/main/java/net/opentsdb/query/filter/PassThroughFilterFactory.java
index abd2786c0a..4c24de20e9 100644
--- a/core/src/main/java/net/opentsdb/query/filter/PassThroughFilterFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/PassThroughFilterFactory.java
@@ -14,13 +14,15 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
public class PassThroughFilterFactory extends BaseTSDBPlugin
implements QueryFilterFactory {
diff --git a/core/src/main/java/net/opentsdb/query/filter/PassThroughStringFilter.java b/core/src/main/java/net/opentsdb/query/filter/PassThroughStringFilter.java
index 95665b19fc..fd31f90dbf 100644
--- a/core/src/main/java/net/opentsdb/query/filter/PassThroughStringFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/PassThroughStringFilter.java
@@ -14,17 +14,19 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
@JsonInclude(Include.NON_NULL)
@JsonDeserialize(builder = PassThroughStringFilter.Builder.class)
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagKeyLiteralOrFactory.java b/core/src/main/java/net/opentsdb/query/filter/TagKeyLiteralOrFactory.java
index f383b1f67a..8ec0dadc45 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagKeyLiteralOrFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagKeyLiteralOrFactory.java
@@ -14,15 +14,16 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* Factory to construct the TagKeyLiteralOr filter.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagKeyLiteralOrFilter.java b/core/src/main/java/net/opentsdb/query/filter/TagKeyLiteralOrFilter.java
index ab7f3a751e..f142ce20e6 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagKeyLiteralOrFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagKeyLiteralOrFilter.java
@@ -14,11 +14,23 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+import net.opentsdb.utils.Comparators;
+import net.opentsdb.utils.StringUtils;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
@@ -28,16 +40,6 @@
import com.google.common.hash.Hashing;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-import net.opentsdb.utils.Comparators;
-import net.opentsdb.utils.StringUtils;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
/**
* Filters on a case sensitive tag key.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagKeyRegexFactory.java b/core/src/main/java/net/opentsdb/query/filter/TagKeyRegexFactory.java
index 753bc1f0c8..848f7e13cd 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagKeyRegexFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagKeyRegexFactory.java
@@ -14,15 +14,16 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* Factory to construct the TagKeyRegex filter.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagKeyRegexFilter.java b/core/src/main/java/net/opentsdb/query/filter/TagKeyRegexFilter.java
index 01c9e33d9e..a2656e950d 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagKeyRegexFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagKeyRegexFilter.java
@@ -17,19 +17,20 @@
import java.util.Map;
import java.util.regex.Pattern;
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-
/**
* Regular expression filter over tag keys.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagValueLiteralOrFactory.java b/core/src/main/java/net/opentsdb/query/filter/TagValueLiteralOrFactory.java
index 18aaba4904..c51c80fdf7 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagValueLiteralOrFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagValueLiteralOrFactory.java
@@ -14,14 +14,15 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* Factory to construct the TagValueLiteralOr filter.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagValueLiteralOrFilter.java b/core/src/main/java/net/opentsdb/query/filter/TagValueLiteralOrFilter.java
index 44d20b89d8..bfbd880f40 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagValueLiteralOrFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagValueLiteralOrFilter.java
@@ -14,11 +14,23 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+import net.opentsdb.utils.Comparators;
+import net.opentsdb.utils.StringUtils;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
@@ -28,16 +40,6 @@
import com.google.common.hash.Hashing;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-import net.opentsdb.utils.Comparators;
-import net.opentsdb.utils.StringUtils;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
/**
* Filters on a set of one or more case sensitive tag value strings.
*
@@ -46,7 +48,7 @@
@JsonInclude(Include.NON_NULL)
@JsonDeserialize(builder = TagValueLiteralOrFilter.Builder.class)
public class TagValueLiteralOrFilter extends BaseTagValueFilter
- implements TagValueFilter {
+ implements TagValueFilter {
/** A list of strings to match on */
protected final List literals;
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagValueRangeFilter.java b/core/src/main/java/net/opentsdb/query/filter/TagValueRangeFilter.java
index b8c077ef0f..7473f1cba9 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagValueRangeFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagValueRangeFilter.java
@@ -14,13 +14,7 @@
// limitations under the License.
package net.opentsdb.query.filter;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
+import java.util.*;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagValueRangeFilterFactory.java b/core/src/main/java/net/opentsdb/query/filter/TagValueRangeFilterFactory.java
index b0d6f3634f..881a87cd78 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagValueRangeFilterFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagValueRangeFilterFactory.java
@@ -14,14 +14,15 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* Parses numeric and piped ranges similar to
* https://github.com/yahoo/range.
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagValueRegexFactory.java b/core/src/main/java/net/opentsdb/query/filter/TagValueRegexFactory.java
index e916c78fd0..185df43cf9 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagValueRegexFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagValueRegexFactory.java
@@ -14,14 +14,15 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* Factory to construct the TagValueLiteralOr filter.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagValueRegexFilter.java b/core/src/main/java/net/opentsdb/query/filter/TagValueRegexFilter.java
index f9f3308358..6e7ca606d8 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagValueRegexFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagValueRegexFilter.java
@@ -18,11 +18,15 @@
import java.util.Map;
import java.util.regex.Pattern;
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
@@ -30,9 +34,6 @@
import com.google.common.hash.Hashing;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-
/**
* Regular expression filter for tag values given a literal tag key.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagValueWildcardFactory.java b/core/src/main/java/net/opentsdb/query/filter/TagValueWildcardFactory.java
index a8eb524452..9c5d4083d4 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagValueWildcardFactory.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagValueWildcardFactory.java
@@ -14,14 +14,15 @@
// limitations under the License.
package net.opentsdb.query.filter;
+import net.opentsdb.core.BaseTSDBPlugin;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Strings;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.BaseTSDBPlugin;
-import net.opentsdb.core.TSDB;
-
/**
* Factory to construct the TagValueLiteralOr filter.
*
diff --git a/core/src/main/java/net/opentsdb/query/filter/TagValueWildcardFilter.java b/core/src/main/java/net/opentsdb/query/filter/TagValueWildcardFilter.java
index ad7b7ff9d4..29dc4cac7f 100644
--- a/core/src/main/java/net/opentsdb/query/filter/TagValueWildcardFilter.java
+++ b/core/src/main/java/net/opentsdb/query/filter/TagValueWildcardFilter.java
@@ -17,20 +17,21 @@
import java.util.List;
import java.util.Map;
+import net.opentsdb.core.Const;
+import net.opentsdb.stats.Span;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.core.Const;
-import net.opentsdb.stats.Span;
-
/**
* A wildcard or glob match on tag values given a literal tag key.
*
diff --git a/core/src/main/java/net/opentsdb/query/hacluster/HACluster.java b/core/src/main/java/net/opentsdb/query/hacluster/HACluster.java
index 13bd874c25..785f9857ab 100644
--- a/core/src/main/java/net/opentsdb/query/hacluster/HACluster.java
+++ b/core/src/main/java/net/opentsdb/query/hacluster/HACluster.java
@@ -14,15 +14,19 @@
// limitations under the License.
package net.opentsdb.query.hacluster;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
+
+import net.opentsdb.data.TimeSeries;
+import net.opentsdb.data.TimeSeriesDataSource;
+import net.opentsdb.query.*;
+import net.opentsdb.query.readcache.CachedQueryNode;
+import net.opentsdb.stats.Span;
+import net.opentsdb.utils.DateTime;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -32,18 +36,6 @@
import io.netty.util.Timeout;
import io.netty.util.TimerTask;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataSource;
-import net.opentsdb.query.AbstractQueryNode;
-import net.opentsdb.query.BaseWrappedQueryResult;
-import net.opentsdb.query.QueryNode;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResult;
-import net.opentsdb.query.QueryResultId;
-import net.opentsdb.query.readcache.CachedQueryNode;
-import net.opentsdb.stats.Span;
-import net.opentsdb.utils.DateTime;
/**
* A node that handles downstream HA sources. When a result comes in it
diff --git a/core/src/main/java/net/opentsdb/query/hacluster/HAClusterConfig.java b/core/src/main/java/net/opentsdb/query/hacluster/HAClusterConfig.java
index ff3c5cf0bf..10c4c6e5fa 100644
--- a/core/src/main/java/net/opentsdb/query/hacluster/HAClusterConfig.java
+++ b/core/src/main/java/net/opentsdb/query/hacluster/HAClusterConfig.java
@@ -17,27 +17,29 @@
import java.util.Collections;
import java.util.List;
+
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.query.BaseTimeSeriesDataSourceConfig;
+import net.opentsdb.utils.Comparators;
+import net.opentsdb.utils.DateTime;
+
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
-
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.query.BaseTimeSeriesDataSourceConfig;
-import net.opentsdb.utils.Comparators;
-import net.opentsdb.utils.DateTime;
/**
* The config for a high-availability cluster query wherein the same data
diff --git a/core/src/main/java/net/opentsdb/query/hacluster/HAClusterFactory.java b/core/src/main/java/net/opentsdb/query/hacluster/HAClusterFactory.java
index 45ff23b3fd..58bdaff2e0 100644
--- a/core/src/main/java/net/opentsdb/query/hacluster/HAClusterFactory.java
+++ b/core/src/main/java/net/opentsdb/query/hacluster/HAClusterFactory.java
@@ -14,13 +14,9 @@
// limitations under the License.
package net.opentsdb.query.hacluster;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Deferred;
+import java.util.List;
+
+
import net.opentsdb.common.Const;
import net.opentsdb.configuration.ConfigurationCallback;
import net.opentsdb.core.TSDB;
@@ -47,10 +43,17 @@
import net.opentsdb.rollup.RollupConfig;
import net.opentsdb.stats.Span;
import net.opentsdb.utils.DateTime;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.List;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Deferred;
/**
* A factory that modifies the execution graph with nodes to execute an
diff --git a/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringConverterForSource.java b/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringConverterForSource.java
index 14ae8905bb..eb0a639cbb 100644
--- a/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringConverterForSource.java
+++ b/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringConverterForSource.java
@@ -18,6 +18,11 @@
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
+import net.opentsdb.common.Const;
+import net.opentsdb.data.*;
+import net.opentsdb.exceptions.QueryExecutionException;
+import net.opentsdb.query.QueryNode;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -27,18 +32,6 @@
import com.stumbleupon.async.Callback;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.common.Const;
-import net.opentsdb.data.PartialTimeSeries;
-import net.opentsdb.data.PartialTimeSeriesSet;
-import net.opentsdb.data.TimeSeriesByteId;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TimeSpecification;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.exceptions.QueryExecutionException;
-import net.opentsdb.query.QueryNode;
-
/**
* An entry for a data source to store the resoltuion state and decoded IDs
*
diff --git a/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverter.java b/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverter.java
index 011694b512..d82c1c4b61 100644
--- a/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverter.java
+++ b/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverter.java
@@ -14,11 +14,12 @@
// limitations under the License.
package net.opentsdb.query.idconverter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
+
+
+import net.opentsdb.common.Const;
+import net.opentsdb.data.*;
+import net.opentsdb.query.*;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -26,24 +27,6 @@
import com.stumbleupon.async.Callback;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.common.Const;
-import net.opentsdb.data.PartialTimeSeries;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesByteId;
-import net.opentsdb.data.TimeSeriesDataSourceFactory;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-import net.opentsdb.query.AbstractQueryNode;
-import net.opentsdb.query.BaseWrappedQueryResult;
-import net.opentsdb.query.QueryNode;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResult;
-import net.opentsdb.query.QueryResultId;
-
/**
* Simply converts byte encoded IDs to their strings using the
* data store associated with each. For string ID results, they're just
diff --git a/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverterConfig.java b/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverterConfig.java
index e6e237cff1..450d2f5bb8 100644
--- a/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverterConfig.java
+++ b/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverterConfig.java
@@ -14,23 +14,25 @@
// limitations under the License.
package net.opentsdb.query.idconverter;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.data.TimeSeriesDataSourceFactory;
+import net.opentsdb.query.BaseQueryNodeConfig;
+
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.hash.HashCode;
-
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.data.TimeSeriesDataSourceFactory;
-import net.opentsdb.query.BaseQueryNodeConfig;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
/**
* Simple config wherein all we need is the ID and some factories.
diff --git a/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverterFactory.java b/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverterFactory.java
index 7f3aa05ba5..dc6af11b8b 100644
--- a/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverterFactory.java
+++ b/core/src/main/java/net/opentsdb/query/idconverter/ByteToStringIdConverterFactory.java
@@ -14,12 +14,6 @@
// limitations under the License.
package net.opentsdb.query.idconverter;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.query.QueryNode;
import net.opentsdb.query.QueryNodeConfig;
@@ -27,6 +21,13 @@
import net.opentsdb.query.plan.QueryPlanner;
import net.opentsdb.query.processor.BaseQueryNodeFactory;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Super simple factory to return ID converters.
*
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/BaseInterpolatorConfig.java b/core/src/main/java/net/opentsdb/query/interpolation/BaseInterpolatorConfig.java
index 312ea7fbcb..f299b94a3c 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/BaseInterpolatorConfig.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/BaseInterpolatorConfig.java
@@ -14,11 +14,13 @@
// limitations under the License.
package net.opentsdb.query.interpolation;
+import net.opentsdb.core.Const;
+
import com.fasterxml.jackson.annotation.JsonProperty;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
-import net.opentsdb.core.Const;
/**
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/BaseQueryIntperolatorFactory.java b/core/src/main/java/net/opentsdb/query/interpolation/BaseQueryIntperolatorFactory.java
index f1b9eca2fc..499bfb4b46 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/BaseQueryIntperolatorFactory.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/BaseQueryIntperolatorFactory.java
@@ -14,24 +14,27 @@
// limitations under the License.
package net.opentsdb.query.interpolation;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Strings;
-import com.google.common.collect.Maps;
-import com.google.common.reflect.TypeToken;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.Map;
+
+
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.utils.Pair;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Iterator;
-import java.util.Map;
+import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
+import com.google.common.reflect.TypeToken;
/**
* The base factory for interpolators. It stores the interpolators by
@@ -41,7 +44,7 @@
*
* @since 3.0
*/
-public abstract class BaseQueryIntperolatorFactory extends BaseTSDBPlugin
+public abstract class BaseQueryIntperolatorFactory extends BaseTSDBPlugin
implements QueryInterpolatorFactory {
private static final Logger LOG = LoggerFactory.getLogger(
BaseQueryIntperolatorFactory.class);
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/DefaultInterpolatorFactory.java b/core/src/main/java/net/opentsdb/query/interpolation/DefaultInterpolatorFactory.java
index c696fdd032..88475fe206 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/DefaultInterpolatorFactory.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/DefaultInterpolatorFactory.java
@@ -14,8 +14,6 @@
// limitations under the License.
package net.opentsdb.query.interpolation;
-import com.stumbleupon.async.Deferred;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.data.types.numeric.NumericSummaryType;
import net.opentsdb.data.types.numeric.NumericType;
@@ -24,6 +22,8 @@
import net.opentsdb.query.interpolation.types.numeric.NumericSummaryInterpolator;
import net.opentsdb.query.interpolation.types.numeric.NumericSummaryInterpolatorParser;
+import com.stumbleupon.async.Deferred;
+
/**
* The default interpolation factory stored as the default plugin with
* built-in data type interpolators configured.
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/LERPFactory.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/LERPFactory.java
index 246477f9da..e4c70c3957 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/LERPFactory.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/LERPFactory.java
@@ -17,16 +17,17 @@
import java.lang.reflect.Constructor;
import java.util.Map;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Strings;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.query.interpolation.BaseQueryIntperolatorFactory;
import net.opentsdb.utils.Pair;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Deferred;
+
/**
* LERP interpolators.
*
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolator.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolator.java
index 2fac931f2c..0a562b58ba 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolator.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolator.java
@@ -18,20 +18,17 @@
import java.util.NoSuchElementException;
import java.util.Optional;
-import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.query.QueryFillPolicy;
import net.opentsdb.query.interpolation.QueryInterpolator;
import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
+import com.google.common.reflect.TypeToken;
+
/**
* An interpolator for numeric data points that fills with the given
* {@link QueryFillPolicy} or the next/last real value when appropriate.
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolatorConfig.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolatorConfig.java
index e7d83f6f98..29fc98de7b 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolatorConfig.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolatorConfig.java
@@ -14,29 +14,30 @@
// limitations under the License.
package net.opentsdb.query.interpolation.types.numeric;
-import net.opentsdb.query.QueryFillPolicy.FillWithRealPolicy;
-
import java.util.Objects;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Ordering;
-import com.google.common.hash.HashCode;
-import com.google.common.hash.Hasher;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.core.Const;
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.data.types.numeric.BaseNumericFillPolicy;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.query.QueryFillPolicy;
+import net.opentsdb.query.QueryFillPolicy.FillWithRealPolicy;
import net.opentsdb.query.interpolation.BaseInterpolatorConfig;
import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
import net.opentsdb.query.pojo.FillPolicy;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Ordering;
+import com.google.common.hash.HashCode;
+import com.google.common.hash.Hasher;
+import com.google.common.reflect.TypeToken;
+
/**
* A simple config for the base {@link NumericInterpolator}. Stores the real
* fill policy.
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolatorParser.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolatorParser.java
index c01bb1074f..0ab8465d6f 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolatorParser.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericInterpolatorParser.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.query.interpolation.types.numeric;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
import net.opentsdb.query.interpolation.QueryInterpolatorConfigParser;
import net.opentsdb.query.pojo.FillPolicy;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
/**
* Parser that will return a scalar or plain interpolator config.
*
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericLERP.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericLERP.java
index 76b7558c84..c816b4db07 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericLERP.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericLERP.java
@@ -14,12 +14,8 @@
// limitations under the License.
package net.opentsdb.query.interpolation.types.numeric;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolator.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolator.java
index fa112cd0f4..e629eae934 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolator.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolator.java
@@ -17,20 +17,12 @@
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
-
import java.util.NoSuchElementException;
import java.util.Optional;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Maps;
-import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.MutableNumericSummaryValue;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.data.types.numeric.NumericSummaryType;
@@ -39,6 +31,10 @@
import net.opentsdb.query.interpolation.QueryInterpolator;
import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Maps;
+import com.google.common.reflect.TypeToken;
+
/**
* An interpolator class for summary values. It can advance through an
* iterator of summaries when
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolatorConfig.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolatorConfig.java
index ea54cce34f..8a2cbcb729 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolatorConfig.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolatorConfig.java
@@ -14,24 +14,9 @@
// limitations under the License.
package net.opentsdb.query.interpolation.types.numeric;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.TreeMap;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Ordering;
-import com.google.common.hash.HashCode;
-import com.google.common.hash.Hasher;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.core.Const;
import net.opentsdb.data.TimeSeriesDataType;
@@ -41,12 +26,25 @@
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.data.types.numeric.aggregators.NumericAggregator;
import net.opentsdb.query.QueryFillPolicy;
+import net.opentsdb.query.QueryFillPolicy.FillWithRealPolicy;
import net.opentsdb.query.interpolation.BaseInterpolatorConfig;
import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
-import net.opentsdb.query.QueryFillPolicy.FillWithRealPolicy;
import net.opentsdb.query.pojo.FillPolicy;
import net.opentsdb.utils.Comparators.MapComparator;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Ordering;
+import com.google.common.hash.HashCode;
+import com.google.common.hash.Hasher;
+import com.google.common.reflect.TypeToken;
+
/**
* A configuration for interpolating numeric summaries (e.g. rollups and
* pre-aggregates).
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolatorParser.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolatorParser.java
index 6fffa8577a..abb4d34115 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolatorParser.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/NumericSummaryInterpolatorParser.java
@@ -14,14 +14,14 @@
// limitations under the License.
package net.opentsdb.query.interpolation.types.numeric;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
import net.opentsdb.core.TSDB;
import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
import net.opentsdb.query.interpolation.QueryInterpolatorConfigParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
/**
* Returns a Numeric Summary Interpolator config.
* TODO - handle scalars
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/ReadAheadNumericInterpolator.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/ReadAheadNumericInterpolator.java
index d28f6b130d..4250fcd03f 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/ReadAheadNumericInterpolator.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/ReadAheadNumericInterpolator.java
@@ -17,9 +17,6 @@
import java.util.LinkedList;
import java.util.NoSuchElementException;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeriesValue;
import net.opentsdb.data.TimeStamp;
@@ -29,6 +26,10 @@
import net.opentsdb.query.QueryFillPolicy;
import net.opentsdb.query.interpolation.QueryInterpolator;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+
/**
* A class for {@link NumericType}s that allows for read-ahead buffering
* of values in case multiple values are available for an iterator and
diff --git a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/ScalarNumericInterpolatorConfig.java b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/ScalarNumericInterpolatorConfig.java
index fe91b79369..fb4543aa36 100644
--- a/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/ScalarNumericInterpolatorConfig.java
+++ b/core/src/main/java/net/opentsdb/query/interpolation/types/numeric/ScalarNumericInterpolatorConfig.java
@@ -17,6 +17,15 @@
import java.io.IOException;
import java.util.List;
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.types.numeric.NumericType;
+import net.opentsdb.data.types.numeric.ScalarNumericFillPolicy;
+import net.opentsdb.query.QueryFillPolicy;
+import net.opentsdb.query.QueryFillPolicy.FillWithRealPolicy;
+import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
+import net.opentsdb.query.pojo.FillPolicy;
+
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
@@ -29,14 +38,6 @@
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.types.numeric.NumericType;
-import net.opentsdb.data.types.numeric.ScalarNumericFillPolicy;
-import net.opentsdb.query.QueryFillPolicy;
-import net.opentsdb.query.QueryFillPolicy.FillWithRealPolicy;
-import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
-import net.opentsdb.query.pojo.FillPolicy;
/**
* Simple scalar interpolator config that fills with a single value when it
diff --git a/core/src/main/java/net/opentsdb/query/joins/BaseHashedJoinSet.java b/core/src/main/java/net/opentsdb/query/joins/BaseHashedJoinSet.java
index 3e5b82fcbb..989762871c 100644
--- a/core/src/main/java/net/opentsdb/query/joins/BaseHashedJoinSet.java
+++ b/core/src/main/java/net/opentsdb/query/joins/BaseHashedJoinSet.java
@@ -17,10 +17,11 @@
import java.util.Iterator;
import java.util.List;
-import gnu.trove.map.TLongObjectMap;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.query.joins.JoinConfig.JoinType;
+import gnu.trove.map.TLongObjectMap;
+
/**
* The base class for binary joins with a left and a right map of lists
* of time series keyed on the Long hash based off the JoinConfig.
diff --git a/core/src/main/java/net/opentsdb/query/joins/BaseJoin.java b/core/src/main/java/net/opentsdb/query/joins/BaseJoin.java
index 9c382d6328..f51e21ead9 100644
--- a/core/src/main/java/net/opentsdb/query/joins/BaseJoin.java
+++ b/core/src/main/java/net/opentsdb/query/joins/BaseJoin.java
@@ -17,11 +17,12 @@
import java.util.Iterator;
import java.util.List;
-import gnu.trove.iterator.TLongObjectIterator;
-import gnu.trove.set.TLongSet;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.utils.Pair;
+import gnu.trove.iterator.TLongObjectIterator;
+import gnu.trove.set.TLongSet;
+
/**
* A base class for Join methods that handles iteration and storing of
* common variables like list references and iterators.
diff --git a/core/src/main/java/net/opentsdb/query/joins/ByteIdOverride.java b/core/src/main/java/net/opentsdb/query/joins/ByteIdOverride.java
index e31b551010..5c140d7a60 100644
--- a/core/src/main/java/net/opentsdb/query/joins/ByteIdOverride.java
+++ b/core/src/main/java/net/opentsdb/query/joins/ByteIdOverride.java
@@ -21,13 +21,7 @@
import java.util.Map;
import java.util.Map.Entry;
-import com.google.common.base.Strings;
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Deferred;
-import net.openhft.hashing.LongHashFunction;
import net.opentsdb.common.Const;
import net.opentsdb.data.TimeSeriesByteId;
import net.opentsdb.data.TimeSeriesDataSourceFactory;
@@ -38,6 +32,14 @@
import net.opentsdb.utils.Bytes;
import net.opentsdb.utils.Bytes.ByteMap;
+import net.openhft.hashing.LongHashFunction;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Deferred;
+
/**
* A simple wrapper for single-sided joins that wraps the source
* ID with the proper alias for use as the alias and metric.
diff --git a/core/src/main/java/net/opentsdb/query/joins/JoinConfig.java b/core/src/main/java/net/opentsdb/query/joins/JoinConfig.java
index f7d0eeff5e..691d43f8ab 100644
--- a/core/src/main/java/net/opentsdb/query/joins/JoinConfig.java
+++ b/core/src/main/java/net/opentsdb/query/joins/JoinConfig.java
@@ -14,24 +14,23 @@
// limitations under the License.
package net.opentsdb.query.joins;
+import java.util.*;
+import java.util.Map.Entry;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.query.BaseQueryNodeConfig;
+
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hasher;
-import net.opentsdb.core.Const;
-import net.opentsdb.query.BaseQueryNodeConfig;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.TreeMap;
/**
* The serializable configuration for a time series join.
diff --git a/core/src/main/java/net/opentsdb/query/joins/Joiner.java b/core/src/main/java/net/opentsdb/query/joins/Joiner.java
index 00211fe2b6..412de91361 100644
--- a/core/src/main/java/net/opentsdb/query/joins/Joiner.java
+++ b/core/src/main/java/net/opentsdb/query/joins/Joiner.java
@@ -14,41 +14,29 @@
// limitations under the License.
package net.opentsdb.query.joins;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.NavigableMap;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.TreeMap;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
import net.opentsdb.common.Const;
-import net.opentsdb.data.BaseTimeSeriesByteId;
-import net.opentsdb.data.BaseTimeSeriesStringId;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesByteId;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
+import net.opentsdb.data.*;
import net.opentsdb.query.QueryResult;
import net.opentsdb.query.joins.JoinConfig.JoinType;
import net.opentsdb.query.processor.expressions.ExpressionParseNode;
import net.opentsdb.query.processor.expressions.TernaryParseNode;
import net.opentsdb.utils.ByteSet;
import net.opentsdb.utils.Bytes;
-import net.opentsdb.utils.XXHash;
import net.opentsdb.utils.Bytes.ByteMap;
+import net.opentsdb.utils.XXHash;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
/**
* A thread-safe class to perform join operations across time series.
diff --git a/core/src/main/java/net/opentsdb/query/joins/KeyedHashedJoinSet.java b/core/src/main/java/net/opentsdb/query/joins/KeyedHashedJoinSet.java
index 57060300dc..e8ecf862de 100644
--- a/core/src/main/java/net/opentsdb/query/joins/KeyedHashedJoinSet.java
+++ b/core/src/main/java/net/opentsdb/query/joins/KeyedHashedJoinSet.java
@@ -16,13 +16,15 @@
import java.util.List;
-import com.google.common.collect.Lists;
-import gnu.trove.map.hash.TLongObjectHashMap;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.query.joins.JoinConfig.JoinType;
import net.opentsdb.query.joins.Joiner.Operand;
+import gnu.trove.map.hash.TLongObjectHashMap;
+
+import com.google.common.collect.Lists;
+
/**
* A default implementation for the {@link BaseHashedJoinSet} that simply
* routes a time series to the left or right map based on a string key.
diff --git a/core/src/main/java/net/opentsdb/query/joins/TernaryKeyedHashedJoinSet.java b/core/src/main/java/net/opentsdb/query/joins/TernaryKeyedHashedJoinSet.java
index d6e4717ce0..91b142535f 100644
--- a/core/src/main/java/net/opentsdb/query/joins/TernaryKeyedHashedJoinSet.java
+++ b/core/src/main/java/net/opentsdb/query/joins/TernaryKeyedHashedJoinSet.java
@@ -16,13 +16,15 @@
import java.util.List;
-import com.google.common.collect.Lists;
-import gnu.trove.map.hash.TLongObjectHashMap;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.query.joins.JoinConfig.JoinType;
import net.opentsdb.query.joins.Joiner.Operand;
+import gnu.trove.map.hash.TLongObjectHashMap;
+
+import com.google.common.collect.Lists;
+
/**
* A default implementation for the {@link BaseHashedJoinSet} that simply
* routes a time series to the left or right map based on a string key.
diff --git a/core/src/main/java/net/opentsdb/query/plan/DefaultQueryPlanner.java b/core/src/main/java/net/opentsdb/query/plan/DefaultQueryPlanner.java
index 3ef833a257..8c9dd1733d 100644
--- a/core/src/main/java/net/opentsdb/query/plan/DefaultQueryPlanner.java
+++ b/core/src/main/java/net/opentsdb/query/plan/DefaultQueryPlanner.java
@@ -16,26 +16,35 @@
import java.time.Duration;
import java.time.temporal.TemporalAmount;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
-import com.google.common.annotations.VisibleForTesting;
+import net.opentsdb.common.Const;
+import net.opentsdb.configuration.Configuration;
+import net.opentsdb.data.TimeSeriesDataSource;
+import net.opentsdb.data.TimeSeriesDataSourceFactory;
+import net.opentsdb.data.TimeSeriesId;
import net.opentsdb.data.TimeStamp;
-import net.opentsdb.query.BaseTimeSeriesDataSourceConfig;
-import net.opentsdb.query.DefaultQueryResultId;
-
-import net.opentsdb.query.QueryNodeConfigOptions;
+import net.opentsdb.exceptions.QueryExecutionException;
+import net.opentsdb.query.*;
import net.opentsdb.query.TimeSeriesDataSourceConfig.Builder;
+import net.opentsdb.query.idconverter.ByteToStringIdConverterConfig;
import net.opentsdb.query.processor.downsample.DownsampleConfig;
import net.opentsdb.query.processor.downsample.DownsampleFactory;
+import net.opentsdb.query.processor.expressions.ExpressionConfig;
+import net.opentsdb.query.processor.expressions.ExpressionParseNode;
+import net.opentsdb.query.processor.merge.MergerConfig;
+import net.opentsdb.query.processor.summarizer.SummarizerConfig;
import net.opentsdb.query.processor.timeshift.TimeShiftConfig;
+import net.opentsdb.query.serdes.SerdesOptions;
+import net.opentsdb.stats.Span;
import net.opentsdb.utils.DateTime;
+import net.opentsdb.utils.Deferreds;
+import net.opentsdb.utils.Pair;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -50,35 +59,13 @@
import com.stumbleupon.async.Callback;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.common.Const;
-import net.opentsdb.configuration.Configuration;
-import net.opentsdb.data.TimeSeriesDataSource;
-import net.opentsdb.data.TimeSeriesDataSourceFactory;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.exceptions.QueryExecutionException;
-import net.opentsdb.query.QueryNode;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResultId;
-import net.opentsdb.query.TimeSeriesDataSourceConfig;
-import net.opentsdb.query.idconverter.ByteToStringIdConverterConfig;
-import net.opentsdb.query.processor.expressions.ExpressionConfig;
-import net.opentsdb.query.processor.expressions.ExpressionParseNode;
-import net.opentsdb.query.processor.merge.MergerConfig;
-import net.opentsdb.query.processor.summarizer.SummarizerConfig;
-import net.opentsdb.query.serdes.SerdesOptions;
-import net.opentsdb.stats.Span;
-import net.opentsdb.utils.Deferreds;
-import net.opentsdb.utils.Pair;
-
/**
* A query planner that handles push-down operations to data sources.
*
* NOTE: The planner is NOT thread safe.
* {@link QueryNodeFactory#setupGraph(QueryPipelineContext, QueryNodeConfig, QueryPlanner)}
* calls may NOT mutate the graph in a different thread.
- *
+ *
* TODO - Improve the performance. There are multiple iterations "up" and "down"
* the graph right now. We can likely track state better and reduce that, even
* though the vast majority of graphs would have a handful or a couple dozen
@@ -102,60 +89,60 @@
* have to walk and add the converter before constructing the node
* graph.
*
- *
+ *
* @since 3.0
*/
public class DefaultQueryPlanner implements QueryPlanner {
private static final Logger LOG = LoggerFactory.getLogger(
DefaultQueryPlanner.class);
-
+
/** The context we belong to. We get the query here. */
protected final QueryPipelineContext context;
/** The pass-through context sink node. */
protected final QueryNode context_sink;
-
+
/** A reference to the sink config. */
protected final ContextNodeConfig context_sink_config;
-
+
/** A list of filters to be satisfied. */
protected final Map sink_filter;
-
+
/** The roots (sent to sinks) of the user given graph. */
protected List roots;
-
+
/** The planned execution graph. */
protected MutableGraph graph;
-
+
/** The list of data sources we're fetching from. */
protected List data_sources;
-
+
/** The set of data source config nodes. */
protected final Set source_nodes;
-
+
/** The configuration graph. */
protected MutableGraph config_graph;
-
+
/** Map of the config IDs to nodes for use in linking and unit testing. */
protected final Map nodes_map;
-
+
/** The cache of factories. */
protected final Map factory_cache;
-
+
/** The context node from the query pipeline context. All results pass
* through this. */
protected QueryNodeConfig context_node;
-
+
/** The set of QueryResult objects we should see. */
protected List serialization_sources;
-
+
/** Flag set when one of the config graph modification methods are called from
* a config setup method. */
protected boolean modified_during_setup;
-
+
/** The set of satisfied filters. */
protected Set satisfied_filters;
-
+
/**
* Default ctor.
* @param context The non-null context to pull the query from.
@@ -175,7 +162,7 @@ public DefaultQueryPlanner(final QueryPipelineContext context,
config_graph = GraphBuilder.directed()
.allowsSelfLoops(false)
.build();
-
+
if (context.query().getSerdesConfigs() != null) {
for (final SerdesOptions config : context.query().getSerdesConfigs()) {
if (config.getFilter() != null) {
@@ -195,7 +182,7 @@ public DefaultQueryPlanner(final QueryPipelineContext context,
}
}
}
-
+
/**
* Does the hard work.
*/
@@ -203,12 +190,12 @@ public Deferred plan(final Span span) {
buildInitialConfigGraph();
setupConfigGraph();
final List> deferreds = checkForConvertersAndInitFilters();
-
+
return Deferred.group(deferreds)
.addCallback(Deferreds.VOID_GROUP_CB)
.addCallbackDeferring(new ConfigInitCB());
}
-
+
/**
* Recursive setup that will stop and allow the loop to restart setup
* if the graph has changed.
@@ -219,30 +206,30 @@ public Deferred plan(final Span span) {
* if not.
*/
private boolean recursiveSetup(
- final QueryNodeConfig node,
- final Set already_setup,
+ final QueryNodeConfig node,
+ final Set already_setup,
final Set satisfied_filters) {
if (!already_setup.contains(node.hashCode())) {
- for (final QueryNodeConfig downstream :
+ for (final QueryNodeConfig downstream :
Sets.newHashSet(config_graph.successors(node))) {
if (recursiveSetup(downstream, already_setup, satisfied_filters)) {
return true;
}
}
-
+
if (node == context_sink_config) {
return false;
}
-
+
if (sink_filter.containsKey(node.getId())) {
config_graph.putEdge(context_node, node);
if (Graphs.hasCycle(config_graph)) {
- throw new IllegalArgumentException("Cycle found linking node "
+ throw new IllegalArgumentException("Cycle found linking node "
+ context_node.getId() + " to " + node.getId());
}
satisfied_filters.add(node.getId());
}
-
+
final QueryNodeFactory factory = getFactory(node);
if (factory == null) {
throw new QueryExecutionException("No factory found for: "
@@ -255,10 +242,10 @@ private boolean recursiveSetup(
}
} else {
// TODO - TEMP!! Special summary pass through code
- if (node instanceof SummarizerConfig &&
+ if (node instanceof SummarizerConfig &&
((SummarizerConfig) node).passThrough() &&
(!sink_filter.isEmpty() ? sink_filter.containsKey(node.getId()) : true)) {
- final Set successors =
+ final Set successors =
Sets.newHashSet(config_graph.successors(node));
for (final QueryNodeConfig successor : successors) {
sink_filter.remove(successor.getId());
@@ -271,7 +258,7 @@ private boolean recursiveSetup(
// skip the node that's already been setup.
return false;
}
-
+
// Default code path that simply brings forward the sources and replaces the
// node ID if no sources were set during the setup phase.
if (node.resultIds().isEmpty()) {
@@ -282,10 +269,10 @@ private boolean recursiveSetup(
this.replace(node, builder.build());
return true;
}
-
+
return false;
}
-
+
/**
* Helper to DFS initialize the nodes.
* @param node The non-null current node.
@@ -293,13 +280,13 @@ private boolean recursiveSetup(
* @param span An optional tracing span.
* @return A deferred resolving to null or an exception.
*/
- private Deferred recursiveInit(final QueryNode node,
- final Set initialized,
+ private Deferred recursiveInit(final QueryNode node,
+ final Set initialized,
final Span span) {
if (initialized.contains(node)) {
return Deferred.fromResult(null);
}
-
+
final Set successors = graph.successors(node);
if (successors.isEmpty()) {
initialized.add(node);
@@ -308,7 +295,7 @@ private Deferred recursiveInit(final QueryNode node,
}
return node.initialize(span);
}
-
+
List> deferreds = Lists.newArrayListWithExpectedSize(successors.size());
for (final QueryNode successor : successors) {
deferreds.add(recursiveInit(successor, initialized, span));
@@ -324,32 +311,32 @@ public Deferred call(final Void ignored) throws Exception {
return node.initialize(span);
}
}
-
+
return Deferred.group(deferreds)
.addCallback(Deferreds.VOID_GROUP_CB)
.addCallbackDeferring(new InitCB());
}
/**
- * Recursive method extract
+ * Recursive method extract
* @param parent The parent of this node.
* @param source The data source node.
* @param factory The data source factory.
* @param node The current node.
- * @param push_downs The non-null list of node configs that we'll
+ * @param push_downs The non-null list of node configs that we'll
* populate any time we can push down.
* @return An edge to link with if the previous node was pushed down.
*/
public void pushDown(
final QueryNodeConfig parent,
- final QueryNodeConfig source,
- final TimeSeriesDataSourceFactory factory,
+ final QueryNodeConfig source,
+ final TimeSeriesDataSourceFactory factory,
final QueryNodeConfig node,
final List push_downs) {
if (!factory.supportsPushdown(node.getClass())) {
return;
}
-
+
if (!node.pushDown()) {
return;
}
@@ -370,24 +357,24 @@ public void pushDown(
}
}
}
-
- Set incoming = config_graph.predecessors(node);
+
+ final Set incoming = Sets.newHashSet(config_graph.predecessors(
+ node));
for (final QueryNodeConfig n : incoming) {
config_graph.putEdge(n, parent);
if (Graphs.hasCycle(config_graph)) {
- throw new IllegalArgumentException("Cycle found linking node "
+ throw new IllegalArgumentException("Cycle found linking node "
+ node.getId() + " to " + parent.getId());
}
}
-
+
// purge if we pushed everything down
if (config_graph.successors(node).isEmpty()) {
config_graph.removeNode(node);
}
-
+
// see if we can walk up for more
if (!incoming.isEmpty()) {
- incoming = Sets.newHashSet(incoming);
for (final QueryNodeConfig n : incoming) {
pushDown(parent, node, factory, n, push_downs);
}
@@ -404,30 +391,30 @@ public void pushDown(
* @return A node to link with.
*/
private QueryNode buildNodeGraph(
- final QueryPipelineContext context,
+ final QueryPipelineContext context,
final QueryNodeConfig node,
final Map nodes_map) {
// walk up the graph.
final List sources = Lists.newArrayList();
for (final QueryNodeConfig n : config_graph.successors(node)) {
sources.add(buildNodeGraph(
- context,
+ context,
n,
nodes_map));
}
-
+
// special case, ug.
if (node instanceof ContextNodeConfig) {
for (final QueryNode source_node : sources) {
graph.putEdge(context_sink, source_node);
if (Graphs.hasCycle(graph)) {
- throw new IllegalArgumentException("Cycle adding "
+ throw new IllegalArgumentException("Cycle adding "
+ context_sink + " => " + source_node);
}
}
return context_sink;
}
-
+
QueryNode query_node = nodes_map.get(node.getId());
if (query_node == null) {
QueryNodeFactory factory = getFactory(node);
@@ -435,17 +422,17 @@ private QueryNode buildNodeGraph(
throw new QueryExecutionException("No node factory found for "
+ "configuration " + node, 400);
}
-
+
query_node = factory.newNode(context, node);
if (query_node == null) {
throw new IllegalStateException("Factory returned a null "
+ "instance for " + node);
}
-
+
graph.addNode(query_node);
nodes_map.put(query_node.config().getId(), query_node);
}
-
+
if (query_node instanceof TimeSeriesDataSource) {
// TODO - make it a set but then convert to list as the pipeline
// needs indexing (or we can make it an iterator there).
@@ -453,34 +440,34 @@ private QueryNode buildNodeGraph(
data_sources.add((TimeSeriesDataSource) query_node);
}
}
-
+
for (final QueryNode source_node : sources) {
graph.putEdge(query_node, source_node);
if (Graphs.hasCycle(graph)) {
- throw new IllegalArgumentException("Cycle adding "
+ throw new IllegalArgumentException("Cycle adding "
+ query_node + " => " + source_node);
}
}
-
+
return query_node;
}
-
+
/** @return The non-null node graph. */
@Override
public MutableGraph graph() {
return graph;
}
-
+
@Override
public MutableGraph configGraph() {
return config_graph;
}
-
+
@Override
public QueryPipelineContext context() {
return context;
}
-
+
/** @return The non-null data sources list. */
public List sources() {
return data_sources;
@@ -490,16 +477,16 @@ public List sources() {
public List serializationSources() {
return serialization_sources;
}
-
+
public Map sinkFilters() {
return sink_filter;
}
-
+
@Override
public QueryNode nodeForId(final String id) {
return nodes_map.get(id);
}
-
+
/**
* Helper for unit testing.
* @param id A non-null ID to search for.
@@ -513,7 +500,7 @@ public QueryNodeConfig configNodeForId(final String id) {
}
return null;
}
-
+
/**
* TODO - look at this to find a better way than having a generic
* config.
@@ -524,7 +511,7 @@ public class ContextNodeConfig implements QueryNodeConfig {
public String getId() {
return "QueryContext";
}
-
+
@Override
public String getType() {
// TODO Auto-generated method stub
@@ -536,7 +523,7 @@ public List getSources() {
// TODO Auto-generated method stub
return null;
}
-
+
@Override
public HashCode buildHashCode() {
// TODO Auto-generated method stub
@@ -571,7 +558,7 @@ public Object nodeOption(QueryNodeConfigOptions option) {
public boolean readCacheable() {
return false;
}
-
+
@Override
public Map getOverrides() {
// TODO Auto-generated method stub
@@ -623,7 +610,7 @@ public Builder toBuilder() {
public int compareTo(Object o) {
return 0;
}
-
+
@Override
public List> resultIds() {
return Collections.emptyList();
@@ -633,12 +620,12 @@ public List> resultIds() {
public boolean markedCacheable() {
return false;
}
-
+
@Override
public void markCacheable(final boolean cacheable) {
// no-op
}
-
+
}
/**
@@ -649,8 +636,8 @@ public void markCacheable(final boolean cacheable) {
public void replace(final QueryNodeConfig old_config,
final QueryNodeConfig new_config) {
if (LOG.isTraceEnabled()) {
- LOG.trace("Replacing node " + old_config.getId()
- + " (" + System.identityHashCode(old_config) + ") with "
+ LOG.trace("Replacing node " + old_config.getId()
+ + " (" + System.identityHashCode(old_config) + ") with "
+ new_config.getId() + " (" + System.identityHashCode(new_config) + ")");
}
modified_during_setup = true;
@@ -661,7 +648,7 @@ public void replace(final QueryNodeConfig old_config,
for (final QueryNodeConfig n : upstream) {
config_graph.removeEdge(n, old_config);
}
-
+
final List downstream = Lists.newArrayList();
for (final QueryNodeConfig n : config_graph.successors(old_config)) {
downstream.add(n);
@@ -669,46 +656,46 @@ public void replace(final QueryNodeConfig old_config,
for (final QueryNodeConfig n : downstream) {
config_graph.removeEdge(old_config, n);
}
-
+
config_graph.removeNode(old_config);
config_graph.addNode(new_config);
-
- if (old_config instanceof TimeSeriesDataSourceConfig &&
+
+ if (old_config instanceof TimeSeriesDataSourceConfig &&
source_nodes.contains(old_config)) {
source_nodes.remove(old_config);
}
-
+
if (new_config instanceof TimeSeriesDataSourceConfig) {
source_nodes.add(new_config);
}
-
+
for (final QueryNodeConfig up : upstream) {
config_graph.putEdge(up, new_config);
if (Graphs.hasCycle(config_graph)) {
- throw new IllegalArgumentException("Cycle found linking node "
+ throw new IllegalArgumentException("Cycle found linking node "
+ up.getId() + " to " + new_config.getId());
}
}
-
+
for (final QueryNodeConfig down : downstream) {
config_graph.putEdge(new_config, down);
if (Graphs.hasCycle(config_graph)) {
- throw new IllegalArgumentException("Cycle found linking node "
+ throw new IllegalArgumentException("Cycle found linking node "
+ new_config.getId() + " to " + down.getId());
}
}
}
@Override
- public boolean addEdge(final QueryNodeConfig from,
+ public boolean addEdge(final QueryNodeConfig from,
final QueryNodeConfig to) {
modified_during_setup = true;
final boolean added = config_graph.putEdge(from, to);
if (Graphs.hasCycle(config_graph)) {
- throw new IllegalArgumentException("Cycle found linking node "
- + from.getId() + " to " + to.getId());
+ throw new IllegalArgumentException("Cycle found linking node "
+ + from.getId() + " to " + to.getId());
}
-
+
if (from instanceof TimeSeriesDataSourceConfig) {
source_nodes.add(from);
}
@@ -719,18 +706,18 @@ public boolean addEdge(final QueryNodeConfig from,
}
@Override
- public boolean removeEdge(final QueryNodeConfig from,
+ public boolean removeEdge(final QueryNodeConfig from,
final QueryNodeConfig to) {
if (config_graph.removeEdge(from, to)) {
- if (config_graph.predecessors(from).isEmpty() &&
+ if (config_graph.predecessors(from).isEmpty() &&
config_graph.successors(from).isEmpty()) {
config_graph.removeNode(from);
if (from instanceof TimeSeriesDataSourceConfig) {
source_nodes.remove(from);
}
}
-
- if (config_graph.predecessors(to).isEmpty() &&
+
+ if (config_graph.predecessors(to).isEmpty() &&
config_graph.successors(to).isEmpty()) {
config_graph.removeNode(to);
if (to instanceof TimeSeriesDataSourceConfig) {
@@ -754,13 +741,13 @@ public boolean removeNode(final QueryNodeConfig config) {
}
return false;
}
-
+
@Override
public QueryNodeFactory getFactory(final QueryNodeConfig node) {
String key;
if (node instanceof TimeSeriesDataSourceConfig) {
key = Strings.isNullOrEmpty(((TimeSeriesDataSourceConfig) node)
- .getSourceId()) ? null :
+ .getSourceId()) ? null :
((TimeSeriesDataSourceConfig) node)
.getSourceId().toLowerCase();
if (key != null && key.contains(":")) {
@@ -781,7 +768,7 @@ public QueryNodeFactory getFactory(final QueryNodeConfig node) {
}
return factory;
}
-
+
@Override
public Collection terminalSourceNodes(final QueryNodeConfig config) {
final Set successors = config_graph.successors(config);
@@ -793,16 +780,16 @@ public Collection terminalSourceNodes(final QueryNodeConfig con
}
return Collections.emptyList();
}
-
+
Set sources = Sets.newHashSet();
for (final QueryNodeConfig successor : successors) {
sources.addAll(terminalSourceNodes(successor));
}
return sources;
}
-
+
@Override
- public String getMetricForDataSource(final QueryNodeConfig node,
+ public String getMetricForDataSource(final QueryNodeConfig node,
final String data_source_id) {
if (node instanceof TimeSeriesDataSourceConfig &&
(node.getId().equals(data_source_id) /*||
@@ -813,7 +800,7 @@ public String getMetricForDataSource(final QueryNodeConfig node,
if (!((MergerConfig) node).getDataSource().equals(data_source_id)) {
return null;
}
-
+
// depth first as we're guaranteed, at least for now, to have something
// like merger <- ha <- src1
// ^--- src2
@@ -827,28 +814,28 @@ public String getMetricForDataSource(final QueryNodeConfig node,
config = successors.iterator().next();
}
}
-
+
if (config == null) {
return null;
}
-
+
return ((TimeSeriesDataSourceConfig) config).getMetric().getMetric();
} else if (node instanceof ExpressionConfig) {
- return ((ExpressionConfig) node).getAs() == null ? node.getId() :
+ return ((ExpressionConfig) node).getAs() == null ? node.getId() :
((ExpressionConfig) node).getAs();
} else if (node instanceof ExpressionParseNode) {
- return ((ExpressionParseNode) node).getAs() == null ? node.getId() :
+ return ((ExpressionParseNode) node).getAs() == null ? node.getId() :
((ExpressionParseNode) node).getAs();
}
}
-
+
for (final QueryNodeConfig successor : config_graph.successors(node)) {
final String metric = getMetricForDataSource(successor, data_source_id);
if (metric != null) {
return metric;
}
}
-
+
return null;
}
@@ -947,24 +934,24 @@ protected TimeAdjustments recursiveAdjustments(final QueryNodeConfig config,
* generate a DAG from the given list of sources to each node.
*/
protected void buildInitialConfigGraph() {
- final Map config_map =
+ final Map config_map =
Maps.newHashMapWithExpectedSize(
context.query().getExecutionGraph().size());
context_node = context_sink_config;
config_graph.addNode(context_node);
config_map.put("QueryContext", context_node);
-
+
// the first step is to add the vertices to the graph and we'll stash
// the nodes in a map by node ID so we can link them later.
for (final QueryNodeConfig node : context.query().getExecutionGraph()) {
if (config_map.putIfAbsent(node.getId(), node) != null) {
- throw new QueryExecutionException("The node id \""
+ throw new QueryExecutionException("The node id \""
+ node.getId() + "\" appeared more than once in the "
+ "graph. It must be unique.", 400);
}
config_graph.addNode(node);
}
-
+
// now link em with the edges.
for (final QueryNodeConfig node : context.query().getExecutionGraph()) {
if (node instanceof TimeSeriesDataSourceConfig) {
@@ -976,38 +963,38 @@ protected void buildInitialConfigGraph() {
for (final String source : sources) {
final QueryNodeConfig src = config_map.get(source);
if (src == null) {
- throw new QueryExecutionException("No source node with ID "
+ throw new QueryExecutionException("No source node with ID "
+ source + " found for config " + node.getId(), 400);
}
config_graph.putEdge(node, src);
if (Graphs.hasCycle(config_graph)) {
- throw new IllegalArgumentException("Cycle found linking node "
+ throw new IllegalArgumentException("Cycle found linking node "
+ node.getId() + " to " + config_map.get(source).getId());
}
}
}
}
-
+
// ugg... loop again and setup the links to the context config so we can do
// a proper depth first setup recursion.
for (final QueryNodeConfig node : config_graph.nodes()) {
if (node == context_node) {
continue;
}
-
+
if (sink_filter.containsKey(node.getId())) {
config_graph.putEdge(context_node, node);
if (Graphs.hasCycle(config_graph)) {
- throw new IllegalArgumentException("Cycle found linking node "
+ throw new IllegalArgumentException("Cycle found linking node "
+ context_node.getId() + " to " + node.getId());
}
continue;
}
-
+
if (config_graph.predecessors(node).isEmpty() && sink_filter.isEmpty()) {
config_graph.putEdge(context_node, node);
if (Graphs.hasCycle(config_graph)) {
- throw new IllegalArgumentException("Cycle found linking node "
+ throw new IllegalArgumentException("Cycle found linking node "
+ context_node.getId() + " to " + node.getId());
}
}
@@ -1033,7 +1020,7 @@ protected void setupConfigGraph() {
modified_during_setup = false;
recursiveSetup(context_node, already_setup, satisfied_filters);
}
-
+
// one more iteration to make sure we capture all the source nodes
// from the graph setup.
source_nodes.clear();
@@ -1043,9 +1030,9 @@ protected void setupConfigGraph() {
}
}
}
-
+
protected List> checkForConvertersAndInitFilters() {
- final List> deferreds =
+ final List> deferreds =
Lists.newArrayListWithExpectedSize(source_nodes.size());
boolean needsTopLevelConverter = false;
@@ -1061,7 +1048,7 @@ protected List> checkForConvertersAndInitFilters() {
needsTopLevelConverter = factory.idType() != Const.TS_STRING_ID;
}
}
-
+
if (needsTopLevelConverter) {
computeSerializationSources();
final QueryNodeConfig converter = ByteToStringIdConverterConfig.newBuilder()
@@ -1075,7 +1062,7 @@ protected List> checkForConvertersAndInitFilters() {
}
return deferreds;
}
-
+
protected void verifySinkFilters() {
for (final String key : sink_filter.keySet()) {
if (!satisfied_filters.contains(key)) {
@@ -1083,13 +1070,13 @@ protected void verifySinkFilters() {
// graph.
boolean found = false;
if (!found) {
- throw new QueryExecutionException("Unsatisfied sink filter: "
+ throw new QueryExecutionException("Unsatisfied sink filter: "
+ key + printConfigGraph(), 400);
}
}
}
}
-
+
protected void setupPushDowns() {
// next, push down by walking up from the data sources.
final List copy = Lists.newArrayList(source_nodes);
@@ -1105,18 +1092,18 @@ protected void setupPushDowns() {
throw new QueryExecutionException("No node factory found for "
+ "configuration " + node + " Factory=" + factory, 400);
}
-
+
final List push_downs = Lists.newArrayList();
final Set nodes = Sets.newHashSet(config_graph.predecessors(node));
for (final QueryNodeConfig n : nodes) {
pushDown(
- node,
- node,
- (TimeSeriesDataSourceFactory) factory,
- n,
+ node,
+ node,
+ (TimeSeriesDataSourceFactory) factory,
+ n,
push_downs);
}
-
+
if (!push_downs.isEmpty()) {
// fix up sources and result IDs in case there were multiple sources feeding
// into the pushdown nodes.
@@ -1138,11 +1125,11 @@ protected void setupPushDowns() {
}
}
// now dump the push downs into this node.
- final TimeSeriesDataSourceConfig tsDataSourceconfig =
+ final TimeSeriesDataSourceConfig tsDataSourceconfig =
(TimeSeriesDataSourceConfig) node;
final TimeSeriesDataSourceConfig new_config =
- (TimeSeriesDataSourceConfig)
- ((BaseTimeSeriesDataSourceConfig.Builder)
+ (TimeSeriesDataSourceConfig)
+ ((BaseTimeSeriesDataSourceConfig.Builder)
tsDataSourceconfig.toBuilder())
.setPushDownNodes(push_downs)
.setResultIds(push_downs.get(push_downs.size() - 1).resultIds())
@@ -1151,7 +1138,7 @@ protected void setupPushDowns() {
}
}
}
-
+
protected void computeSerializationSources() {
if (serialization_sources != null) {
return;
@@ -1165,7 +1152,7 @@ protected void computeSerializationSources() {
serialization_sources.add(source);
}
}
-
+
// cleanout nodes that don't contribute to serialization. This can save
// some fetch time if we get a data source that isn't serialized or used
// in some computation!
@@ -1179,29 +1166,29 @@ protected void computeSerializationSources() {
}
}
}
-
+
protected Deferred buildAndInitNodes() {
graph = GraphBuilder.directed()
.allowsSelfLoops(false)
.build();
graph.addNode(context_sink);
nodes_map.put(context_sink_config.getId(), context_sink);
-
+
Traverser traverser = Traverser.forGraph(config_graph);
for (final QueryNodeConfig node : traverser.breadthFirst(context_node)) {
if (config_graph.predecessors(node).isEmpty()) {
buildNodeGraph(context, node, nodes_map);
}
}
-
+
if (LOG.isTraceEnabled()) {
- LOG.trace(printConfigGraph());
+ LOG.trace(printConfigGraph());
}
-
+
if (context.query().isTraceEnabled()) {
context.queryContext().logTrace(printConfigGraph());
}
-
+
// depth first initiation of the executors since we have to init
// the ones without any downstream dependencies first.
Set initialized = Sets.newHashSet();
@@ -1211,18 +1198,18 @@ protected Deferred buildAndInitNodes() {
@Override
public Deferred call(Void arg) throws Exception {
if (data_sources.isEmpty()) {
- LOG.error("No data sources in the final graph for: "
+ LOG.error("No data sources in the final graph for: "
+ context.query() + " " + printConfigGraph());
return Deferred.fromError(new RuntimeException(
- "No data sources in the final graph for: "
+ "No data sources in the final graph for: "
+ context.query() + " " + printConfigGraph()));
}
return null;
}
-
+
});
}
-
+
/**
* Method to iterate over the immediate successors of the given node config to
* compile a combined list of result IDs.
@@ -1240,14 +1227,14 @@ public List compileResultIds(final QueryNodeConfig config) {
replace(downstream, newConfig);
downstream = newConfig;
}
- for (final QueryResultId source :
+ for (final QueryResultId source :
(List) downstream.resultIds()) {
ids.add(new DefaultQueryResultId(config.getId(), source.dataSource()));
}
}
return ids;
}
-
+
class ConfigInitCB implements Callback, Void> {
@Override
@@ -1256,7 +1243,7 @@ public Deferred call(final Void ignored) throws Exception {
// satisfied.
verifySinkFilters();
setupPushDowns();
-
+
// TODO clean out nodes that won't contribute to serialization.
// compute source IDs.
computeSerializationSources();
@@ -1264,15 +1251,15 @@ public Deferred call(final Void ignored) throws Exception {
// now go and build the node graph
return buildAndInitNodes();
}
-
+
}
-
+
/**
* Recursive search for joining nodes (like mergers) that would run
* into multiple sources with different byte IDs (or byte IDs and string
* IDs) that need to be converted to strings for proper joins. Start
* by passing the source node and it will walk up to find joins.
- *
+ *
* @param current The non-null current node.
* @return True if an ID was inserted before a join in which case we may not
* need the top-level converter.
@@ -1284,7 +1271,7 @@ private boolean needByteIdConverter(final QueryNodeConfig current) {
if (!(current instanceof TimeSeriesDataSourceConfig) &&
current.joins()) {
- final Map> source_ids =
+ final Map> source_ids =
Maps.newHashMap();
uniqueSources(current, source_ids);
if (!source_ids.isEmpty() && source_ids.size() > 1) {
@@ -1295,11 +1282,11 @@ private boolean needByteIdConverter(final QueryNodeConfig current) {
byte_ids++;
}
}
-
+
if (byte_ids > 0) {
// OOH we may need to add one!
Set successors = config_graph.successors(current);
- if (successors.size() == 1 &&
+ if (successors.size() == 1 &&
successors.iterator().next() instanceof ByteToStringIdConverterConfig) {
// nothing to do!
return true;
@@ -1323,9 +1310,9 @@ private boolean needByteIdConverter(final QueryNodeConfig current) {
}
}
return byte_ids > 0;
- }
+ }
}
-
+
Set predecessors = config_graph.predecessors(current);
if (!predecessors.isEmpty()) {
predecessors = Sets.newHashSet(predecessors);
@@ -1339,15 +1326,15 @@ private boolean needByteIdConverter(final QueryNodeConfig current) {
}
return added;
}
-
+
/**
- * Helper that walks down from the join config to determine if a the
+ * Helper that walks down from the join config to determine if a the
* sources feeding that node have byte IDs or not.
- *
+ *
* @param current The non-null current node.
* @param source_ids A non-null map of data source to ID types.
*/
- private void uniqueSources(final QueryNodeConfig current,
+ private void uniqueSources(final QueryNodeConfig current,
final Map> source_ids) {
if (current instanceof TimeSeriesDataSourceConfig) {
final TimeSeriesDataSourceFactory factory =
@@ -1367,7 +1354,7 @@ private void uniqueSources(final QueryNodeConfig current,
// TODO - what if we hit a join? For now we're walking past it and if we
// see that there is already a converter there, we can just walk back up.
}
-
+
/**
* Recursive method to find out if a node contributes to an operation that will
* be serialized.
@@ -1379,21 +1366,21 @@ private boolean linksToContext(final QueryNodeConfig config) {
if (config == context_sink_config) {
return true;
}
-
+
final Set predecessors = config_graph.predecessors(config);
if (predecessors.isEmpty()) {
return false;
}
-
+
for (final QueryNodeConfig predecessor : predecessors) {
if (linksToContext(predecessor)) {
return true;
}
}
-
+
return false;
}
-
+
/**
* Helper for UTs and debugging to print the graph.
*/
@@ -1401,22 +1388,22 @@ public String printConfigGraph() {
final StringBuilder buffer = new StringBuilder();
buffer.append(" -------------------------\n");
for (final QueryNodeConfig node : config_graph.nodes()) {
- buffer.append("[V] " + node.getId() + " {"
- + node.getClass().getSimpleName() + "} ("
+ buffer.append("[V] " + node.getId() + " {"
+ + node.getClass().getSimpleName() + "} ("
+ System.identityHashCode(node) + ") "
+ node.resultIds() + "\n");
}
buffer.append("\n");
for (final EndpointPair pair : config_graph.edges()) {
- buffer.append("[E] " + pair.nodeU().getId()
- + " (" + System.identityHashCode(pair.nodeU()) + ") => "
- + pair.nodeV().getId() + " ("
+ buffer.append("[E] " + pair.nodeU().getId()
+ + " (" + System.identityHashCode(pair.nodeU()) + ") => "
+ + pair.nodeV().getId() + " ("
+ System.identityHashCode(pair.nodeV()) + ")\n");
}
buffer.append(" -------------------------\n");
return buffer.toString();
}
-
+
/**
* Helper for UTs and debugging to print the graph.
*/
@@ -1424,15 +1411,15 @@ public String printNodeGraph() {
final StringBuilder buffer = new StringBuilder();
buffer.append(" -------------------------\n");
for (final QueryNode node : graph.nodes()) {
- buffer.append("[V] " + node.config().getId()
- + " {" + node.getClass().getSimpleName() + "} ("
+ buffer.append("[V] " + node.config().getId()
+ + " {" + node.getClass().getSimpleName() + "} ("
+ System.identityHashCode(node) + ")\n");
}
buffer.append("\n");
for (final EndpointPair pair : graph.edges()) {
- buffer.append("[E] " + pair.nodeU().config().getId()
- + " (" + System.identityHashCode(pair.nodeU()) + ") => "
- + pair.nodeV().config().getId() + " ("
+ buffer.append("[E] " + pair.nodeU().config().getId()
+ + " (" + System.identityHashCode(pair.nodeU()) + ") => "
+ + pair.nodeV().config().getId() + " ("
+ System.identityHashCode(pair.nodeV()) + ")\n");
}
buffer.append(" -------------------------\n");
@@ -1583,4 +1570,4 @@ void addShift(final TimeSeriesDataSourceConfig config,
addEdge(shift, builder.build());
}
}
-}
\ No newline at end of file
+}
diff --git a/core/src/main/java/net/opentsdb/query/pojo/Downsampler.java b/core/src/main/java/net/opentsdb/query/pojo/Downsampler.java
index 8732874171..a91b6cea59 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/Downsampler.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/Downsampler.java
@@ -16,13 +16,19 @@
import java.util.List;
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.types.numeric.aggregators.NumericAggregatorFactory;
+import net.opentsdb.utils.DateTime;
+
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
@@ -31,11 +37,6 @@
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.types.numeric.aggregators.NumericAggregatorFactory;
-import net.opentsdb.utils.DateTime;
-
/**
* Pojo builder class used for serdes of the downsampler component of a query
*
diff --git a/core/src/main/java/net/opentsdb/query/pojo/DownsamplingSpecification.java b/core/src/main/java/net/opentsdb/query/pojo/DownsamplingSpecification.java
index c22e134d4d..87da119f9d 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/DownsamplingSpecification.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/DownsamplingSpecification.java
@@ -16,13 +16,14 @@
import java.util.TimeZone;
-import com.google.common.base.MoreObjects;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.types.numeric.aggregators.NumericAggregator;
import net.opentsdb.data.types.numeric.aggregators.NumericAggregatorFactory;
import net.opentsdb.utils.DateTime;
+import com.google.common.base.MoreObjects;
+
/**
* Representation of a downsampling specification in a TSDB query.
* @since 2.2
diff --git a/core/src/main/java/net/opentsdb/query/pojo/Expression.java b/core/src/main/java/net/opentsdb/query/pojo/Expression.java
index 750badd346..f2eb811b43 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/Expression.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/Expression.java
@@ -14,21 +14,22 @@
// limitations under the License.
package net.opentsdb.query.pojo;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Set;
-import java.util.TreeMap;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.query.pojo.Join.SetOperator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
@@ -38,10 +39,6 @@
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.query.pojo.Join.SetOperator;
-
/**
* Pojo builder class used for serdes of the expression component of a query
* @since 2.3
diff --git a/core/src/main/java/net/opentsdb/query/pojo/Filter.java b/core/src/main/java/net/opentsdb/query/pojo/Filter.java
index f973288177..492b2aea7b 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/Filter.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/Filter.java
@@ -14,13 +14,21 @@
// limitations under the License.
package net.opentsdb.query.pojo;
+import java.util.Collections;
+import java.util.List;
+
+
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
@@ -29,12 +37,6 @@
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-
-import java.util.Collections;
-import java.util.List;
-
/**
* Pojo builder class used for serdes of a filter component of a query
* @since 2.3
diff --git a/core/src/main/java/net/opentsdb/query/pojo/Join.java b/core/src/main/java/net/opentsdb/query/pojo/Join.java
index eaa3efb386..086be6fe0f 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/Join.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/Join.java
@@ -17,14 +17,18 @@
import java.util.Collections;
import java.util.List;
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
import com.google.common.base.Objects;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Lists;
@@ -32,9 +36,6 @@
import com.google.common.hash.HashCode;
import com.google.common.hash.Hasher;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-
/**
* Pojo builder class used for serdes of the join component of a query
* @since 2.3
diff --git a/core/src/main/java/net/opentsdb/query/pojo/Metric.java b/core/src/main/java/net/opentsdb/query/pojo/Metric.java
index 18d5d7160f..dc5f2195ee 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/Metric.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/Metric.java
@@ -16,13 +16,19 @@
import java.util.List;
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.types.numeric.aggregators.NumericAggregatorFactory;
+import net.opentsdb.utils.DateTime;
+
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
@@ -31,11 +37,6 @@
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.types.numeric.aggregators.NumericAggregatorFactory;
-import net.opentsdb.utils.DateTime;
-
/**
* Pojo builder class used for serdes of a metric component of a query
* @since 2.3
diff --git a/core/src/main/java/net/opentsdb/query/pojo/NumericFillPolicy.java b/core/src/main/java/net/opentsdb/query/pojo/NumericFillPolicy.java
index e7df6194be..f8c13acf89 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/NumericFillPolicy.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/NumericFillPolicy.java
@@ -14,18 +14,19 @@
// limitations under the License.
package net.opentsdb.query.pojo;
+import net.opentsdb.core.Const;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
import com.google.common.base.Objects;
import com.google.common.collect.ComparisonChain;
import com.google.common.hash.HashCode;
-import net.opentsdb.core.Const;
-
/**
* POJO for serdes of fill policies. It allows the user to pick either policies
* with default values or a scalar that can be supplied with any number.
diff --git a/core/src/main/java/net/opentsdb/query/pojo/Output.java b/core/src/main/java/net/opentsdb/query/pojo/Output.java
index f64863470e..7df38087f9 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/Output.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/Output.java
@@ -14,21 +14,22 @@
// limitations under the License.
package net.opentsdb.query.pojo;
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Ordering;
import com.google.common.hash.HashCode;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-
/**
* Pojo builder class used for serdes of the output component of a query
* @since 2.3
diff --git a/core/src/main/java/net/opentsdb/query/pojo/RateOptions.java b/core/src/main/java/net/opentsdb/query/pojo/RateOptions.java
index df60da27fe..9ee68fcb03 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/RateOptions.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/RateOptions.java
@@ -14,12 +14,30 @@
// limitations under the License.
package net.opentsdb.query.pojo;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+
+import net.opentsdb.configuration.Configuration;
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.query.QueryNode;
+import net.opentsdb.query.QueryNodeConfig;
+import net.opentsdb.query.QueryNodeConfigOptions;
+import net.opentsdb.query.QueryResultId;
+import net.opentsdb.query.processor.rate.RateFactory;
+import net.opentsdb.utils.DateTime;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
@@ -27,21 +45,6 @@
import com.google.common.collect.Maps;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hasher;
-import net.opentsdb.configuration.Configuration;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.query.QueryNode;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeConfigOptions;
-import net.opentsdb.query.QueryResultId;
-import net.opentsdb.query.processor.rate.RateFactory;
-import net.opentsdb.utils.DateTime;
-
-import java.time.Duration;
-import java.time.temporal.ChronoUnit;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
/**
* Provides additional options that will be used when calculating rates. These
diff --git a/core/src/main/java/net/opentsdb/query/pojo/TagVFilter.java b/core/src/main/java/net/opentsdb/query/pojo/TagVFilter.java
index 3236dc6fd3..4331116ad5 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/TagVFilter.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/TagVFilter.java
@@ -23,11 +23,6 @@
import java.util.List;
import java.util.Map;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.opentsdb.core.Const;
import net.opentsdb.core.TSDB;
@@ -37,8 +32,13 @@
import net.opentsdb.utils.PluginLoader;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.hash.HashCode;
diff --git a/core/src/main/java/net/opentsdb/query/pojo/TagVLiteralOrFilter.java b/core/src/main/java/net/opentsdb/query/pojo/TagVLiteralOrFilter.java
index a89904767c..3f3f9bca1b 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/TagVLiteralOrFilter.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/TagVLiteralOrFilter.java
@@ -24,6 +24,7 @@
import net.opentsdb.utils.StringUtils;
import com.fasterxml.jackson.annotation.JsonIgnore;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
diff --git a/core/src/main/java/net/opentsdb/query/pojo/TagVNotKeyFilter.java b/core/src/main/java/net/opentsdb/query/pojo/TagVNotKeyFilter.java
index 0461c96fb7..7eacd412bb 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/TagVNotKeyFilter.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/TagVNotKeyFilter.java
@@ -16,14 +16,15 @@
import java.util.Map;
-import com.google.common.base.Objects;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
import net.opentsdb.query.filter.NotFilter;
import net.opentsdb.query.filter.QueryFilter;
import net.opentsdb.query.filter.TagKeyLiteralOrFilter;
+import com.google.common.base.Objects;
+import com.stumbleupon.async.Deferred;
+
public class TagVNotKeyFilter extends TagVFilter {
/** Name of this filter */
final public static String FILTER_NAME = "not_key";
diff --git a/core/src/main/java/net/opentsdb/query/pojo/TagVNotLiteralOrFilter.java b/core/src/main/java/net/opentsdb/query/pojo/TagVNotLiteralOrFilter.java
index 3d9bed23e8..91d0741736 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/TagVNotLiteralOrFilter.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/TagVNotLiteralOrFilter.java
@@ -19,15 +19,17 @@
import java.util.Map;
import java.util.Set;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.google.common.base.Objects;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
import net.opentsdb.query.filter.NotFilter;
import net.opentsdb.query.filter.QueryFilter;
import net.opentsdb.query.filter.TagValueLiteralOrFilter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import com.google.common.base.Objects;
+import com.stumbleupon.async.Deferred;
+
/**
* A filter that lets the user list one or more explicit strings that should
* NOT be included in a result set for aggregation.
diff --git a/core/src/main/java/net/opentsdb/query/pojo/TagVRegexFilter.java b/core/src/main/java/net/opentsdb/query/pojo/TagVRegexFilter.java
index 72b22429c0..e86d230e4f 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/TagVRegexFilter.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/TagVRegexFilter.java
@@ -17,13 +17,14 @@
import java.util.Map;
import java.util.regex.Pattern;
-import com.google.common.base.Objects;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
import net.opentsdb.query.filter.QueryFilter;
import net.opentsdb.query.filter.TagValueRegexFilter;
+import com.google.common.base.Objects;
+import com.stumbleupon.async.Deferred;
+
/**
* A filter that allows for regular expression matching on tag values.
* @since 2.2
diff --git a/core/src/main/java/net/opentsdb/query/pojo/TagVWildcardFilter.java b/core/src/main/java/net/opentsdb/query/pojo/TagVWildcardFilter.java
index 0296ed0881..cf74c5d89b 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/TagVWildcardFilter.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/TagVWildcardFilter.java
@@ -17,14 +17,16 @@
import java.util.Arrays;
import java.util.Map;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.google.common.base.Objects;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
import net.opentsdb.query.filter.QueryFilter;
import net.opentsdb.query.filter.TagValueWildcardFilter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import com.google.common.base.Objects;
+import com.stumbleupon.async.Deferred;
+
/**
* Performs basic wild card searching. It supports prefix, postfix, infix,
* multi-infix and case insensitive matching. The wildcard character is
diff --git a/core/src/main/java/net/opentsdb/query/pojo/TimeSeriesQuery.java b/core/src/main/java/net/opentsdb/query/pojo/TimeSeriesQuery.java
index 9593f1ec4e..5d3f8cff3f 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/TimeSeriesQuery.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/TimeSeriesQuery.java
@@ -14,34 +14,14 @@
// limitations under the License.
package net.opentsdb.query.pojo;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
-import com.google.common.base.Objects;
-import com.google.common.base.Strings;
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Ordering;
-import com.google.common.collect.Sets;
-import com.google.common.hash.HashCode;
-import com.google.common.hash.Hasher;
-import com.google.common.hash.Hashing;
+import java.util.*;
import net.opentsdb.configuration.Configuration;
import net.opentsdb.core.Const;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.TimeSeriesGroupId;
import net.opentsdb.data.types.numeric.NumericType;
-import net.opentsdb.query.DefaultTimeSeriesDataSourceConfig;
-import net.opentsdb.query.QueryMode;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.SemanticQuery;
+import net.opentsdb.query.*;
import net.opentsdb.query.QueryFillPolicy.FillWithRealPolicy;
import net.opentsdb.query.execution.serdes.JsonV2QuerySerdesOptions;
import net.opentsdb.query.filter.ChainFilter;
@@ -59,15 +39,27 @@
import net.opentsdb.query.processor.rate.RateConfig;
import net.opentsdb.utils.JSON;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Ordering;
+import com.google.common.collect.Sets;
+import com.google.common.hash.HashCode;
+import com.google.common.hash.Hasher;
+import com.google.common.hash.Hashing;
+
/**
* Pojo builder class used for serdes of the expression query
* @since 2.3
@@ -75,7 +67,7 @@
@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonDeserialize(builder = TimeSeriesQuery.Builder.class)
-public class TimeSeriesQuery extends Validatable
+public class TimeSeriesQuery extends Validatable
implements Comparable{
private static final Logger LOG = LoggerFactory.getLogger(TimeSeriesQuery.class);
diff --git a/core/src/main/java/net/opentsdb/query/pojo/Timespan.java b/core/src/main/java/net/opentsdb/query/pojo/Timespan.java
index 248b8aa2c3..0a89f73ca2 100644
--- a/core/src/main/java/net/opentsdb/query/pojo/Timespan.java
+++ b/core/src/main/java/net/opentsdb/query/pojo/Timespan.java
@@ -16,13 +16,23 @@
import java.util.List;
+
+import net.opentsdb.core.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.data.MillisecondTimeStamp;
+import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.types.numeric.aggregators.NumericAggregatorFactory;
+import net.opentsdb.query.SliceConfig;
+import net.opentsdb.utils.DateTime;
+
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
@@ -31,14 +41,6 @@
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
-import net.opentsdb.core.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.data.MillisecondTimeStamp;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.types.numeric.aggregators.NumericAggregatorFactory;
-import net.opentsdb.query.SliceConfig;
-import net.opentsdb.utils.DateTime;
-
/**
* Pojo builder class used for serdes of the timespan component of a query
* @since 2.3
diff --git a/core/src/main/java/net/opentsdb/query/processor/BaseQueryNodeFactory.java b/core/src/main/java/net/opentsdb/query/processor/BaseQueryNodeFactory.java
index e86c8f168e..73874fd3ce 100644
--- a/core/src/main/java/net/opentsdb/query/processor/BaseQueryNodeFactory.java
+++ b/core/src/main/java/net/opentsdb/query/processor/BaseQueryNodeFactory.java
@@ -14,27 +14,24 @@
// limitations under the License.
package net.opentsdb.query.processor;
-import com.google.common.collect.Maps;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Deferred;
+import java.util.Collection;
+import java.util.Map;
+
+
import net.opentsdb.core.BaseTSDBPlugin;
import net.opentsdb.core.TSDB;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.data.TimeSeriesDataType;
import net.opentsdb.data.TypedTimeSeriesIterator;
-import net.opentsdb.query.AbstractQueryNode;
-import net.opentsdb.query.BaseQueryNodeConfig;
-import net.opentsdb.query.QueryIteratorFactory;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResult;
+import net.opentsdb.query.*;
import net.opentsdb.query.plan.QueryPlanner;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Collection;
-import java.util.Map;
+import com.google.common.collect.Maps;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Deferred;
/**
* A simple base class for implementing {@link QueryNodeFactory}s. It maintains
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantile.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantile.java
index 0b22629fb5..1673ec67d0 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantile.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantile.java
@@ -15,15 +15,20 @@
package net.opentsdb.query.processor.bucketquantile;
import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.regex.Matcher;
+
+import net.opentsdb.data.TimeSeries;
+import net.opentsdb.data.TimeSeriesId;
+import net.opentsdb.data.TimeSpecification;
+import net.opentsdb.exceptions.QueryDownstreamException;
+import net.opentsdb.pools.*;
+import net.opentsdb.query.*;
+import net.opentsdb.rollup.RollupConfig;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,24 +39,6 @@
import com.stumbleupon.async.Callback;
import com.stumbleupon.async.Deferred;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSpecification;
-import net.opentsdb.exceptions.QueryDownstreamException;
-import net.opentsdb.pools.ArrayObjectPool;
-import net.opentsdb.pools.DoubleArrayPool;
-import net.opentsdb.pools.IntArrayPool;
-import net.opentsdb.pools.LongArrayPool;
-import net.opentsdb.pools.ObjectPool;
-import net.opentsdb.query.AbstractQueryNode;
-import net.opentsdb.query.QueryNode;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResult;
-import net.opentsdb.query.QueryResultId;
-import net.opentsdb.rollup.RollupConfig;
-
/**
* Quantile node that expects a certain number of histogram metrics and once
* all are received, joins and creates a result set for computing quantiles
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileConfig.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileConfig.java
index ccff95321e..3b2eb29810 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileConfig.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileConfig.java
@@ -18,9 +18,16 @@
import java.util.List;
import java.util.regex.Pattern;
+import net.opentsdb.common.Const;
+import net.opentsdb.core.TSDB;
+import net.opentsdb.query.BaseQueryNodeConfigWithInterpolators;
+import net.opentsdb.query.DefaultQueryResultId;
+import net.opentsdb.query.QueryResultId;
+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
@@ -28,12 +35,6 @@
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
-import net.opentsdb.common.Const;
-import net.opentsdb.core.TSDB;
-import net.opentsdb.query.BaseQueryNodeConfigWithInterpolators;
-import net.opentsdb.query.DefaultQueryResultId;
-import net.opentsdb.query.QueryResultId;
-
/**
* A complex config class for the bucket quantile node since there are a lot of
* tweaks folks can make. We'll try to choose useful defaults.
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileFactory.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileFactory.java
index 80bb001b60..65c078ab58 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileFactory.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileFactory.java
@@ -17,10 +17,6 @@
import java.util.List;
import java.util.Set;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Strings;
-import com.stumbleupon.async.Deferred;
import net.opentsdb.core.TSDB;
import net.opentsdb.exceptions.QueryExecutionException;
@@ -30,6 +26,12 @@
import net.opentsdb.query.plan.QueryPlanner;
import net.opentsdb.query.processor.BaseQueryNodeFactory;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import com.google.common.base.Strings;
+import com.stumbleupon.async.Deferred;
+
/**
* Factory for validating the bucket quantile nodes and setting them up by
* walking the graph to find the input node IDs and metric names.
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileIterator.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileIterator.java
index 6ae3ae0da6..330491a0b7 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileIterator.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileIterator.java
@@ -14,13 +14,13 @@
// limitations under the License.
package net.opentsdb.query.processor.bucketquantile;
-import com.google.common.collect.Maps;
-
import net.opentsdb.data.BaseTimeSeriesStringId;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.data.TimeSeriesId;
import net.opentsdb.data.TimeSeriesStringId;
+import com.google.common.collect.Maps;
+
/**
* Base implementation for the iterators.
*
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericArrayIterator.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericArrayIterator.java
index 01a9aca926..66ad32edd7 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericArrayIterator.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericArrayIterator.java
@@ -17,22 +17,18 @@
import java.util.Collection;
import java.util.Optional;
+import net.opentsdb.data.*;
+import net.opentsdb.data.types.numeric.NumericArrayType;
+
import com.google.common.collect.Lists;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-import net.opentsdb.data.types.numeric.NumericArrayType;
-
/**
* Simple iterator that wraps up the quantiles array and returns it.
*
* @since 3.0
*/
-public class BucketQuantileNumericArrayIterator extends BucketQuantileIterator
+public class BucketQuantileNumericArrayIterator extends BucketQuantileIterator
implements TimeSeries,
TypedTimeSeriesIterator,
TimeSeriesValue,
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericArrayProcessor.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericArrayProcessor.java
index c50507f30e..af2f21f955 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericArrayProcessor.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericArrayProcessor.java
@@ -19,18 +19,13 @@
import java.util.List;
import java.util.Optional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
+import net.opentsdb.data.*;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.pools.PooledObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* Computes percentiles on {@link NumericArrayType} arrays.
* Notes:
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericIterator.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericIterator.java
index a63abca0aa..2281524cba 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericIterator.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericIterator.java
@@ -17,27 +17,21 @@
import java.util.Collection;
import java.util.Optional;
+import net.opentsdb.data.*;
+import net.opentsdb.data.types.numeric.MutableNumericValue;
+import net.opentsdb.data.types.numeric.NumericType;
+
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.BaseTimeSeriesStringId;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-import net.opentsdb.data.types.numeric.MutableNumericValue;
-import net.opentsdb.data.types.numeric.NumericType;
-
/**
* Simple iterator that wraps up the quantiles array and returns it.
*
* @since 3.0
*/
-public class BucketQuantileNumericIterator extends BucketQuantileIterator
- implements TimeSeries,
+public class BucketQuantileNumericIterator extends BucketQuantileIterator
+ implements TimeSeries,
TypedTimeSeriesIterator {
private final BucketQuantileNumericProcessor processor;
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericProcessor.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericProcessor.java
index de4dbe3be7..b3bb5b375d 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericProcessor.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericProcessor.java
@@ -18,20 +18,14 @@
import java.util.List;
import java.util.Optional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import net.opentsdb.data.MillisecondTimeStamp;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.pools.PooledObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* Computes quantiles on {@link NumericType} values.
* Notes:
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericSummaryIterator.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericSummaryIterator.java
index b9b693d053..d224c48ce8 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericSummaryIterator.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericSummaryIterator.java
@@ -17,8 +17,6 @@
import java.util.Collection;
import java.util.Optional;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
import net.opentsdb.data.TimeSeries;
import net.opentsdb.data.TimeSeriesDataType;
@@ -27,6 +25,9 @@
import net.opentsdb.data.types.numeric.MutableNumericSummaryValue;
import net.opentsdb.data.types.numeric.NumericSummaryType;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+
/**
* Simple iterator that wraps up the quantiles array and returns it.
*
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericSummaryProcessor.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericSummaryProcessor.java
index ea6082b861..6a177fe7a0 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericSummaryProcessor.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileNumericSummaryProcessor.java
@@ -19,21 +19,16 @@
import java.util.List;
import java.util.Optional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import net.opentsdb.data.MillisecondTimeStamp;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.NumericSummaryType;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.pools.PooledObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* Computes percentiles on {@link NumericSummaryType} values.
* Notes:
diff --git a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileResult.java b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileResult.java
index b1f638e8f6..de4e488786 100644
--- a/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileResult.java
+++ b/core/src/main/java/net/opentsdb/query/processor/bucketquantile/BucketQuantileResult.java
@@ -16,32 +16,12 @@
import java.io.IOException;
import java.time.temporal.ChronoUnit;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NavigableMap;
-import java.util.TreeMap;
+import java.util.*;
import java.util.Map.Entry;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Callback;
-import com.stumbleupon.async.Deferred;
-import gnu.trove.iterator.TLongObjectIterator;
-import gnu.trove.map.TLongObjectMap;
-import gnu.trove.map.hash.TLongObjectHashMap;
import net.opentsdb.common.Const;
-import net.opentsdb.data.BaseTimeSeriesList;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesByteId;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesStringId;
-import net.opentsdb.data.TimeSpecification;
+import net.opentsdb.data.*;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.data.types.numeric.NumericSummaryType;
import net.opentsdb.data.types.numeric.NumericType;
@@ -50,8 +30,19 @@
import net.opentsdb.query.QueryResult;
import net.opentsdb.query.QueryResultId;
import net.opentsdb.rollup.RollupConfig;
-import net.opentsdb.utils.XXHash;
import net.opentsdb.utils.Deferreds;
+import net.opentsdb.utils.XXHash;
+
+import gnu.trove.iterator.TLongObjectIterator;
+import gnu.trove.map.TLongObjectMap;
+import gnu.trove.map.hash.TLongObjectHashMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Callback;
+import com.stumbleupon.async.Deferred;
/**
* The result that joins the time series on tag set hashes so we can compute the
diff --git a/core/src/main/java/net/opentsdb/query/processor/dedup/DedupConfig.java b/core/src/main/java/net/opentsdb/query/processor/dedup/DedupConfig.java
index e766f9e346..e67d5178a0 100644
--- a/core/src/main/java/net/opentsdb/query/processor/dedup/DedupConfig.java
+++ b/core/src/main/java/net/opentsdb/query/processor/dedup/DedupConfig.java
@@ -14,9 +14,10 @@
// limitations under the License.
package net.opentsdb.query.processor.dedup;
-import com.google.common.hash.HashCode;
import net.opentsdb.query.BaseQueryNodeConfig;
+import com.google.common.hash.HashCode;
+
/**
* A configuration for handling out-of-order and de-duplication of values
* in a time series stream when the data source would emit such values.
diff --git a/core/src/main/java/net/opentsdb/query/processor/dedup/DedupNode.java b/core/src/main/java/net/opentsdb/query/processor/dedup/DedupNode.java
index 7333b426a4..d1fc21c6c7 100644
--- a/core/src/main/java/net/opentsdb/query/processor/dedup/DedupNode.java
+++ b/core/src/main/java/net/opentsdb/query/processor/dedup/DedupNode.java
@@ -14,30 +14,16 @@
// limitations under the License.
package net.opentsdb.query.processor.dedup;
-import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-import net.opentsdb.data.types.numeric.NumericType;
-import net.opentsdb.query.AbstractQueryNode;
-import net.opentsdb.query.BaseWrappedQueryResult;
-import net.opentsdb.query.QueryNode;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResult;
-import net.opentsdb.query.QueryResultId;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Optional;
-import java.util.TreeMap;
+import java.util.*;
import java.util.stream.Collectors;
+
+
+import net.opentsdb.data.*;
+import net.opentsdb.data.types.numeric.NumericType;
+import net.opentsdb.query.*;
+
+import com.google.common.reflect.TypeToken;
+
/**
* A node that handles deduplication and/or sorting of time series values
* from underlying iterators.
diff --git a/core/src/main/java/net/opentsdb/query/processor/downsample/Downsample.java b/core/src/main/java/net/opentsdb/query/processor/downsample/Downsample.java
index d5017d81ac..d0a86a0bed 100644
--- a/core/src/main/java/net/opentsdb/query/processor/downsample/Downsample.java
+++ b/core/src/main/java/net/opentsdb/query/processor/downsample/Downsample.java
@@ -22,33 +22,20 @@
import java.util.Optional;
import java.util.concurrent.CountDownLatch;
-import net.opentsdb.data.TypedTimeSeriesIterator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-
import net.opentsdb.common.Const;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesId;
-import net.opentsdb.data.TimeSpecification;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.data.types.numeric.NumericType;
-import net.opentsdb.data.ZonedNanoTimeStamp;
-import net.opentsdb.query.AbstractQueryNode;
-import net.opentsdb.query.BaseWrappedQueryResult;
-import net.opentsdb.query.QueryNode;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResult;
-import net.opentsdb.query.SemanticQuery;
+import net.opentsdb.query.*;
import net.opentsdb.query.processor.ProcessorFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+
/**
* A processing node that performs downsampling on each individual time series
* passed in as a result.
diff --git a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleConfig.java b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleConfig.java
index a5cf711607..3163188e06 100644
--- a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleConfig.java
+++ b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleConfig.java
@@ -14,17 +14,12 @@
// limitations under the License.
package net.opentsdb.query.processor.downsample;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.google.common.base.Objects;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.hash.HashCode;
+import java.time.Duration;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAmount;
+import java.util.List;
-import com.google.common.hash.Hashing;
import net.opentsdb.common.Const;
import net.opentsdb.data.MillisecondTimeStamp;
import net.opentsdb.data.TimeStamp;
@@ -34,11 +29,17 @@
import net.opentsdb.utils.DateTime;
import net.opentsdb.utils.Pair;
-import java.time.Duration;
-import java.time.ZoneId;
-import java.time.temporal.ChronoUnit;
-import java.time.temporal.TemporalAmount;
-import java.util.List;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.hash.HashCode;
+import com.google.common.hash.Hashing;
/**
* A configuration implementation for Downsampling processors.
diff --git a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleFactory.java b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleFactory.java
index 573bc616c7..a3156fc476 100644
--- a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleFactory.java
+++ b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleFactory.java
@@ -14,14 +14,10 @@
// limitations under the License.
package net.opentsdb.query.processor.downsample;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.reflect.TypeToken;
-import com.stumbleupon.async.Deferred;
+import java.util.*;
+import java.util.Map.Entry;
+
+
import net.opentsdb.configuration.ConfigurationCallback;
import net.opentsdb.configuration.ConfigurationEntrySchema;
import net.opentsdb.core.TSDB;
@@ -34,12 +30,7 @@
import net.opentsdb.data.types.numeric.NumericSummaryType;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.exceptions.QueryExecutionException;
-import net.opentsdb.query.QueryIteratorFactory;
-import net.opentsdb.query.QueryNodeConfig;
-import net.opentsdb.query.QueryNodeFactory;
-import net.opentsdb.query.QueryPipelineContext;
-import net.opentsdb.query.QueryResult;
-import net.opentsdb.query.TimeSeriesDataSourceConfig;
+import net.opentsdb.query.*;
import net.opentsdb.query.interpolation.QueryInterpolatorConfig;
import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
import net.opentsdb.query.plan.DefaultQueryPlanner;
@@ -48,16 +39,18 @@
import net.opentsdb.query.processor.downsample.DownsampleConfig.Builder;
import net.opentsdb.utils.DateTime;
import net.opentsdb.utils.Pair;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.reflect.TypeToken;
+import com.stumbleupon.async.Deferred;
/**
* Simple class for generating Downsample processors.
diff --git a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericArrayIterator.java b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericArrayIterator.java
index dd1253f39e..9b56a3eeac 100644
--- a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericArrayIterator.java
+++ b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericArrayIterator.java
@@ -17,15 +17,9 @@
import java.io.IOException;
import java.util.Optional;
-import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.Aggregator;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.NumericAccumulator;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.data.types.numeric.aggregators.NumericAggregator;
@@ -36,6 +30,8 @@
import net.opentsdb.query.QueryResult;
import net.opentsdb.query.processor.downsample.Downsample.DownsampleResult;
+import com.google.common.reflect.TypeToken;
+
/**
* A downsampler working over a numeric source array. If the source is
* the same length then we just pass it through without modifications to
diff --git a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericIterator.java b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericIterator.java
index 6465964973..531e1fc854 100644
--- a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericIterator.java
+++ b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericIterator.java
@@ -14,13 +14,12 @@
// limitations under the License.
package net.opentsdb.query.processor.downsample;
-import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import java.io.IOException;
+import java.util.Optional;
+
+
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.data.types.numeric.aggregators.NumericAggregator;
@@ -33,8 +32,7 @@
import net.opentsdb.query.interpolation.QueryInterpolatorFactory;
import net.opentsdb.query.processor.downsample.Downsample.DownsampleResult;
-import java.io.IOException;
-import java.util.Optional;
+import com.google.common.reflect.TypeToken;
/**
* Iterator that downsamples data points using an {@link net.opentsdb.data.Aggregator} following
diff --git a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericSummaryIterator.java b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericSummaryIterator.java
index ad4753c01b..2db5be61ec 100644
--- a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericSummaryIterator.java
+++ b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericSummaryIterator.java
@@ -17,14 +17,9 @@
import java.io.IOException;
import java.util.Optional;
-import com.google.common.reflect.TypeToken;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.MutableNumericSummaryValue;
import net.opentsdb.data.types.numeric.MutableNumericValue;
import net.opentsdb.data.types.numeric.NumericSummaryType;
@@ -35,6 +30,8 @@
import net.opentsdb.query.QueryResult;
import net.opentsdb.query.processor.downsample.Downsample.DownsampleResult;
+import com.google.common.reflect.TypeToken;
+
/**
* Iterator that handles summary values. Note that when the
* @since 3.0
diff --git a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericToNumericArrayIterator.java b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericToNumericArrayIterator.java
index 87768fce6a..c957db419b 100644
--- a/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericToNumericArrayIterator.java
+++ b/core/src/main/java/net/opentsdb/query/processor/downsample/DownsampleNumericToNumericArrayIterator.java
@@ -14,15 +14,15 @@
// limitations under the License.
package net.opentsdb.query.processor.downsample;
-import com.google.common.reflect.TypeToken;
+import java.time.Duration;
+import java.time.Period;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAmount;
+import java.util.Arrays;
+import java.util.Optional;
-import net.opentsdb.data.Aggregator;
-import net.opentsdb.data.TimeSeries;
-import net.opentsdb.data.TimeSeriesDataType;
-import net.opentsdb.data.TimeSeriesValue;
-import net.opentsdb.data.TimeStamp;
+import net.opentsdb.data.*;
import net.opentsdb.data.TimeStamp.Op;
-import net.opentsdb.data.TypedTimeSeriesIterator;
import net.opentsdb.data.types.numeric.NumericArrayType;
import net.opentsdb.data.types.numeric.NumericType;
import net.opentsdb.data.types.numeric.aggregators.ArrayCountFactory.ArrayCount;
@@ -33,16 +33,11 @@
import net.opentsdb.query.QueryResult;
import net.opentsdb.query.processor.downsample.Downsample.DownsampleResult;
-import java.time.Duration;
-import java.time.Period;
-import java.time.temporal.ChronoUnit;
-import java.time.temporal.TemporalAmount;
-import java.util.Arrays;
-import java.util.Optional;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.reflect.TypeToken;
+
/**
* Iterator that downsamples data points using an {@link net.opentsdb.data.Aggregator} following
* various rules:
@@ -80,7 +75,7 @@
*