You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by xv...@apache.org on 2019/07/26 19:20:52 UTC

[incubator-druid] branch opencensus-ext created (now 493f861)

This is an automated email from the ASF dual-hosted git repository.

xvrl pushed a change to branch opencensus-ext
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git.


      at 493f861  make checkstyle happy

This branch includes the following new commits:

     new 1124418  Merge remote-tracking branch 'origin/master' into confluent-master
     new 78fb4e1  add opencensus extension
     new 493f861  make checkstyle happy

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org


[incubator-druid] 02/03: add opencensus extension

Posted by xv...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xvrl pushed a commit to branch opencensus-ext
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git

commit 78fb4e1a6c3508a56823a8d0252f6e82b573f2d0
Author: Sumit Arrawatia <su...@gmail.com>
AuthorDate: Thu May 16 23:23:58 2019 -0700

    add opencensus extension
---
 distribution/pom.xml                               |   2 +
 extensions-contrib/opencensus-extensions/pom.xml   | 132 ++++++++++
 .../OpenCensusProtobufExtensionsModule.java        |  49 ++++
 .../protobuf/OpenCensusProtobufInputRowParser.java | 199 +++++++++++++++
 .../org.apache.druid.initialization.DruidModule    |  16 ++
 .../OpenCensusProtobufInputRowParserTest.java      | 267 +++++++++++++++++++++
 pom.xml                                            |   1 +
 7 files changed, 666 insertions(+)

diff --git a/distribution/pom.xml b/distribution/pom.xml
index 17d0c35..5f5228f 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -359,6 +359,8 @@
                                         <argument>org.apache.druid.extensions.contrib:druid-moving-average-query</argument>
                                         <argument>-c</argument>
                                         <argument>org.apache.druid.extensions.contrib:druid-tdigestsketch</argument>
+                                        <argument>-c</argument>
+                                        <argument>org.apache.druid.extensions.contrib:druid-opencensus-extensions</argument>
                                     </arguments>
                                 </configuration>
                             </execution>
diff --git a/extensions-contrib/opencensus-extensions/pom.xml b/extensions-contrib/opencensus-extensions/pom.xml
new file mode 100644
index 0000000..33c67ef
--- /dev/null
+++ b/extensions-contrib/opencensus-extensions/pom.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.druid.extensions.contrib</groupId>
+  <artifactId>druid-opencensus-extensions</artifactId>
+  <name>druid-opencensus-extensions</name>
+  <description>druid-opencensus-extensions</description>
+
+  <parent>
+    <artifactId>druid</artifactId>
+    <groupId>org.apache.druid</groupId>
+    <version>0.16.0-incubating-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+
+  <properties>
+    <protobuf.version>3.2.0</protobuf.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>io.opencensus</groupId>
+      <artifactId>opencensus-proto</artifactId>
+      <version>0.2.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.druid</groupId>
+      <artifactId>druid-core</artifactId>
+      <version>${project.parent.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.protobuf</groupId>
+      <artifactId>protobuf-java</artifactId>
+      <version>${protobuf.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.google.protobuf</groupId>
+      <artifactId>protobuf-java-util</artifactId>
+      <version>${protobuf.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>com.google.guava</groupId>
+          <artifactId>guava</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <!-- test -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <version>3.0.0</version>
+        <configuration>
+          <createDependencyReducedPom>false</createDependencyReducedPom>
+          <relocations>
+            <relocation>
+              <pattern>com.google.protobuf</pattern>
+              <shadedPattern>shaded.com.google.protobuf</shadedPattern>
+            </relocation>
+          </relocations>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>3.0.2</version>
+        <configuration>
+          <nonFilteredFileExtensions>
+            <nonFilteredFileExtension>desc</nonFilteredFileExtension>
+          </nonFilteredFileExtensions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <profiles>
+    <profile>
+      <id>strict</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-compiler-plugin</artifactId>
+            <configuration>
+              <compilerArgs>
+                <!-- protobuf compiler generated classes miss @Override, that is not easy to fix -->
+                <arg>-Xep:MissingOverride:WARN</arg>
+              </compilerArgs>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>
diff --git a/extensions-contrib/opencensus-extensions/src/main/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufExtensionsModule.java b/extensions-contrib/opencensus-extensions/src/main/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufExtensionsModule.java
new file mode 100644
index 0000000..39576e4
--- /dev/null
+++ b/extensions-contrib/opencensus-extensions/src/main/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufExtensionsModule.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.data.input.opencensus.protobuf;
+
+import com.fasterxml.jackson.databind.Module;
+import com.fasterxml.jackson.databind.jsontype.NamedType;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.google.inject.Binder;
+import org.apache.druid.initialization.DruidModule;
+
+import java.util.Collections;
+import java.util.List;
+
+public class OpenCensusProtobufExtensionsModule implements DruidModule
+{
+
+  @Override
+  public List<? extends Module> getJacksonModules()
+  {
+    return Collections.singletonList(
+        new SimpleModule("OpenCensusProtobufInputRowParserModule")
+            .registerSubtypes(
+                new NamedType(OpenCensusProtobufInputRowParser.class, "opencensus-protobuf")
+            )
+    );
+  }
+
+  @Override
+  public void configure(Binder binder)
+  {
+  }
+}
diff --git a/extensions-contrib/opencensus-extensions/src/main/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParser.java b/extensions-contrib/opencensus-extensions/src/main/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParser.java
new file mode 100644
index 0000000..53b447f
--- /dev/null
+++ b/extensions-contrib/opencensus-extensions/src/main/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParser.java
@@ -0,0 +1,199 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.data.input.opencensus.protobuf;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.protobuf.ByteString;
+import com.google.protobuf.InvalidProtocolBufferException;
+import io.opencensus.proto.metrics.v1.Metric;
+import io.opencensus.proto.metrics.v1.Point;
+import io.opencensus.proto.metrics.v1.TimeSeries;
+import org.apache.druid.data.input.ByteBufferInputRowParser;
+import org.apache.druid.data.input.InputRow;
+import org.apache.druid.data.input.MapBasedInputRow;
+import org.apache.druid.data.input.impl.ParseSpec;
+import org.apache.druid.java.util.common.logger.Logger;
+import org.apache.druid.java.util.common.parsers.ParseException;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class OpenCensusProtobufInputRowParser implements ByteBufferInputRowParser
+{
+  private static final Logger LOG = new Logger(OpenCensusProtobufInputRowParser.class);
+
+  private static final String SEPARATOR = "-";
+  public static final String NAME = "name";
+  public static final String VALUE = "value";
+  public static final String TIMESTAMP_COLUMN = "timestamp";
+  private final ParseSpec parseSpec;
+  private final List<String> dimensions;
+
+  @JsonCreator
+  public OpenCensusProtobufInputRowParser(
+      @JsonProperty("parseSpec") ParseSpec parseSpec
+  )
+  {
+    this.parseSpec = parseSpec;
+    this.dimensions = parseSpec.getDimensionsSpec().getDimensionNames();
+    LOG.info("Creating Open Census Protobuf parser with spec:" + parseSpec);
+  }
+
+  @Override
+  public ParseSpec getParseSpec()
+  {
+    return parseSpec;
+  }
+
+  @Override
+  public OpenCensusProtobufInputRowParser withParseSpec(ParseSpec parseSpec)
+  {
+    return new OpenCensusProtobufInputRowParser(parseSpec);
+  }
+
+  @Override
+  public List<InputRow> parseBatch(ByteBuffer input)
+  {
+
+    Metric metric;
+    try {
+      metric = Metric.parseFrom(ByteString.copyFrom(input));
+    }
+    catch (InvalidProtocolBufferException e) {
+      throw new ParseException(e, "Protobuf message could not be parsed");
+    }
+
+    final List<String> dimensions;
+
+    if (!this.dimensions.isEmpty()) {
+      dimensions = this.dimensions;
+    } else {
+      Set<String> recordDimensions = metric.getMetricDescriptor().getLabelKeysList().stream()
+          .map(s -> s.getKey())
+          .collect(Collectors.toSet());
+      recordDimensions.add(NAME);
+      recordDimensions.add(VALUE);
+
+
+      dimensions = Lists.newArrayList(
+          Sets.difference(recordDimensions, parseSpec.getDimensionsSpec().getDimensionExclusions())
+      );
+    }
+
+    // Flatten out the OpenCensus record into druid rows.
+    List<InputRow> rows = new ArrayList<>();
+    for (TimeSeries ts : metric.getTimeseriesList()) {
+
+      HashMap<String, Object> labels = new HashMap<>();
+
+      // Add labels to record.
+      for (int i = 0; i < metric.getMetricDescriptor().getLabelKeysCount(); i++) {
+        labels.put(metric.getMetricDescriptor().getLabelKeys(i).getKey(), ts.getLabelValues(i).getValue());
+      }
+
+      // One row per timeseries- point.
+      for (Point point : ts.getPointsList()) {
+        // Time in millis
+        labels.put(TIMESTAMP_COLUMN, point.getTimestamp().getSeconds() * 1000);
+
+        switch (point.getValueCase()) {
+          case DOUBLE_VALUE:
+            HashMap<String, Object> doubleGauge = new HashMap<>();
+            doubleGauge.putAll(labels);
+            doubleGauge.put(NAME, metric.getMetricDescriptor().getName());
+            doubleGauge.put(VALUE, point.getDoubleValue());
+            rows.add(new MapBasedInputRow(
+                parseSpec.getTimestampSpec().extractTimestamp(doubleGauge),
+                dimensions,
+                doubleGauge
+            ));
+            break;
+          case INT64_VALUE:
+            HashMap<String, Object> intGauge = new HashMap<>();
+            intGauge.putAll(labels);
+            intGauge.put(VALUE, point.getInt64Value());
+            intGauge.put(NAME, metric.getMetricDescriptor().getName());
+            rows.add(new MapBasedInputRow(
+                parseSpec.getTimestampSpec().extractTimestamp(intGauge),
+                dimensions,
+                intGauge
+            ));
+            break;
+          case SUMMARY_VALUE:
+            // count
+            HashMap<String, Object> summaryCount = new HashMap<>();
+            summaryCount.putAll(labels);
+            summaryCount.put(NAME, metric.getMetricDescriptor().getName() + SEPARATOR + "count");
+            summaryCount.put(VALUE, point.getSummaryValue().getCount().getValue());
+            rows.add(new MapBasedInputRow(
+                parseSpec.getTimestampSpec().extractTimestamp(summaryCount),
+                dimensions,
+                summaryCount
+            ));
+
+            // sum
+            HashMap<String, Object> summarySum = new HashMap<>();
+            summarySum.putAll(labels);
+            summarySum.put(NAME, metric.getMetricDescriptor().getName() + SEPARATOR + "sum");
+            summarySum.put(VALUE, point.getSummaryValue().getSnapshot().getSum().getValue());
+            rows.add(new MapBasedInputRow(
+                parseSpec.getTimestampSpec().extractTimestamp(summarySum),
+                dimensions,
+                summarySum
+            ));
+
+            // TODO : Do we put percentiles into druid ?
+            break;
+          case DISTRIBUTION_VALUE:
+            // count
+            HashMap<String, Object> distCount = new HashMap<>();
+            distCount.put(NAME, metric.getMetricDescriptor().getName() + SEPARATOR + "count");
+            distCount.put(VALUE, point.getDistributionValue().getCount());
+            rows.add(new MapBasedInputRow(
+                parseSpec.getTimestampSpec().extractTimestamp(distCount),
+                dimensions,
+                distCount
+            ));
+
+            // sum
+            HashMap<String, Object> distSum = new HashMap<>();
+            distSum.put(NAME, metric.getMetricDescriptor().getName() + SEPARATOR + "sum");
+            distSum.put(VALUE, point.getDistributionValue().getSum());
+            rows.add(new MapBasedInputRow(
+                parseSpec.getTimestampSpec().extractTimestamp(distSum),
+                dimensions,
+                distSum
+            ));
+            // TODO: How to handle buckets ?
+            break;
+        }
+      }
+    }
+    return rows;
+  }
+
+}
diff --git a/extensions-contrib/opencensus-extensions/src/main/resources/META-INF/services/org.apache.druid.initialization.DruidModule b/extensions-contrib/opencensus-extensions/src/main/resources/META-INF/services/org.apache.druid.initialization.DruidModule
new file mode 100755
index 0000000..54b4400
--- /dev/null
+++ b/extensions-contrib/opencensus-extensions/src/main/resources/META-INF/services/org.apache.druid.initialization.DruidModule
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+org.apache.druid.data.input.opencensus.protobuf.OpenCensusProtobufExtensionsModule
\ No newline at end of file
diff --git a/extensions-contrib/opencensus-extensions/src/test/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParserTest.java b/extensions-contrib/opencensus-extensions/src/test/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParserTest.java
new file mode 100644
index 0000000..8e55755
--- /dev/null
+++ b/extensions-contrib/opencensus-extensions/src/test/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParserTest.java
@@ -0,0 +1,267 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.data.input.opencensus.protobuf;
+
+import com.google.common.collect.Lists;
+import com.google.protobuf.DoubleValue;
+import com.google.protobuf.Int64Value;
+import com.google.protobuf.Timestamp;
+import io.opencensus.proto.metrics.v1.LabelKey;
+import io.opencensus.proto.metrics.v1.LabelValue;
+import io.opencensus.proto.metrics.v1.Metric;
+import io.opencensus.proto.metrics.v1.MetricDescriptor;
+import io.opencensus.proto.metrics.v1.Point;
+import io.opencensus.proto.metrics.v1.SummaryValue;
+import io.opencensus.proto.metrics.v1.TimeSeries;
+import io.opencensus.proto.resource.v1.Resource;
+import org.apache.druid.data.input.InputRow;
+import org.apache.druid.data.input.impl.DimensionsSpec;
+import org.apache.druid.data.input.impl.JSONParseSpec;
+import org.apache.druid.data.input.impl.ParseSpec;
+import org.apache.druid.data.input.impl.TimestampSpec;
+import org.apache.druid.java.util.common.parsers.JSONPathFieldSpec;
+import org.apache.druid.java.util.common.parsers.JSONPathFieldType;
+import org.apache.druid.java.util.common.parsers.JSONPathSpec;
+import org.joda.time.DateTime;
+import org.joda.time.chrono.ISOChronology;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import java.io.ByteArrayOutputStream;
+import java.nio.ByteBuffer;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+public class OpenCensusProtobufInputRowParserTest
+{
+  @Rule
+  public ExpectedException expectedException = ExpectedException.none();
+
+  private ParseSpec parseSpec;
+
+  @Before
+  public void setUp()
+  {
+    parseSpec = new JSONParseSpec(
+        new TimestampSpec("timestamp", "millis", null),
+        new DimensionsSpec(null, null, null),
+        new JSONPathSpec(
+            true,
+            Lists.newArrayList(
+                new JSONPathFieldSpec(JSONPathFieldType.ROOT, "name", ""),
+                new JSONPathFieldSpec(JSONPathFieldType.ROOT, "value", ""),
+                new JSONPathFieldSpec(JSONPathFieldType.ROOT, "foo_key", "")
+            )
+        ), null
+    );
+
+  }
+
+
+  @Test
+  public void testGaugeParse() throws Exception
+  {
+
+    //configure parser with desc file
+    OpenCensusProtobufInputRowParser parser = new OpenCensusProtobufInputRowParser(parseSpec);
+
+    DateTime dateTime = new DateTime(2019, 07, 12, 9, 30, ISOChronology.getInstanceUTC());
+
+    Timestamp timestamp = Timestamp.newBuilder().setSeconds(dateTime.getMillis() / 1000)
+        .setNanos((int) ((dateTime.getMillis() % 1000) * 1000000)).build();
+
+    System.out.println(timestamp.getSeconds() * 1000);
+
+    Metric d = doubleGaugeMetric(timestamp);
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    d.writeTo(out);
+
+    InputRow row = parser.parseBatch(ByteBuffer.wrap(out.toByteArray())).get(0);
+    assertEquals(dateTime.getMillis(), row.getTimestampFromEpoch());
+
+    assertDimensionEquals(row, "name", "metric_gauge_double");
+    assertDimensionEquals(row, "foo_key", "foo_value");
+
+
+    assertEquals(2000, row.getMetric("value").doubleValue(), 0.0);
+  }
+
+  @Test
+  public void testSummaryParse() throws Exception
+  {
+    //configure parser with desc file
+    OpenCensusProtobufInputRowParser parser = new OpenCensusProtobufInputRowParser(parseSpec);
+
+    DateTime dateTime = new DateTime(2019, 07, 12, 9, 30, ISOChronology.getInstanceUTC());
+
+    Timestamp timestamp = Timestamp.newBuilder().setSeconds(dateTime.getMillis() / 1000)
+        .setNanos((int) ((dateTime.getMillis() % 1000) * 1000000)).build();
+
+    Metric d = summaryMetric(timestamp);
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    d.writeTo(out);
+
+    List<InputRow> rows = parser.parseBatch(ByteBuffer.wrap(out.toByteArray()));
+
+    assertEquals(2, rows.size());
+
+    InputRow row = rows.get(0);
+    assertEquals(dateTime.getMillis(), row.getTimestampFromEpoch());
+    assertDimensionEquals(row, "name", "metric_summary-count");
+    assertDimensionEquals(row, "foo_key", "foo_value");
+    assertEquals(40, row.getMetric("value").doubleValue(), 0.0);
+
+    row = rows.get(1);
+    assertEquals(dateTime.getMillis(), row.getTimestampFromEpoch());
+    assertDimensionEquals(row, "name", "metric_summary-sum");
+    assertDimensionEquals(row, "foo_key", "foo_value");
+    assertEquals(10, row.getMetric("value").doubleValue(), 0.0);
+
+  }
+
+  private void assertDimensionEquals(InputRow row, String dimension, Object expected)
+  {
+    List<String> values = row.getDimension(dimension);
+
+    assertEquals(1, values.size());
+    assertEquals(expected, values.get(0));
+  }
+
+  private Metric doubleGaugeMetric(Timestamp timestamp)
+  {
+    Metric dist = Metric.newBuilder()
+        .setMetricDescriptor(
+            MetricDescriptor.newBuilder()
+                .setName("metric_gauge_double")
+                .setDescription("metric_gauge_double_description")
+                .setUnit("ms")
+                .setType(
+                    MetricDescriptor.Type.GAUGE_DOUBLE)
+                .addLabelKeys(
+                    LabelKey.newBuilder()
+                        .setKey("foo_key")
+                        .build())
+                .build())
+        .setResource(
+            Resource.newBuilder()
+                .setType("env")
+                .putAllLabels(Collections.singletonMap("env_key", "env_val"))
+                .build())
+        .addTimeseries(
+            TimeSeries.newBuilder()
+                .setStartTimestamp(timestamp)
+                .addLabelValues(
+                    LabelValue.newBuilder()
+                        .setHasValue(true)
+                        .setValue("foo_value")
+                        .build())
+                .addPoints(
+                    Point.newBuilder()
+                        .setTimestamp(timestamp)
+                        .setDoubleValue(2000)
+                        .build())
+                .build())
+        .build();
+
+    return dist;
+  }
+
+
+  private Metric summaryMetric(Timestamp timestamp)
+  {
+
+    SummaryValue.Snapshot snapshot = SummaryValue.Snapshot.newBuilder()
+        .setSum(DoubleValue.newBuilder().setValue(10).build())
+        .addPercentileValues(SummaryValue.Snapshot.ValueAtPercentile.newBuilder()
+            .setPercentile(50.0)
+            .setValue(10)
+            .build())
+        .addPercentileValues(SummaryValue.Snapshot.ValueAtPercentile.newBuilder()
+            .setPercentile(75.0)
+            .setValue(20)
+            .build())
+        .addPercentileValues(SummaryValue.Snapshot.ValueAtPercentile.newBuilder()
+            .setPercentile(95.0)
+            .setValue(30)
+            .build())
+        .addPercentileValues(SummaryValue.Snapshot.ValueAtPercentile.newBuilder()
+            .setPercentile(98.0)
+            .setValue(40)
+            .build())
+        .addPercentileValues(SummaryValue.Snapshot.ValueAtPercentile.newBuilder()
+            .setPercentile(99.0)
+            .setValue(50)
+            .build())
+        .addPercentileValues(SummaryValue.Snapshot.ValueAtPercentile.newBuilder()
+            .setPercentile(99.9)
+            .setValue(60)
+            .build())
+        .build();
+
+
+    SummaryValue summaryValue = SummaryValue.newBuilder()
+        .setCount(Int64Value.newBuilder().setValue(40).build())
+        .setSnapshot(snapshot)
+        .build();
+
+
+    Metric dist = Metric.newBuilder()
+        .setMetricDescriptor(
+            MetricDescriptor.newBuilder()
+                .setName("metric_summary")
+                .setDescription("metric_summary_description")
+                .setUnit("ms")
+                .setType(
+                    MetricDescriptor.Type.SUMMARY)
+                .addLabelKeys(
+                    LabelKey.newBuilder()
+                        .setKey("foo_key")
+                        .build())
+                .build())
+        .setResource(
+            Resource.newBuilder()
+                .setType("env")
+                .putAllLabels(Collections.singletonMap("env_key", "env_val"))
+                .build())
+        .addTimeseries(
+            TimeSeries.newBuilder()
+                .setStartTimestamp(timestamp)
+                .addLabelValues(
+                    LabelValue.newBuilder()
+                        .setHasValue(true)
+                        .setValue("foo_value")
+                        .build())
+                .addPoints(
+                    Point.newBuilder()
+                        .setTimestamp(timestamp)
+                        .setSummaryValue(summaryValue)
+                        .build())
+                .build())
+        .build();
+
+    return dist;
+  }
+
+
+}
diff --git a/pom.xml b/pom.xml
index 1a802c9..d767383 100644
--- a/pom.xml
+++ b/pom.xml
@@ -172,6 +172,7 @@
         <module>extensions-contrib/moving-average-query</module>
         <module>extensions-contrib/tdigestsketch</module>
         <module>extensions-contrib/influxdb-emitter</module>
+        <module>extensions-contrib/opencensus-extensions</module>
         <!-- distribution packaging -->
         <module>distribution</module>
     </modules>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org


[incubator-druid] 03/03: make checkstyle happy

Posted by xv...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xvrl pushed a commit to branch opencensus-ext
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git

commit 493f861f2e3590223b342690bb848f5f529f4a0a
Author: Xavier Léauté <xv...@apache.org>
AuthorDate: Fri Jul 26 12:20:23 2019 -0700

    make checkstyle happy
---
 .../OpenCensusProtobufInputRowParserTest.java       | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/extensions-contrib/opencensus-extensions/src/test/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParserTest.java b/extensions-contrib/opencensus-extensions/src/test/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParserTest.java
index 8e55755..f664ab5 100644
--- a/extensions-contrib/opencensus-extensions/src/test/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParserTest.java
+++ b/extensions-contrib/opencensus-extensions/src/test/java/org/apache/druid/data/input/opencensus/protobuf/OpenCensusProtobufInputRowParserTest.java
@@ -41,6 +41,7 @@ import org.apache.druid.java.util.common.parsers.JSONPathFieldType;
 import org.apache.druid.java.util.common.parsers.JSONPathSpec;
 import org.joda.time.DateTime;
 import org.joda.time.chrono.ISOChronology;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -51,8 +52,6 @@ import java.nio.ByteBuffer;
 import java.util.Collections;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-
 public class OpenCensusProtobufInputRowParserTest
 {
   @Rule
@@ -98,13 +97,13 @@ public class OpenCensusProtobufInputRowParserTest
     d.writeTo(out);
 
     InputRow row = parser.parseBatch(ByteBuffer.wrap(out.toByteArray())).get(0);
-    assertEquals(dateTime.getMillis(), row.getTimestampFromEpoch());
+    Assert.assertEquals(dateTime.getMillis(), row.getTimestampFromEpoch());
 
     assertDimensionEquals(row, "name", "metric_gauge_double");
     assertDimensionEquals(row, "foo_key", "foo_value");
 
 
-    assertEquals(2000, row.getMetric("value").doubleValue(), 0.0);
+    Assert.assertEquals(2000, row.getMetric("value").doubleValue(), 0.0);
   }
 
   @Test
@@ -124,19 +123,19 @@ public class OpenCensusProtobufInputRowParserTest
 
     List<InputRow> rows = parser.parseBatch(ByteBuffer.wrap(out.toByteArray()));
 
-    assertEquals(2, rows.size());
+    Assert.assertEquals(2, rows.size());
 
     InputRow row = rows.get(0);
-    assertEquals(dateTime.getMillis(), row.getTimestampFromEpoch());
+    Assert.assertEquals(dateTime.getMillis(), row.getTimestampFromEpoch());
     assertDimensionEquals(row, "name", "metric_summary-count");
     assertDimensionEquals(row, "foo_key", "foo_value");
-    assertEquals(40, row.getMetric("value").doubleValue(), 0.0);
+    Assert.assertEquals(40, row.getMetric("value").doubleValue(), 0.0);
 
     row = rows.get(1);
-    assertEquals(dateTime.getMillis(), row.getTimestampFromEpoch());
+    Assert.assertEquals(dateTime.getMillis(), row.getTimestampFromEpoch());
     assertDimensionEquals(row, "name", "metric_summary-sum");
     assertDimensionEquals(row, "foo_key", "foo_value");
-    assertEquals(10, row.getMetric("value").doubleValue(), 0.0);
+    Assert.assertEquals(10, row.getMetric("value").doubleValue(), 0.0);
 
   }
 
@@ -144,8 +143,8 @@ public class OpenCensusProtobufInputRowParserTest
   {
     List<String> values = row.getDimension(dimension);
 
-    assertEquals(1, values.size());
-    assertEquals(expected, values.get(0));
+    Assert.assertEquals(1, values.size());
+    Assert.assertEquals(expected, values.get(0));
   }
 
   private Metric doubleGaugeMetric(Timestamp timestamp)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org


[incubator-druid] 01/03: Merge remote-tracking branch 'origin/master' into confluent-master

Posted by xv...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xvrl pushed a commit to branch opencensus-ext
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git

commit 1124418d7ec3cf0858b9d23d9490029e55f132a2
Merge: 574634e 0695e48
Author: Xavier Léauté <xv...@apache.org>
AuthorDate: Wed Jul 24 15:00:55 2019 -0700

    Merge remote-tracking branch 'origin/master' into confluent-master

 .github/ISSUE_TEMPLATE/problem_report.md           |    1 +
 .github/pull_request_template.md                   |   62 +
 .github/stale.yml                                  |   99 +-
 .idea/inspectionProfiles/Druid.xml                 |   29 +-
 .travis.yml                                        |   34 +-
 CONTRIBUTING.md                                    |    4 -
 LICENSE                                            |    2 +-
 LICENSE.BINARY                                     | 1265 --------
 NOTICE                                             |   62 +-
 NOTICE.BINARY                                      |  945 +-----
 README.md                                          |    2 +-
 benchmarks/pom.xml                                 |   12 +
 .../benchmark/ExpressionAggregationBenchmark.java  |   21 +-
 .../benchmark/ExpressionSelectorBenchmark.java     |   21 +-
 .../druid/benchmark/FilterPartitionBenchmark.java  |    5 +-
 .../benchmark/FilteredAggregatorBenchmark.java     |   40 +-
 .../benchmark/GroupByTypeInterfaceBenchmark.java   |    9 +-
 .../benchmark/TopNTypeInterfaceBenchmark.java      |    9 +-
 .../benchmark/datagen/BenchmarkColumnSchema.java   |   22 +
 .../benchmark/datagen/BenchmarkSchemaInfo.java     |   11 +
 .../druid/benchmark/datagen/BenchmarkSchemas.java  |    2 +-
 .../druid/benchmark/datagen/SegmentGenerator.java  |  130 +-
 .../indexing/IncrementalIndexReadBenchmark.java    |    5 +-
 .../indexing/IndexIngestionBenchmark.java          |    3 +-
 .../benchmark/indexing/IndexMergeBenchmark.java    |    5 +-
 .../benchmark/indexing/IndexPersistBenchmark.java  |    5 +-
 .../query/CachingClusteredClientBenchmark.java     |  569 ++++
 .../druid/benchmark/query/GroupByBenchmark.java    |   61 +-
 .../druid/benchmark/query/QueryBenchmarkUtil.java  |    5 +-
 .../druid/benchmark/query/ScanBenchmark.java       |   12 +-
 .../druid/benchmark/query/SearchBenchmark.java     |   12 +-
 .../druid/benchmark/query/SelectBenchmark.java     |   10 +-
 .../benchmark/query/SerializingQueryRunner.java    |    5 +-
 .../apache/druid/benchmark/query/SqlBenchmark.java |  209 +-
 .../benchmark/query/SqlVsNativeBenchmark.java      |  173 ++
 .../druid/benchmark/query/TimeseriesBenchmark.java |   11 +-
 .../druid/benchmark/query/TopNBenchmark.java       |   11 +-
 .../query/timecompare/TimeCompareBenchmark.java    |   10 +-
 .../NewestSegmentFirstPolicyBenchmark.java         |   14 +-
 benchmarks/src/main/resources/log4j2.xml           |   32 +
 build.sh                                           |   27 +
 codestyle/checkstyle-suppressions.xml              |    3 -
 codestyle/druid-forbidden-apis.txt                 |    4 +-
 codestyle/spotbugs-exclude.xml                     |    7 -
 .../druid/collections/CombiningIterable.java       |   51 +-
 .../druid/collections/CombiningIterator.java       |   30 +-
 .../druid/collections/OrderedMergeIterator.java    |  139 -
 .../druid/collections/OrderedMergeSequence.java    |  212 --
 .../apache/druid/common/config/NullHandling.java   |    2 +-
 .../druid/common/guava/CombiningSequence.java      |   24 +-
 .../org/apache/druid/common/guava/GuavaUtils.java  |   17 +-
 .../apache/druid/data/input/FirehoseFactoryV2.java |   51 -
 .../org/apache/druid/data/input/FirehoseV2.java    |   91 -
 .../apache/druid/guice/GuiceInjectableValues.java  |    2 +-
 .../apache/druid/java/util/common/FileUtils.java   |    8 +
 .../druid/java/util/common/guava/BaseSequence.java |   29 +-
 .../java/util/common/guava/FilteredSequence.java   |    4 +-
 .../util/common/guava/FilteringAccumulator.java    |    4 +-
 .../common/guava/FilteringYieldingAccumulator.java |    4 +-
 .../druid/java/util/common/guava/Sequence.java     |   11 +-
 .../druid/java/util/common/guava/Sequences.java    |    2 +-
 .../java/util/common/guava/nary/BinaryFn.java      |   27 -
 .../common/guava/nary/SortedMergeIterator.java     |  105 -
 .../java/util/common/lifecycle/Lifecycle.java      |    6 +-
 .../druid/java/util/common/logger/Logger.java      |    5 +
 .../druid/java/util/emitter/EmittingLogger.java    |   14 +-
 .../client/response/StatusResponseHandler.java     |   17 +-
 .../org/apache/druid/math/expr/ApplyFunction.java  |   28 +-
 .../main/java/org/apache/druid/math/expr/Expr.java |  301 +-
 .../java/org/apache/druid/math/expr/ExprEval.java  |   18 +-
 .../apache/druid/math/expr/ExprListenerImpl.java   |   72 +-
 .../org/apache/druid/math/expr/ExprMacroTable.java |   17 +-
 .../java/org/apache/druid/math/expr/Function.java  |  249 +-
 .../java/org/apache/druid/math/expr/Parser.java    |  105 +-
 .../druid/metadata/DefaultPasswordProvider.java    |    2 +-
 .../org/apache/druid/timeline/TimelineLookup.java  |    3 +-
 .../druid/timeline/VersionedIntervalTimeline.java  |   65 +-
 .../partition/ImmutablePartitionHolder.java        |    4 +-
 .../druid/timeline/partition/PartitionHolder.java  |   52 +-
 .../org/apache/druid/utils/CollectionUtils.java    |   33 +
 .../java/org/apache/druid/utils/package-info.java  |   23 +
 .../apache/druid/collections/BlockingPoolTest.java |  178 +-
 .../druid/collections/CombiningIteratorTest.java   |   16 +-
 .../collections/OrderedMergeIteratorTest.java      |  190 --
 .../collections/OrderedMergeSequenceTest.java      |  350 ---
 .../druid/common/guava/ComplexSequenceTest.java    |   34 +-
 .../common/guava/nary/SortedMergeIteratorTest.java |   55 -
 .../emitter/core/ParametrizedUriEmitterTest.java   |   18 +-
 .../java/util/http/client/FriendlyServersTest.java |   14 +-
 .../java/util/http/client/JankyServersTest.java    |   15 +-
 .../apache/druid/math/expr/ApplyFunctionTest.java  |   16 +-
 .../org/apache/druid/math/expr/FunctionTest.java   |   47 +-
 .../org/apache/druid/math/expr/ParserTest.java     |   59 +-
 .../timeline/VersionedIntervalTimelineTest.java    |   32 +-
 .../partition/IntegerPartitionChunkTest.java       |   80 +-
 .../partition/StringPartitionChunkTest.java        |   86 +-
 dev/code-review/concurrency.md                     |  199 ++
 dev/committer-instructions.md                      |   55 +-
 dev/intellij-sdk-config.jpg                        |  Bin 1043813 -> 885115 bytes
 dev/teamcity.md                                    |    4 +-
 distribution/docker/docker-compose.yml             |   16 +
 distribution/pom.xml                               |   26 +-
 docs/_bin/generate-license-dependency-reports.py   |   97 +-
 docs/_bin/generate-license.py                      |  568 ++++
 docs/_redirects.json                               |   15 +-
 docs/content/configuration/index.md                |   11 +-
 docs/content/configuration/realtime.md             |   98 -
 docs/content/dependencies/zookeeper.md             |    4 +-
 docs/content/design/realtime.md                    |   80 -
 .../extensions-contrib/distinctcount.md            |    4 +-
 .../development/extensions-contrib/influx.md       |    2 +
 .../development/extensions-contrib/kafka-simple.md |   56 -
 .../extensions-contrib/materialized-view.md        |    3 +
 .../extensions-contrib/momentsketch-quantiles.md   |    6 +
 .../extensions-contrib/moving-average-query.md     |    9 +
 .../development/extensions-contrib/rabbitmq.md     |   81 -
 .../development/extensions-contrib/rocketmq.md     |   29 -
 .../extensions-contrib/tdigestsketch-quantiles.md  |    5 +
 .../extensions-core/approximate-histograms.md      |    2 +
 .../extensions-core/datasketches-hll.md            |    7 +-
 .../extensions-core/datasketches-theta.md          |   12 +
 .../extensions-core/druid-basic-security.md        |    5 +
 .../development/extensions-core/druid-lookups.md   |    1 +
 .../extensions-core/kafka-eight-firehose.md        |   54 -
 .../development/extensions-core/kafka-ingestion.md |    3 +-
 .../extensions-core/kinesis-ingestion.md           |    3 +-
 docs/content/development/extensions-core/orc.md    |    4 +
 docs/content/development/extensions.md             |    7 +-
 docs/content/development/overview.md               |    3 +-
 docs/content/ingestion/delete-data.md              |    3 +-
 docs/content/ingestion/firehose.md                 |  127 +-
 docs/content/ingestion/hadoop.md                   |    3 +-
 docs/content/ingestion/ingestion-spec.md           |    2 -
 docs/content/ingestion/native_tasks.md             |   10 +
 docs/content/ingestion/standalone-realtime.md      |   46 +
 docs/content/ingestion/stream-pull.md              |  376 ---
 docs/content/misc/math-expr.md                     |   55 +-
 docs/content/operations/api-reference.md           |   32 +-
 docs/content/operations/pull-deps.md               |   17 +-
 docs/content/querying/filters.md                   |    6 +
 docs/content/querying/granularities.md             |    9 +-
 docs/content/querying/multi-value-dimensions.md    |   28 +-
 docs/content/querying/query-context.md             |   28 +
 docs/content/querying/sql.md                       |  158 +-
 .../img/tutorial-batch-data-loader-01.png          |  Bin 99355 -> 56488 bytes
 .../img/tutorial-batch-data-loader-02.png          |  Bin 521148 -> 360295 bytes
 .../img/tutorial-batch-data-loader-03.png          |  Bin 217008 -> 137443 bytes
 .../img/tutorial-batch-data-loader-04.png          |  Bin 261225 -> 167252 bytes
 .../img/tutorial-batch-data-loader-05.png          |  Bin 256368 -> 162488 bytes
 .../img/tutorial-batch-data-loader-06.png          |  Bin 105983 -> 64301 bytes
 .../img/tutorial-batch-data-loader-07.png          |  Bin 81399 -> 46529 bytes
 .../img/tutorial-batch-data-loader-08.png          |  Bin 162397 -> 103928 bytes
 .../img/tutorial-batch-data-loader-09.png          |  Bin 107662 -> 63348 bytes
 .../img/tutorial-batch-data-loader-10.png          |  Bin 79080 -> 44516 bytes
 .../img/tutorial-batch-data-loader-11.png          |  Bin 133329 -> 83288 bytes
 .../img/tutorial-batch-submit-task-01.png          |  Bin 113916 -> 69356 bytes
 .../img/tutorial-batch-submit-task-02.png          |  Bin 136268 -> 86076 bytes
 .../tutorials/img/tutorial-compaction-01.png       |  Bin 55153 -> 35710 bytes
 .../tutorials/img/tutorial-compaction-02.png       |  Bin 279736 -> 166571 bytes
 .../tutorials/img/tutorial-compaction-03.png       |  Bin 40114 -> 26755 bytes
 .../tutorials/img/tutorial-compaction-04.png       |  Bin 312142 -> 184365 bytes
 .../tutorials/img/tutorial-compaction-05.png       |  Bin 39784 -> 26588 bytes
 .../tutorials/img/tutorial-compaction-06.png       |  Bin 351505 -> 206717 bytes
 .../tutorials/img/tutorial-compaction-07.png       |  Bin 40106 -> 26683 bytes
 .../tutorials/img/tutorial-compaction-08.png       |  Bin 43257 -> 28751 bytes
 .../content/tutorials/img/tutorial-deletion-01.png |  Bin 72062 -> 43586 bytes
 .../content/tutorials/img/tutorial-deletion-02.png |  Bin 810422 -> 439602 bytes
 .../content/tutorials/img/tutorial-deletion-03.png |  Bin 805673 -> 437304 bytes
 docs/content/tutorials/img/tutorial-kafka-01.png   |  Bin 136317 -> 85477 bytes
 docs/content/tutorials/img/tutorial-kafka-02.png   |  Bin 125452 -> 75709 bytes
 docs/content/tutorials/img/tutorial-query-01.png   |  Bin 153120 -> 100930 bytes
 docs/content/tutorials/img/tutorial-query-02.png   |  Bin 129962 -> 83369 bytes
 docs/content/tutorials/img/tutorial-query-03.png   |  Bin 106082 -> 65038 bytes
 docs/content/tutorials/img/tutorial-query-04.png   |  Bin 108331 -> 66423 bytes
 docs/content/tutorials/img/tutorial-query-05.png   |  Bin 87070 -> 51855 bytes
 docs/content/tutorials/img/tutorial-query-06.png   |  Bin 130612 -> 82211 bytes
 docs/content/tutorials/img/tutorial-query-07.png   |  Bin 125457 -> 78633 bytes
 .../tutorials/img/tutorial-quickstart-01.png       |  Bin 56955 -> 29834 bytes
 .../tutorials/img/tutorial-retention-00.png        |  Bin 138304 -> 77704 bytes
 .../tutorials/img/tutorial-retention-01.png        |  Bin 53955 -> 35171 bytes
 .../tutorials/img/tutorial-retention-02.png        |  Bin 410930 -> 240310 bytes
 .../tutorials/img/tutorial-retention-03.png        |  Bin 44144 -> 30029 bytes
 .../tutorials/img/tutorial-retention-04.png        |  Bin 67493 -> 44617 bytes
 .../tutorials/img/tutorial-retention-05.png        |  Bin 61639 -> 38992 bytes
 .../tutorials/img/tutorial-retention-06.png        |  Bin 233034 -> 137570 bytes
 docs/content/tutorials/tutorial-batch-hadoop.md    |    2 +-
 docs/content/tutorials/tutorial-delete-data.md     |    2 +-
 docs/content/tutorials/tutorial-tranquility.md     |    2 +-
 docs/img/druid-architecture.png                    |  Bin 207086 -> 134117 bytes
 docs/img/druid-column-types.png                    |  Bin 103962 -> 93363 bytes
 docs/img/druid-dataflow-2x.png                     |  Bin 141623 -> 130160 bytes
 docs/img/druid-dataflow-3.png                      |  Bin 90365 -> 71425 bytes
 docs/img/druid-manage-1.png                        |  Bin 111559 -> 80415 bytes
 docs/img/druid-production.png                      |  Bin 51195 -> 40124 bytes
 docs/img/druid-timeline.png                        |  Bin 36729 -> 24160 bytes
 docs/img/indexing_service.png                      |  Bin 48510 -> 22490 bytes
 docs/img/segmentPropagation.png                    |  Bin 64451 -> 30569 bytes
 examples/pom.xml                                   |  134 -
 .../apache/druid/examples/ExamplesDruidModule.java |   56 -
 .../twitter/TwitterSpritzerFirehoseFactory.java    |  387 ---
 .../druid/examples/wikipedia/IrcDecoder.java       |   34 -
 .../examples/wikipedia/IrcFirehoseFactory.java     |  256 --
 .../examples/wikipedia/IrcInputRowParser.java      |  107 -
 .../examples/wikipedia/WikipediaIrcDecoder.java    |  307 --
 .../org.apache.druid.initialization.DruidModule    |   16 -
 .../ambari/metrics/AmbariMetricsEmitter.java       |    3 -
 .../druid/storage/azure/AzureByteSourceTest.java   |    7 +-
 .../storage/azure/AzureDataSegmentKillerTest.java  |   24 +-
 .../storage/azure/AzureDataSegmentPullerTest.java  |   20 +-
 .../storage/azure/AzureDataSegmentPusherTest.java  |   16 +-
 .../druid/storage/azure/AzureTaskLogsTest.java     |   24 +-
 .../cloudfiles/CloudFilesByteSourceTest.java       |   25 +-
 .../cloudfiles/CloudFilesObjectApiProxyTest.java   |   21 +-
 .../distinctcount/DistinctCountTopNQueryTest.java  |    6 +-
 extensions-contrib/druid-rocketmq/pom.xml          |   58 -
 .../firehose/rocketmq/RocketMQDruidModule.java     |   50 -
 .../firehose/rocketmq/RocketMQFirehoseFactory.java |  584 ----
 .../druid/data/input/influx/InfluxParserTest.java  |   42 +-
 .../kafka-eight-simpleConsumer/pom.xml             |   89 -
 .../kafka/KafkaEightSimpleConsumerDruidModule.java |   49 -
 .../KafkaEightSimpleConsumerFirehoseFactory.java   |  350 ---
 .../druid/firehose/kafka/KafkaSimpleConsumer.java  |  390 ---
 .../org.apache.druid.initialization.DruidModule    |   16 -
 .../MaterializedViewSupervisor.java                |    4 +-
 .../MaterializedViewSupervisorSpec.java            |    1 +
 .../MaterializedViewSupervisorSpecTest.java        |   99 +-
 .../MaterializedViewSupervisorTest.java            |   65 +-
 .../MaterializedViewQueryQueryToolChest.java       |    7 +-
 .../MaterializedViewQueryRunner.java               |    5 +-
 .../materializedview/DatasourceOptimizerTest.java  |  111 +-
 .../MaterializedViewQueryTest.java                 |   36 +-
 .../momentsketch/MomentSketchModule.java           |    4 +-
 .../momentsketch/MomentSketchWrapperTest.java      |    9 +-
 .../aggregator/MomentsSketchAggregatorTest.java    |   23 +-
 .../movingaverage/MovingAverageQueryRunner.java    |   20 +-
 .../movingaverage/MovingAverageIterableTest.java   |  521 ++--
 .../movingaverage/MovingAverageQueryTest.java      |   80 +-
 .../PostAveragerAggregatorCalculatorTest.java      |   29 +-
 .../query/movingaverage/RowBucketIterableTest.java |  224 +-
 .../averagers/BaseAveragerFactoryTest.java         |   12 +-
 .../movingaverage/averagers/BaseAveragerTest.java  |   87 +-
 .../averagers/DoubleMaxAveragerFactoryTest.java    |   10 +-
 .../averagers/DoubleMaxAveragerTest.java           |   19 +-
 .../averagers/DoubleMeanAveragerFactoryTest.java   |    9 +-
 .../averagers/DoubleMeanAveragerTest.java          |   20 +-
 .../DoubleMeanAveragerWithPeriodTest.java          |   15 +-
 .../DoubleMeanNoNullAveragerFactoryTest.java       |    9 +-
 .../averagers/DoubleMeanNoNullAveragerTest.java    |   25 +-
 .../averagers/DoubleMinAveragerFactoryTest.java    |    9 +-
 .../averagers/DoubleMinAveragerTest.java           |   17 +-
 .../averagers/LongMaxAveragerFactoryTest.java      |    9 +-
 .../averagers/LongMaxAveragerTest.java             |   19 +-
 .../averagers/LongMeanAveragerFactoryTest.java     |    9 +-
 .../averagers/LongMeanAveragerTest.java            |   17 +-
 .../LongMeanNoNullAveragerFactoryTest.java         |    9 +-
 .../averagers/LongMeanNoNullAveragerTest.java      |   18 +-
 .../averagers/LongMinAveragerFactoryTest.java      |    9 +-
 .../averagers/LongMinAveragerTest.java             |   19 +-
 .../druid/emitter/opentsdb/EventConverterTest.java |   12 +-
 extensions-contrib/rabbitmq/pom.xml                |   83 -
 .../rabbitmq/JacksonifiedConnectionFactory.java    |  280 --
 .../firehose/rabbitmq/RabbitMQDruidModule.java     |   51 -
 .../firehose/rabbitmq/RabbitMQFirehoseConfig.java  |  186 --
 .../firehose/rabbitmq/RabbitMQFirehoseFactory.java |  339 ---
 .../org.apache.druid.initialization.DruidModule    |   16 -
 .../rabbitmq/RabbitMQFirehoseFactoryTest.java      |  111 -
 .../examples/rabbitmq/RabbitMQProducerMain.java    |  212 --
 .../emitter/statsd/DimensionConverterTest.java     |    9 +-
 .../druid/emitter/statsd/StatsDEmitterTest.java    |   56 +-
 extensions-contrib/tdigestsketch/pom.xml           |    2 +-
 .../tdigestsketch/TDigestSketchModule.java         |    5 +-
 .../input/thrift/ThriftInputRowParserTest.java     |   15 +-
 .../druid/segment/MapVirtualColumnGroupByTest.java |    5 +-
 .../druid/segment/MapVirtualColumnSelectTest.java  |    3 +-
 .../druid/segment/MapVirtualColumnTopNTest.java    |    5 +-
 .../data/input/AvroHadoopInputRowParserTest.java   |   13 +-
 .../data/input/AvroStreamInputRowParserTest.java   |   97 +-
 .../SchemaRegistryBasedAvroBytesDecoderTest.java   |   18 +-
 .../hll/HllSketchAggregatorFactory.java            |   44 +-
 .../hll/HllSketchBuildAggregatorFactory.java       |    6 +-
 .../hll/HllSketchMergeAggregatorFactory.java       |   14 +-
 .../datasketches/hll/HllSketchModule.java          |   12 +-
 .../hll/sql/HllSketchSqlAggregator.java            |   15 +-
 .../quantiles/DoublesSketchBuildAggregator.java    |    3 +
 .../quantiles/DoublesSketchMergeAggregator.java    |    3 +
 .../DoublesSketchMergeBufferAggregator.java        |    3 +-
 .../quantiles/DoublesSketchModule.java             |    4 +-
 .../datasketches/theta/SketchAggregator.java       |    4 +
 .../datasketches/theta/SketchHolder.java           |    6 +-
 .../datasketches/theta/SketchModule.java           |   19 +-
 .../theta/SketchToStringPostAggregator.java        |  136 +
 .../theta/oldapi/OldApiSketchModule.java           |   29 +-
 .../tuple/ArrayOfDoublesSketchBuildAggregator.java |    4 +
 .../ArrayOfDoublesSketchBuildBufferAggregator.java |    3 +
 .../tuple/ArrayOfDoublesSketchMergeAggregator.java |    3 +
 .../tuple/ArrayOfDoublesSketchModule.java          |   20 +-
 .../hll/HllSketchAggregatorFactoryTest.java        |  284 ++
 .../datasketches/hll/HllSketchAggregatorTest.java  |  278 +-
 .../hll/HllSketchMergeAggregatorFactoryTest.java   |  159 +
 .../hll/sql/HllSketchSqlAggregatorTest.java        |   47 +-
 ...ouperUsingSketchMergeAggregatorFactoryTest.java |   15 +-
 .../theta/SketchToStringPostAggregatorTest.java    |   55 +
 .../druid/guice/BloomFilterSerializersModule.java  |    6 +-
 .../query/expressions/BloomFilterExprMacro.java    |    2 +-
 .../druid/query/filter/BloomDimFilterTest.java     |   15 +-
 .../druid/query/filter/BloomKFilterTest.java       |  274 +-
 .../query/filter/sql/BloomDimFilterSqlTest.java    |    6 +
 .../druid/storage/google/GoogleByteSourceTest.java |    7 +-
 .../google/GoogleDataSegmentKillerTest.java        |   38 +-
 .../google/GoogleDataSegmentPullerTest.java        |   14 +-
 .../google/GoogleDataSegmentPusherTest.java        |   23 +-
 .../druid/storage/google/GoogleTaskLogsTest.java   |   51 +-
 .../ApproximateHistogramAggregatorFactory.java     |  111 +-
 .../histogram/ApproximateHistogramDruidModule.java |    9 +-
 ...proximateHistogramFoldingAggregatorFactory.java |   94 +-
 .../FixedBucketsHistogramAggregatorFactory.java    |   57 +-
 ...FixedBucketsHistogramQuantileSqlAggregator.java |    6 +-
 .../histogram/sql/QuantileSqlAggregator.java       |    9 +-
 .../ApproximateHistogramAggregatorTest.java        |   40 +-
 .../ApproximateHistogramGroupByQueryTest.java      |    6 +-
 .../ApproximateHistogramTopNQueryTest.java         |   16 +-
 .../FixedBucketsHistogramBufferAggregatorTest.java |   57 +-
 .../FixedBucketsHistogramGroupByQueryTest.java     |    8 +-
 .../FixedBucketsHistogramTopNQueryTest.java        |   21 +-
 ...dBucketsHistogramQuantileSqlAggregatorTest.java |   58 +-
 .../histogram/sql/QuantileSqlAggregatorTest.java   |   26 +-
 extensions-core/kafka-eight/pom.xml                |   75 -
 .../firehose/kafka/KafkaEightDruidModule.java      |   52 -
 .../firehose/kafka/KafkaEightFirehoseFactory.java  |  176 --
 .../org.apache.druid.initialization.DruidModule    |   16 -
 .../lookup/KafkaLookupExtractorFactoryTest.java    |   54 +-
 .../IncrementalPublishingKafkaIndexTaskRunner.java |   12 +-
 .../indexing/kafka/KafkaIndexTaskTuningConfig.java |    4 +
 .../indexing/kafka/supervisor/KafkaSupervisor.java |    6 +
 .../kafka/supervisor/KafkaSupervisorSpec.java      |    1 +
 .../supervisor/KafkaSupervisorTuningConfig.java    |    3 +
 .../indexing/kafka/KafkaIndexTaskClientTest.java   |  238 +-
 .../druid/indexing/kafka/KafkaIndexTaskTest.java   |   45 +-
 .../kafka/KafkaIndexTaskTuningConfigTest.java      |   12 +-
 .../kafka/supervisor/KafkaSupervisorTest.java      | 1352 +++++----
 .../KafkaSupervisorTuningConfigTest.java           |    8 +-
 .../TestModifiedKafkaIndexTaskTuningConfig.java    |    2 +
 .../kinesis/KinesisIndexTaskTuningConfig.java      |    3 +
 .../kinesis/supervisor/KinesisSupervisorSpec.java  |    1 +
 .../supervisor/KinesisSupervisorTuningConfig.java  |    3 +
 .../kinesis/KinesisIndexTaskClientTest.java        |  224 +-
 .../indexing/kinesis/KinesisIndexTaskTest.java     |  777 +++--
 .../kinesis/KinesisIndexTaskTuningConfigTest.java  |    3 +
 .../kinesis/KinesisRecordSupplierTest.java         |  379 +--
 .../indexing/kinesis/KinesisSamplerSpecTest.java   |   15 +-
 .../kinesis/supervisor/KinesisSupervisorTest.java  |  923 +++---
 .../TestModifiedKinesisIndexTaskTuningConfig.java  |    3 +
 .../lookup/NamespaceLookupExtractorFactory.java    |    2 +-
 .../OffHeapNamespaceExtractionCacheManager.java    |    2 +-
 .../namespace/UriExtractionNamespaceTest.java      |    8 +-
 .../input/orc/OrcHadoopInputRowParserTest.java     |  117 +-
 .../input/parquet/ParquetExtensionsModule.java     |    8 +-
 .../data/input/parquet/CompatParquetInputTest.java |   96 +-
 .../input/parquet/DecimalParquetInputTest.java     |   25 +-
 .../input/parquet/FlattenSpecParquetInputTest.java |   98 +-
 .../input/parquet/TimestampsParquetInputTest.java  |   11 +-
 .../data/input/parquet/WikiParquetInputTest.java   |    9 +-
 .../input/protobuf/ProtobufInputRowParserTest.java |   19 +-
 .../druid/storage/s3/S3DataSegmentPusher.java      |   13 +-
 .../org/apache/druid/storage/s3/S3TaskLogs.java    |    4 +-
 .../apache/druid/storage/s3/S3TaskLogsConfig.java  |   22 +
 .../java/org/apache/druid/storage/s3/S3Utils.java  |   23 +
 .../apache/druid/storage/s3/S3TaskLogsTest.java    |  106 +
 .../storage/s3/TestAWSCredentialsProvider.java     |   16 +-
 .../s3/TestFileSessionCredentialsProvider.java     |    9 +-
 .../query/aggregation/stats/DruidStatsModule.java  |    5 +-
 .../variance/VarianceGroupByQueryTest.java         |   18 +-
 .../variance/VarianceTimeseriesQueryTest.java      |   18 +-
 .../variance/VarianceTopNQueryTest.java            |    9 +-
 .../druid/indexer/DeterminePartitionsJob.java      |   38 +-
 .../druid/indexer/HadoopDruidIndexerConfig.java    |    5 +
 .../apache/druid/indexer/HadoopTuningConfig.java   |   14 +
 .../apache/druid/indexer/IndexGeneratorJob.java    |    2 +-
 .../druid/indexer/BatchDeltaIngestionTest.java     |    1 +
 .../indexer/DetermineHashedPartitionsJobTest.java  |    1 +
 .../druid/indexer/DeterminePartitionsJobTest.java  |    1 +
 .../indexer/HadoopDruidIndexerConfigTest.java      |    2 +
 .../druid/indexer/HadoopTuningConfigTest.java      |    2 +
 .../druid/indexer/IndexGeneratorJobTest.java       |    1 +
 .../org/apache/druid/indexer/JobHelperTest.java    |    1 +
 .../indexer/path/GranularityPathSpecTest.java      |    1 +
 .../indexing/common/SegmentLoaderFactory.java      |    2 +-
 .../druid/indexing/common/config/TaskConfig.java   |   25 +-
 .../index/RealtimeAppenderatorTuningConfig.java    |   12 +
 .../indexing/common/index/YeOldePlumberSchool.java |    2 +-
 .../task/AppenderatorDriverRealtimeIndexTask.java  |    2 +-
 .../indexing/common/task/HadoopIndexTask.java      |    3 +-
 .../druid/indexing/common/task/IndexTask.java      |   46 +-
 .../druid/indexing/common/task/KillTask.java       |    4 +
 .../task/batch/parallel/ParallelIndexSubTask.java  |    2 +-
 .../parallel/ParallelIndexSupervisorTask.java      |    1 +
 .../batch/parallel/ParallelIndexTuningConfig.java  |    4 +-
 .../druid/indexing/overlord/ForkingTaskRunner.java |   42 +-
 .../druid/indexing/overlord/RemoteTaskRunner.java  |    4 +-
 .../overlord/SingleTaskBackgroundRunner.java       |    8 +-
 .../apache/druid/indexing/overlord/TaskQueue.java  |   15 +-
 .../overlord/WorkerTaskRunnerQueryAdapter.java     |    3 +-
 .../druid/indexing/overlord/hrtr/WorkerHolder.java |    6 +-
 .../indexing/overlord/http/OverlordResource.java   |    6 +-
 .../overlord/supervisor/SupervisorManager.java     |   20 -
 .../overlord/supervisor/SupervisorResource.java    |   34 +-
 .../SeekableStreamDataSourceMetadata.java          |    8 +-
 .../SeekableStreamEndSequenceNumbers.java          |    8 +-
 .../SeekableStreamIndexTaskRunner.java             |    9 +-
 .../SeekableStreamIndexTaskTuningConfig.java       |   13 +
 .../SeekableStreamStartSequenceNumbers.java        |    8 +-
 .../supervisor/SeekableStreamSupervisor.java       |    3 +-
 .../indexing/worker/IntermediaryDataManager.java   |  331 +++
 .../druid/indexing/worker/config/WorkerConfig.java |   31 +-
 .../indexing/worker/http/ShuffleResource.java      |  122 +
 .../worker/http/TaskManagementResource.java        |    6 +-
 .../druid/indexing/worker/http/WorkerResource.java |    2 +-
 .../druid/indexing/common/TaskToolboxTest.java     |    2 +-
 .../druid/indexing/common/TestRealtimeTask.java    |    3 +-
 .../common/actions/RemoteTaskActionClientTest.java |   23 +-
 .../common/actions/SegmentListActionsTest.java     |    4 +-
 .../AppenderatorDriverRealtimeIndexTaskTest.java   |    6 +-
 .../common/task/CompactionTaskRunTest.java         |   11 +-
 .../indexing/common/task/CompactionTaskTest.java   |    6 +
 .../druid/indexing/common/task/HadoopTaskTest.java |    1 +
 .../druid/indexing/common/task/IndexTaskTest.java  |    6 +-
 .../common/task/RealtimeIndexTaskTest.java         |    7 +-
 .../druid/indexing/common/task/TaskSerdeTest.java  |    6 +-
 .../ParallelIndexSupervisorTaskKillTest.java       |    1 +
 .../ParallelIndexSupervisorTaskResourceTest.java   |    1 +
 .../ParallelIndexSupervisorTaskSerdeTest.java      |    1 +
 .../parallel/ParallelIndexSupervisorTaskTest.java  |    2 +
 .../parallel/ParallelIndexTuningConfigTest.java    |    1 +
 .../firehose/IngestSegmentFirehoseFactoryTest.java |   24 +-
 .../IngestSegmentFirehoseFactoryTimelineTest.java  |    4 +-
 .../overlord/SingleTaskBackgroundRunnerTest.java   |    1 +
 .../druid/indexing/overlord/TaskLifecycleTest.java |    9 +-
 .../overlord/supervisor/SupervisorManagerTest.java |   16 +-
 .../supervisor/SupervisorResourceTest.java         |  270 +-
 .../SeekableStreamSupervisorStateTest.java         |  113 +-
 .../IntermediaryDataManagerAutoCleanupTest.java    |  148 +
 ...ermediaryDataManagerManualAddAndDeleteTest.java |  174 ++
 .../indexing/worker/TaskAnnouncementTest.java      |    3 +-
 .../indexing/worker/WorkerTaskManagerTest.java     |    1 +
 .../indexing/worker/WorkerTaskMonitorTest.java     |    1 +
 integration-tests/README.md                        |    3 +
 .../clients/AbstractQueryResourceTestClient.java   |    3 +-
 .../clients/ClientInfoResourceTestClient.java      |    3 +-
 .../clients/CoordinatorResourceTestClient.java     |    3 +-
 .../clients/EventReceiverFirehoseTestClient.java   |    4 +-
 .../clients/OverlordResourceTestClient.java        |   11 +-
 .../testing/utils/AbstractTestQueryHelper.java     |    2 +-
 .../org/apache/druid/testing/utils/RetryUtil.java  |    4 +-
 .../java/org/testng/DruidTestRunnerFactory.java    |    4 +-
 .../druid/tests/indexer/ITUnionQueryTest.java      |    4 +-
 .../security/ITBasicAuthConfigurationTest.java     |    4 +-
 .../org/apache/druid/tests/security/ITTLSTest.java |    4 +-
 licenses.yaml                                      | 3088 +++++++++++++++++++
 licenses/APACHE2                                   |  210 ++
 licenses/bin/@babel-polyfill.MIT                   |   22 +
 licenses/bin/@types-dom4.MIT                       |   21 +
 licenses/bin/array-includes.MIT                    |   21 -
 licenses/bin/copy-to-clipboard.MIT                 |   21 +
 licenses/bin/core-js.MIT                           |   19 +
 licenses/bin/create-react-context.MIT              |   19 +
 licenses/bin/debug.MIT                             |   19 +
 licenses/bin/define-properties.MIT                 |   21 -
 licenses/bin/es-abstract.MIT                       |   21 -
 licenses/bin/es-to-primitive.MIT                   |   22 -
 licenses/bin/es6-shim.MIT                          |   26 -
 licenses/bin/es7-shim.MIT                          |   22 -
 licenses/bin/file-saver.MIT                        |   11 +
 licenses/bin/follow-redirects.MIT                  |   18 +
 licenses/bin/function-bind.MIT                     |   20 -
 licenses/bin/gud.MIT                               |   21 +
 licenses/bin/has-own-prop.MIT                      |    9 +
 licenses/bin/has-symbols.MIT                       |   21 -
 licenses/bin/has.MIT                               |   22 -
 licenses/bin/history.MIT                           |    4 +-
 licenses/bin/iconv-lite.MIT                        |   21 +
 licenses/bin/is-callable.MIT                       |   22 -
 licenses/bin/is-date-object.MIT                    |   22 -
 licenses/bin/is-regex.MIT                          |   20 -
 licenses/bin/is-stream.MIT                         |   21 +
 licenses/bin/is-symbol.MIT                         |   22 -
 licenses/bin/isarray.MIT                           |   16 +-
 licenses/bin/isomorphic-fetch.MIT                  |   21 +
 licenses/bin/javax.activation-api.CDDL11           |  362 +++
 licenses/bin/javax.annotation-api.CDDL11           |  362 +++
 licenses/bin/jersey-json.CDDL11                    |  550 ++++
 licenses/bin/js-tokens.MIT                         |   21 +
 licenses/bin/lodash.debounce.MIT                   |   47 +
 licenses/bin/lodash.get.MIT                        |   47 +
 licenses/bin/lodash.isequal.MIT                    |   47 +
 licenses/bin/loose-envify.MIT                      |   21 +
 licenses/bin/memoize-one.MIT                       |   21 +
 licenses/bin/mini-create-react-context.MIT         |   21 +
 licenses/bin/ms.MIT                                |   21 +
 licenses/bin/node-fetch.MIT                        |   22 +
 licenses/bin/normalize.css.MIT                     |   21 +
 licenses/bin/object-keys.MIT                       |   21 -
 licenses/bin/old-jaxb.CDDL11                       |  362 +++
 licenses/bin/popper.js.MIT                         |   25 +
 licenses/bin/react-lifecycles-compat.MIT           |   21 +
 licenses/bin/react-popper.MIT                      |   21 +
 licenses/bin/react-router-dom.MIT                  |   58 +-
 licenses/bin/react-router.MIT                      |   61 +-
 licenses/bin/react-splitter-layout.MIT             |   19 +
 licenses/bin/react-transition-group.BSD3           |    2 +-
 licenses/bin/regenerator-runtime.MIT               |   21 +
 licenses/bin/resize-observer-polyfill.MIT          |   21 +
 licenses/bin/safer-buffer.MIT                      |   21 +
 licenses/bin/setimmediate.MIT                      |   20 +
 licenses/bin/string-at.MIT                         |   22 -
 licenses/bin/tiny-invariant.MIT                    |   21 +
 licenses/bin/tiny-warning.MIT                      |   21 +
 licenses/bin/toggle-selection.MIT                  |   21 +
 licenses/bin/typed-styles.MIT                      |   21 +
 licenses/bin/ua-parser-js.MIT                      |    2 +-
 licenses/bin/whatwg-fetch.MIT                      |   20 +
 licenses/src/porter-stemmer.BSD3                   |   30 +
 pom.xml                                            |   18 +-
 .../collections/bitmap/BatchIteratorAdapter.java   |   58 +
 .../druid/collections/bitmap/ImmutableBitmap.java  |    9 +
 .../collections/bitmap/WrappedBitSetBitmap.java    |   12 +-
 .../bitmap/WrappedImmutableRoaringBitmap.java      |    7 +
 .../apache/druid/jackson/AggregatorsModule.java    |   18 +-
 .../org/apache/druid/query/AsyncQueryRunner.java   |    4 +-
 .../apache/druid/query/BySegmentQueryRunner.java   |    4 +-
 .../druid/query/BySegmentSkippingQueryRunner.java  |    7 +-
 .../druid/query/CPUTimeMetricQueryRunner.java      |    4 +-
 .../druid/query/ChainedExecutionQueryRunner.java   |    4 +-
 .../org/apache/druid/query/ConcatQueryRunner.java  |    5 +-
 .../apache/druid/query/DefaultQueryMetrics.java    |    6 +
 .../druid/query/FinalizeResultsQueryRunner.java    |    5 +-
 .../druid/query/FluentQueryRunnerBuilder.java      |    4 +-
 .../druid/query/GroupByMergedQueryRunner.java      |    4 +-
 .../druid/query/IntervalChunkingQueryRunner.java   |    4 +-
 .../druid/query/MetricsEmittingQueryRunner.java    |    4 +-
 .../org/apache/druid/query/NoopQueryRunner.java    |    5 +-
 .../query/PerSegmentOptimizingQueryRunner.java     |    5 +-
 .../java/org/apache/druid/query/QueryContexts.java |   61 +
 .../java/org/apache/druid/query/QueryMetrics.java  |    6 +
 .../java/org/apache/druid/query/QueryPlus.java     |    4 +-
 .../java/org/apache/druid/query/QueryRunner.java   |   12 +-
 .../org/apache/druid/query/QueryRunnerFactory.java |   30 +-
 .../org/apache/druid/query/QueryRunnerHelper.java  |   28 +-
 .../org/apache/druid/query/QueryToolChest.java     |   32 +-
 .../query/ReferenceCountingSegmentQueryRunner.java |    5 +-
 .../ReportTimelineMissingSegmentQueryRunner.java   |    8 +-
 .../main/java/org/apache/druid/query/Result.java   |    3 -
 .../apache/druid/query/ResultMergeQueryRunner.java |   29 +-
 .../org/apache/druid/query/RetryQueryRunner.java   |   10 +-
 .../apache/druid/query/SubqueryQueryRunner.java    |    5 +-
 .../org/apache/druid/query/TimewarpOperator.java   |    4 +-
 .../org/apache/druid/query/UnionQueryRunner.java   |    5 +-
 .../query/aggregation/AggregatorAdapters.java      |  389 +++
 .../druid/query/aggregation/AggregatorFactory.java |   18 +
 .../druid/query/aggregation/BufferAggregator.java  |    4 +
 .../query/aggregation/CountAggregatorFactory.java  |   13 +
 .../query/aggregation/CountVectorAggregator.java   |   66 +
 .../aggregation/DoubleSumAggregatorFactory.java    |   23 +
 .../aggregation/DoubleSumVectorAggregator.java     |   83 +
 .../aggregation/FilteredAggregatorFactory.java     |   60 +-
 .../aggregation/FilteredVectorAggregator.java      |  153 +
 .../aggregation/FloatSumAggregatorFactory.java     |   23 +
 .../aggregation/FloatSumVectorAggregator.java      |   84 +
 .../aggregation/LongSumAggregatorFactory.java      |   27 +-
 .../query/aggregation/LongSumVectorAggregator.java |   83 +
 .../query/aggregation/NoopVectorAggregator.java    |   74 +
 .../aggregation/NullableAggregatorFactory.java     |   71 +-
 .../aggregation/NullableBufferAggregator.java      |   26 +-
 .../aggregation/NullableVectorAggregator.java      |  165 ++
 .../aggregation/SimpleDoubleAggregatorFactory.java |    2 +-
 .../aggregation/SimpleFloatAggregatorFactory.java  |    2 +-
 .../aggregation/SimpleLongAggregatorFactory.java   |    2 +-
 .../aggregation/SuppressedAggregatorFactory.java   |   93 +
 .../druid/query/aggregation/VectorAggregator.java  |   86 +
 .../cardinality/CardinalityBufferAggregator.java   |   13 +-
 .../aggregation/first/StringFirstAggregator.java   |    2 +-
 .../first/StringFirstBufferAggregator.java         |    2 +-
 .../hyperloglog/HyperUniquesAggregatorFactory.java |   22 +
 .../hyperloglog/HyperUniquesBufferAggregator.java  |   30 +-
 .../aggregation/hyperloglog/HyperUniquesSerde.java |    5 +
 .../hyperloglog/HyperUniquesVectorAggregator.java  |  116 +
 .../hyperloglog/PreComputedHyperUniquesSerde.java  |    5 +-
 .../aggregation/last/StringLastAggregator.java     |    2 +-
 .../last/StringLastBufferAggregator.java           |    2 +-
 .../aggregation/post/ExpressionPostAggregator.java |   11 +-
 .../query/aggregation/post/PostAggregatorIds.java  |    3 +-
 .../query/context/ConcurrentResponseContext.java   |   45 +
 .../query/context/DefaultResponseContext.java      |   45 +
 .../druid/query/context/ResponseContext.java       |  131 +
 .../DataSourceMetadataQueryRunnerFactory.java      |    6 +-
 .../DataSourceQueryQueryToolChest.java             |    4 +-
 .../query/dimension/DefaultDimensionSpec.java      |   20 +
 .../druid/query/dimension/DimensionSpec.java       |   22 +
 .../query/dimension/VectorColumnStrategizer.java   |   41 +
 .../expression/TimestampExtractExprMacro.java      |   30 +-
 .../druid/query/expression/TrimExprMacro.java      |   16 +-
 .../druid/query/filter/ExpressionDimFilter.java    |    2 +-
 .../java/org/apache/druid/query/filter/Filter.java |   22 +
 .../druid/query/filter/IntervalDimFilter.java      |    6 +
 .../StringValueMatcherColumnSelectorStrategy.java  |   64 +-
 .../apache/druid/query/filter/ValueMatcher.java    |    5 +
 .../ValueMatcherColumnSelectorStrategyFactory.java |    2 +-
 .../filter/vector/BaseVectorValueMatcher.java      |   44 +
 .../filter/vector/BooleanVectorValueMatcher.java   |   63 +
 .../filter/vector/DoubleVectorValueMatcher.java    |  105 +
 .../filter/vector/FloatVectorValueMatcher.java     |  105 +
 .../filter/vector/LongVectorValueMatcher.java      |  105 +
 .../vector/MultiValueStringVectorValueMatcher.java |  208 ++
 .../query/filter/vector/ReadableVectorMatch.java   |   68 +
 .../SingleValueStringVectorValueMatcher.java       |  192 ++
 .../druid/query/filter/vector/VectorMatch.java     |  267 ++
 .../query/filter/vector/VectorValueMatcher.java    |   42 +
 .../VectorValueMatcherColumnStrategizer.java       |   74 +
 .../filter/vector/VectorValueMatcherFactory.java   |   31 +
 .../apache/druid/query/groupby/GroupByQuery.java   |    1 +
 .../druid/query/groupby/GroupByQueryConfig.java    |   16 +-
 .../druid/query/groupby/GroupByQueryEngine.java    |   10 +-
 .../query/groupby/GroupByQueryQueryToolChest.java  |   47 +-
 .../query/groupby/GroupByQueryRunnerFactory.java   |    6 +-
 .../groupby/RowBasedColumnSelectorFactory.java     |    3 +-
 .../epinephelinae/AbstractBufferHashGrouper.java   |   49 +-
 .../groupby/epinephelinae/AggregateResult.java     |   48 +-
 .../groupby/epinephelinae/BufferArrayGrouper.java  |  169 +-
 .../groupby/epinephelinae/BufferHashGrouper.java   |  207 +-
 .../groupby/epinephelinae/ByteBufferHashTable.java |   17 +-
 .../groupby/epinephelinae/ByteBufferKeySerde.java  |   91 +
 .../epinephelinae/CloseableGrouperIterator.java    |    5 +-
 .../groupby/epinephelinae/ConcurrentGrouper.java   |    5 +-
 .../groupby/epinephelinae/GroupByBinaryFnV2.java   |    7 +-
 .../epinephelinae/GroupByMergingQueryRunnerV2.java |    4 +-
 .../epinephelinae/GroupByQueryEngineV2.java        |  208 +-
 .../druid/query/groupby/epinephelinae/Grouper.java |    8 +-
 .../query/groupby/epinephelinae/Groupers.java      |   66 +-
 .../epinephelinae/LimitedBufferHashGrouper.java    |   40 +-
 .../epinephelinae/RowBasedGrouperHelper.java       |  570 ++--
 .../groupby/epinephelinae/SpillingGrouper.java     |   21 +-
 .../query/groupby/epinephelinae/VectorGrouper.java |   77 +
 .../vector/DoubleGroupByVectorColumnSelector.java  |   71 +
 .../vector/FloatGroupByVectorColumnSelector.java   |   69 +
 .../vector/GroupByVectorColumnSelector.java        |   37 +
 .../vector/GroupByVectorColumnStrategizer.java     |   70 +
 .../vector/LongGroupByVectorColumnSelector.java    |   70 +
 ...ngleValueStringGroupByVectorColumnSelector.java |   69 +
 .../epinephelinae/vector/VectorGroupByEngine.java  |  436 +++
 .../query/groupby/strategy/GroupByStrategy.java    |   29 +-
 .../query/groupby/strategy/GroupByStrategyV1.java  |    4 +-
 .../query/groupby/strategy/GroupByStrategyV2.java  |   42 +-
 .../query/lookup/RegisteredLookupExtractionFn.java |    2 +-
 .../SegmentMetadataQueryQueryToolChest.java        |   16 +-
 .../SegmentMetadataQueryRunnerFactory.java         |    5 +-
 .../metadata/metadata/AllColumnIncluderator.java   |    2 +
 .../metadata/metadata/ColumnIncluderator.java      |    4 -
 .../metadata/metadata/ListColumnIncluderator.java  |    4 +-
 .../metadata/metadata/NoneColumnIncluderator.java  |    2 +
 .../apache/druid/query/scan/ScanQueryEngine.java   |   23 +-
 .../query/scan/ScanQueryLimitRowIterator.java      |    4 +-
 .../druid/query/scan/ScanQueryRunnerFactory.java   |   16 +-
 .../query/search/DefaultSearchQueryMetrics.java    |    6 +
 .../apache/druid/query/search/SearchBinaryFn.java  |    7 +-
 .../query/search/SearchQueryQueryToolChest.java    |   40 +-
 .../druid/query/search/SearchQueryRunner.java      |    4 +-
 .../apache/druid/query/search/SearchStrategy.java  |    2 +-
 .../query/select/DefaultSelectQueryMetrics.java    |    6 +
 .../apache/druid/query/select/SelectBinaryFn.java  |    5 +-
 .../query/select/SelectQueryQueryToolChest.java    |   41 +-
 .../query/select/SelectQueryRunnerFactory.java     |    4 +-
 .../query/spec/SpecificSegmentQueryRunner.java     |   12 +-
 .../TimeBoundaryQueryQueryToolChest.java           |    4 +-
 .../TimeBoundaryQueryRunnerFactory.java            |    4 +-
 .../druid/query/timeseries/TimeseriesBinaryFn.java |    5 +-
 .../query/timeseries/TimeseriesQueryEngine.java    |  272 +-
 .../timeseries/TimeseriesQueryQueryToolChest.java  |   49 +-
 .../timeseries/TimeseriesQueryRunnerFactory.java   |    4 +-
 .../query/timeseries/TimeseriesResultBuilder.java  |    7 +-
 .../query/topn/AlphaNumericTopNMetricSpec.java     |    2 +-
 .../org/apache/druid/query/topn/TopNBinaryFn.java  |    4 +-
 .../apache/druid/query/topn/TopNQueryBuilder.java  |   12 +
 .../druid/query/topn/TopNQueryQueryToolChest.java  |   57 +-
 .../druid/query/topn/TopNQueryRunnerFactory.java   |    4 +-
 .../types/StringTopNColumnSelectorStrategy.java    |    3 +-
 .../query/vector/VectorCursorGranularizer.java     |  173 ++
 .../druid/segment/ColumnSelectorFactory.java       |    2 +
 .../main/java/org/apache/druid/segment/Cursor.java |    4 +-
 .../org/apache/druid/segment/CursorFactory.java    |   43 +
 .../druid/segment/DimensionDictionarySelector.java |  104 +
 .../druid/segment/DimensionHandlerUtils.java       |   78 +
 .../apache/druid/segment/DimensionSelector.java    |   78 +-
 .../druid/segment/DoubleDimensionIndexer.java      |    2 +-
 .../druid/segment/FloatDimensionIndexer.java       |    2 +-
 .../java/org/apache/druid/segment/IndexIO.java     |    2 +-
 .../apache/druid/segment/LongDimensionIndexer.java |    2 +-
 .../org/apache/druid/segment/MetricHolder.java     |    4 +
 .../QueryableIndexCursorSequenceBuilder.java       |  602 ++++
 .../druid/segment/QueryableIndexSegment.java       |    4 +-
 .../segment/QueryableIndexStorageAdapter.java      |  603 ++--
 .../segment/SingleScanTimeDimensionSelector.java   |    4 +-
 .../org/apache/druid/segment/StorageAdapter.java   |    5 +
 .../druid/segment/StringDimensionIndexer.java      |    6 +-
 .../druid/segment/StringDimensionMergerV9.java     |   42 +-
 .../org/apache/druid/segment/VirtualColumns.java   |    5 +
 .../apache/druid/segment/column/BaseColumn.java    |   14 +
 .../apache/druid/segment/column/ColumnBuilder.java |    9 +-
 .../segment/column/ColumnCapabilitiesImpl.java     |   12 +
 .../druid/segment/column/ColumnDescriptor.java     |    4 +
 .../apache/druid/segment/column/ComplexColumn.java |   52 +
 .../segment/column/DictionaryEncodedColumn.java    |   13 +
 .../apache/druid/segment/column/DoublesColumn.java |    9 +-
 .../segment/column/DoublesColumnWithNulls.java     |    8 +
 .../apache/druid/segment/column/FloatsColumn.java  |    8 +
 .../segment/column/FloatsColumnWithNulls.java      |    8 +
 .../apache/druid/segment/column/LongsColumn.java   |    8 +
 .../druid/segment/column/LongsColumnWithNulls.java |    8 +
 .../column/StringDictionaryEncodedColumn.java      |  163 +-
 .../data/BlockLayoutColumnarDoublesSerializer.java |    3 +
 .../data/BlockLayoutColumnarDoublesSupplier.java   |   65 +-
 .../data/BlockLayoutColumnarFloatsSerializer.java  |    3 +
 .../data/BlockLayoutColumnarFloatsSupplier.java    |   69 +-
 .../data/BlockLayoutColumnarLongsSerializer.java   |    3 +
 .../data/BlockLayoutColumnarLongsSupplier.java     |   52 +-
 .../druid/segment/data/ByteBufferWriter.java       |    4 +
 .../apache/druid/segment/data/ColumnarDoubles.java |   76 +-
 .../apache/druid/segment/data/ColumnarFloats.java  |   75 +-
 .../apache/druid/segment/data/ColumnarLongs.java   |   75 +-
 .../druid/segment/data/ColumnarMultiInts.java      |   10 +
 .../data/CompressedColumnarIntsSerializer.java     |    6 +-
 .../CompressedVSizeColumnarIntsSerializer.java     |    5 +-
 .../data/CompressedVSizeColumnarIntsSupplier.java  |   64 +-
 .../CompressedVSizeColumnarMultiIntsSupplier.java  |   41 +-
 .../druid/segment/data/CompressionFactory.java     |   21 +
 .../data/EntireLayoutColumnarFloatsSupplier.java   |   16 -
 .../data/EntireLayoutColumnarLongsSupplier.java    |   16 -
 .../apache/druid/segment/data/GenericIndexed.java  |    1 +
 .../druid/segment/data/GenericIndexedWriter.java   |    3 +
 .../org/apache/druid/segment/data/IndexedInts.java |   15 +
 .../data/IntermediateColumnarLongsSerializer.java  |    6 +-
 .../segment/data/LongsLongEncodingReader.java      |   13 +
 .../segment/data/LongsLongEncodingWriter.java      |    4 +
 .../apache/druid/segment/data/ReadableOffset.java  |    2 +
 .../segment/data/VSizeColumnarIntsSerializer.java  |    6 +-
 .../druid/segment/data/VSizeColumnarMultiInts.java |    6 +
 .../data/VSizeColumnarMultiIntsSerializer.java     |    4 +
 .../apache/druid/segment/data/VSizeLongSerde.java  |    9 +-
 .../org/apache/druid/segment/filter/AndFilter.java |   50 +-
 .../apache/druid/segment/filter/BoundFilter.java   |   20 +
 .../segment/filter/DimensionPredicateFilter.java   |   20 +
 .../druid/segment/filter/ExpressionFilter.java     |    2 +-
 .../org/apache/druid/segment/filter/InFilter.java  |   20 +
 .../apache/druid/segment/filter/LikeFilter.java    |   20 +
 .../org/apache/druid/segment/filter/NotFilter.java |   33 +
 .../org/apache/druid/segment/filter/OrFilter.java  |  125 +-
 .../druid/segment/filter/SelectorFilter.java       |   20 +
 .../segment/incremental/IncrementalIndex.java      |   88 +-
 .../incremental/IncrementalIndexAdapter.java       |    1 +
 .../IncrementalIndexColumnSelectorFactory.java     |    9 +-
 .../incremental/IncrementalIndexRowHolder.java     |    3 +
 .../incremental/IncrementalIndexRowIterator.java   |    7 +-
 .../IncrementalIndexStorageAdapter.java            |   34 +-
 .../incremental/OffheapIncrementalIndex.java       |    5 +
 .../incremental/OnheapIncrementalIndex.java        |    4 +-
 .../segment/serde/ComplexColumnPartSerde.java      |   18 +-
 .../apache/druid/segment/serde/ComplexMetrics.java |   12 +-
 .../serde/DictionaryEncodedColumnPartSerde.java    |   10 +-
 .../serde/DoubleNumericColumnPartSerde.java        |   37 +-
 .../serde/DoubleNumericColumnPartSerdeV2.java      |    5 +-
 .../segment/serde/FloatNumericColumnPartSerde.java |    2 +
 .../serde/FloatNumericColumnPartSerdeV2.java       |    5 +-
 .../segment/serde/LongNumericColumnPartSerde.java  |   35 +-
 .../serde/LongNumericColumnPartSerdeV2.java        |   11 +-
 .../vector/BaseDoubleVectorValueSelector.java      |   88 +
 .../vector/BaseFloatVectorValueSelector.java       |   88 +
 .../vector/BaseLongVectorValueSelector.java        |   88 +
 .../druid/segment/vector/BitmapVectorOffset.java   |  134 +
 .../druid/segment/vector/FilteredVectorOffset.java |  175 ++
 .../vector/MultiValueDimensionVectorSelector.java  |   37 +
 .../druid/segment/vector/NilVectorSelector.java    |  178 ++
 .../druid/segment/vector/NoFilterVectorOffset.java |   90 +
 .../QueryableIndexVectorColumnSelectorFactory.java |  194 ++
 .../druid/segment/vector/ReadableVectorOffset.java |   67 +
 .../vector/SingleValueDimensionVectorSelector.java |   37 +
 .../vector/VectorColumnSelectorFactory.java        |   69 +
 .../apache/druid/segment/vector/VectorCursor.java  |   76 +
 .../druid/segment/vector/VectorObjectSelector.java |   33 +
 .../apache/druid/segment/vector/VectorOffset.java  |   43 +
 .../druid/segment/vector/VectorSelectorUtils.java  |   63 +
 .../druid/segment/vector/VectorSizeInspector.java  |   39 +
 .../druid/segment/vector/VectorValueSelector.java  |   55 +
 .../druid/segment/virtual/ExpressionSelectors.java |   27 +-
 .../segment/virtual/ExpressionVirtualColumn.java   |    7 +-
 .../RowBasedExpressionColumnValueSelector.java     |    2 +-
 ...gInputCachingExpressionColumnValueSelector.java |    2 +-
 ...gInputCachingExpressionColumnValueSelector.java |    5 +-
 .../SingleStringInputDimensionSelector.java        |   44 +-
 .../druid/collections/CombiningIterableTest.java   |   41 +-
 .../druid/granularity/QueryGranularityTest.java    |    2 +-
 .../apache/druid/query/AsyncQueryRunnerTest.java   |   16 +-
 .../query/ChainedExecutionQueryRunnerTest.java     |   11 +-
 .../druid/query/DefaultQueryMetricsTest.java       |    3 +-
 .../org/apache/druid/query/DoubleStorageTest.java  |    6 +-
 .../query/IntervalChunkingQueryRunnerTest.java     |   10 +-
 .../druid/query/MultiValuedDimensionTest.java      |  151 +-
 .../apache/druid/query/QueryRunnerTestHelper.java  |   16 +-
 .../apache/druid/query/RetryQueryRunnerTest.java   |   59 +-
 .../apache/druid/query/SchemaEvolutionTest.java    |    2 +-
 .../apache/druid/query/TimewarpOperatorTest.java   |   25 +-
 .../apache/druid/query/UnionQueryRunnerTest.java   |    7 +-
 .../query/aggregation/AggregationTestHelper.java   |    9 +-
 .../query/aggregation/AggregatorUtilTest.java      |    4 +-
 .../druid/query/cache/CacheKeyBuilderTest.java     |  109 +-
 .../DataSourceMetadataQueryTest.java               |    8 +-
 .../druid/query/filter/vector/VectorMatchTest.java |  127 +
 ...GroupByLimitPushDownInsufficientBufferTest.java |   11 +-
 .../GroupByLimitPushDownMultiNodeMergeTest.java    |   11 +-
 .../query/groupby/GroupByMultiSegmentTest.java     |    5 +-
 .../query/groupby/GroupByQueryMergeBufferTest.java |   47 +-
 .../groupby/GroupByQueryRunnerFactoryTest.java     |    9 +-
 .../query/groupby/GroupByQueryRunnerTest.java      | 1009 ++++---
 .../groupby/GroupByQueryRunnerTestHelper.java      |    2 +-
 .../groupby/GroupByTimeseriesQueryRunnerTest.java  |  135 +-
 .../query/groupby/NestedQueryPushDownTest.java     |   17 +-
 .../epinephelinae/BufferArrayGrouperTest.java      |   15 +-
 .../epinephelinae/BufferHashGrouperTest.java       |   26 +-
 .../LimitedBufferHashGrouperTest.java              |   15 +-
 .../having/DimensionSelectorHavingSpecTest.java    |   81 +-
 .../druid/query/groupby/having/HavingSpecTest.java |  195 +-
 .../druid/query/metadata/SegmentAnalyzerTest.java  |    4 +-
 .../query/metadata/SegmentMetadataQueryTest.java   |   47 +-
 .../metadata/SegmentMetadataUnionQueryTest.java    |    5 +-
 .../query/scan/MultiSegmentScanQueryTest.java      |   13 +-
 .../query/scan/ScanQueryLimitRowIteratorTest.java  |    7 +-
 .../query/scan/ScanQueryRunnerFactoryTest.java     |    4 +-
 .../druid/query/scan/ScanQueryRunnerTest.java      |   38 +-
 .../druid/query/search/SearchQueryRunnerTest.java  |    6 +-
 .../search/SearchQueryRunnerWithCaseTest.java      |   74 +-
 .../query/select/MultiSegmentSelectQueryTest.java  |    9 +-
 .../druid/query/select/SelectQueryRunnerTest.java  |   35 +-
 .../query/spec/SpecificSegmentQueryRunnerTest.java |   19 +-
 .../timeboundary/TimeBoundaryQueryRunnerTest.java  |   22 +-
 .../timeseries/TimeSeriesUnionQueryRunnerTest.java |   11 +-
 .../timeseries/TimeseriesQueryRunnerBonusTest.java |    4 +-
 .../timeseries/TimeseriesQueryRunnerTest.java      |  279 +-
 .../query/topn/DefaultTopNQueryMetricsTest.java    |    3 +-
 .../topn/TopNMetricSpecOptimizationsTest.java      |  134 +-
 .../query/topn/TopNQueryQueryToolChestTest.java    |   14 +-
 .../druid/query/topn/TopNQueryRunnerBenchmark.java |   13 +-
 .../druid/query/topn/TopNQueryRunnerTest.java      |  387 ++-
 .../org/apache/druid/query/topn/TopNQueryTest.java |   58 +-
 .../druid/query/topn/TopNUnionQueryTest.java       |   14 +-
 .../java/org/apache/druid/segment/AppendTest.java  |   50 +-
 .../org/apache/druid/segment/CloserRuleTest.java   |    2 +-
 .../segment/IndexMergerV9WithSpatialIndexTest.java |    7 +-
 .../apache/druid/segment/IntIteratorUtilsTest.java |   21 +-
 .../org/apache/druid/segment/IntListUtilsTest.java |    7 +-
 .../apache/druid/segment/MergeIntIteratorTest.java |   29 +-
 .../QueryableIndexCursorSequenceBuilderTest.java   |  117 +
 .../apache/druid/segment/SchemalessIndexTest.java  |    5 +-
 .../druid/segment/SchemalessTestFullTest.java      |   26 +-
 .../druid/segment/SchemalessTestSimpleTest.java    |   17 +-
 .../java/org/apache/druid/segment/TestIndex.java   |    5 +-
 .../segment/data/BitmapCreationBenchmark.java      |    2 +-
 .../data/CompressedColumnarIntsSerializerTest.java |   13 +-
 .../segment/data/CompressedFloatsSerdeTest.java    |    2 +-
 .../segment/data/CompressedLongsSerdeTest.java     |    2 +-
 .../CompressedVSizeColumnarIntsSerializerTest.java |    9 +-
 .../druid/segment/data/IncrementalIndexTest.java   |   10 +-
 ...ressedVSizeColumnarMultiIntsSerializerTest.java |   19 +-
 .../data/VSizeColumnarIntsSerializerTest.java      |    9 +-
 .../druid/segment/filter/BaseFilterTest.java       |  240 +-
 .../druid/segment/filter/BoundFilterTest.java      |    4 +-
 .../segment/filter/ColumnComparisonFilterTest.java |   52 +-
 .../druid/segment/filter/ExpressionFilterTest.java |  123 +-
 .../apache/druid/segment/filter/FiltersTest.java   |    5 +-
 .../filter/FloatAndDoubleFilteringTest.java        |    6 +-
 .../druid/segment/filter/JavaScriptFilterTest.java |  118 +-
 .../druid/segment/filter/LongFilteringTest.java    |    4 +-
 .../druid/segment/filter/SelectorFilterTest.java   |   61 +-
 .../segment/filter/SpatialFilterBonusTest.java     |   10 +-
 .../druid/segment/filter/SpatialFilterTest.java    |    7 +-
 .../druid/segment/filter/TimeFilteringTest.java    |    6 +-
 .../IncrementalIndexStorageAdapterTest.java        |    2 +-
 .../OnheapIncrementalIndexBenchmark.java           |    8 +-
 .../druid/segment/serde/ComplexMetricsTest.java    |   78 +
 .../virtual/DummyStringVirtualColumnTest.java      |    4 +-
 .../virtual/ExpressionVirtualColumnTest.java       |   17 +-
 .../druid/segment/virtual/VirtualColumnsTest.java  |    3 +-
 publications/demo/figures/caching.png              |  Bin 36103 -> 29789 bytes
 publications/demo/figures/realtime_flow.png        |  Bin 52345 -> 41583 bytes
 publications/demo/figures/realtime_timeline.png    |  Bin 37015 -> 29939 bytes
 .../demo/figures/throughput_vs_cardinality.png     |  Bin 75254 -> 50493 bytes
 .../demo/figures/throughput_vs_num_dims.png        |  Bin 74606 -> 50912 bytes
 .../demo/figures/throughput_vs_num_metrics.png     |  Bin 87298 -> 63279 bytes
 publications/demo/figures/tpch_scaling.png         |  Bin 44252 -> 35808 bytes
 .../radstack/figures/druid_vs_bigquery.png         |  Bin 159171 -> 95074 bytes
 publications/radstack/figures/imps_clicks.png      |  Bin 195536 -> 135883 bytes
 publications/radstack/figures/joined.png           |  Bin 168080 -> 116192 bytes
 publications/radstack/figures/pipeline.png         |  Bin 401963 -> 288696 bytes
 publications/radstack/figures/precompute.png       |  Bin 55497 -> 17375 bytes
 publications/radstack/figures/radstack.png         |  Bin 17202 -> 10926 bytes
 publications/radstack/figures/shuffled.png         |  Bin 184794 -> 131290 bytes
 .../radstack/figures/throughput_vs_cardinality.png |  Bin 75254 -> 50493 bytes
 .../radstack/figures/throughput_vs_num_dims.png    |  Bin 74606 -> 50912 bytes
 .../radstack/figures/throughput_vs_num_metrics.png |  Bin 87298 -> 63279 bytes
 .../figures/throughput_vs_cardinality.png          |  Bin 75254 -> 50493 bytes
 .../whitepaper/figures/throughput_vs_num_dims.png  |  Bin 74606 -> 50912 bytes
 .../figures/throughput_vs_num_metrics.png          |  Bin 87298 -> 63279 bytes
 .../org/apache/druid/client/BrokerServerView.java  |   44 +-
 .../druid/client/CachingClusteredClient.java       |   17 +-
 .../apache/druid/client/CachingQueryRunner.java    |    8 +-
 .../apache/druid/client/DataSourcesSnapshot.java   |  126 +-
 .../org/apache/druid/client/DirectDruidClient.java |   34 +-
 .../org/apache/druid/client/DruidDataSource.java   |   21 +-
 .../java/org/apache/druid/client/DruidServer.java  |    2 -
 .../druid/client/ImmutableDruidDataSource.java     |   44 +-
 .../apache/druid/client/ImmutableDruidServer.java  |   21 +-
 .../client/cache/BackgroundCachePopulator.java     |    4 +
 .../apache/druid/client/cache/CachePopulator.java  |   19 +
 .../druid/client/cache/CachePopulatorStats.java    |    5 +
 .../client/cache/ForegroundCachePopulator.java     |   61 +-
 .../druid/client/indexing/ClientCompactQuery.java  |    6 +-
 .../indexing/ClientCompactQueryTuningConfig.java   |   14 +-
 .../druid/client/indexing/ClientKillQuery.java     |    3 +
 .../apache/druid/client/indexing/ClientQuery.java  |    7 +-
 .../client/indexing/HttpIndexingServiceClient.java |   21 +
 .../client/indexing/IndexingServiceClient.java     |    3 +
 .../druid/client/indexing/TaskStatusResponse.java  |    2 +-
 .../ConnectionCountServerSelectorStrategy.java     |    3 +-
 .../client/selector/QueryableDruidServer.java      |   16 +-
 .../druid/guice/FireDepartmentsProvider.java       |   59 -
 .../org/apache/druid/guice/FirehoseModule.java     |    6 +-
 .../apache/druid/guice/RealtimeManagerConfig.java  |   37 -
 .../druid/initialization/Initialization.java       |    4 +-
 .../initialization/Log4jShutterDownerModule.java   |   12 +-
 .../druid/metadata/MetadataSegmentManager.java     |  105 +-
 .../metadata/MetadataSegmentManagerConfig.java     |    5 +
 .../druid/metadata/SQLMetadataRuleManager.java     |    2 +-
 .../druid/metadata/SQLMetadataSegmentManager.java  | 1025 ++++---
 .../druid/metadata/UnknownSegmentIdException.java  |   18 +-
 .../druid/query/ResultLevelCachingQueryRunner.java |    6 +-
 .../druid/segment/indexing/RealtimeIOConfig.java   |   16 +-
 .../segment/indexing/RealtimeTuningConfig.java     |   14 +
 .../loading/SegmentLoaderLocalCacheManager.java    |    7 +-
 .../druid/segment/loading/StorageLocation.java     |   55 +-
 .../segment/loading/StorageLocationConfig.java     |   56 +-
 .../druid/segment/realtime/FireDepartment.java     |   11 -
 .../druid/segment/realtime/RealtimeManager.java    |  393 ---
 .../realtime/appenderator/AppenderatorConfig.java  |    2 +
 .../realtime/appenderator/AppenderatorImpl.java    |    4 +-
 .../realtime/appenderator/AppenderatorPlumber.java |    3 +-
 .../appenderator/BaseAppenderatorDriver.java       |   10 +-
 .../firehose/EventReceiverFirehoseFactory.java     |    5 +-
 .../segment/realtime/firehose/InlineFirehose.java  |   99 +
 .../realtime/firehose/InlineFirehoseFactory.java   |   77 +
 .../realtime/firehose/PredicateFirehose.java       |    1 +
 .../realtime/firehose/SqlFirehoseFactory.java      |    3 +
 .../segment/realtime/firehose/package-info.java    |   23 +
 .../druid/segment/realtime/plumber/Committers.java |   13 -
 .../segment/realtime/plumber/RealtimePlumber.java  |    5 +-
 .../apache/druid/server/BrokerQueryResource.java   |    9 +-
 .../java/org/apache/druid/server/JettyUtils.java   |   40 +
 .../org/apache/druid/server/QueryLifecycle.java    |   10 +-
 .../org/apache/druid/server/QueryResource.java     |   48 +-
 .../org/apache/druid/server/SegmentManager.java    |    9 +-
 .../server/SetAndVerifyContextQueryRunner.java     |    5 +-
 .../org/apache/druid/server/StatusResource.java    |    3 +-
 .../coordination/BatchDataSegmentAnnouncer.java    |   24 +-
 .../BatchDataSegmentAnnouncerProvider.java         |    6 +-
 .../coordination/ChangeRequestHttpSyncer.java      |    5 +-
 .../coordination/SegmentLoadDropHandler.java       |   97 +-
 .../druid/server/coordination/ZkCoordinator.java   |   57 +-
 .../coordinator/CoordinatorDynamicConfig.java      |  207 +-
 .../server/coordinator/CostBalancerStrategy.java   |   24 +-
 .../server/coordinator/CuratorLoadQueuePeon.java   |    2 -
 .../DiskNormalizedCostBalancerStrategy.java        |    4 +-
 .../druid/server/coordinator/DruidCluster.java     |   33 +-
 .../druid/server/coordinator/DruidCoordinator.java |  135 +-
 .../DruidCoordinatorCleanupPendingSegments.java    |   12 +-
 .../coordinator/DruidCoordinatorRuntimeParams.java |  179 +-
 .../coordinator/ReservoirSegmentSampler.java       |    2 +-
 .../server/coordinator/SegmentReplicantLookup.java |    2 +-
 .../server/coordinator/cost/ClusterCostCache.java  |    7 +-
 .../server/coordinator/cost/ServerCostCache.java   |    7 +-
 .../helper/DruidCoordinatorBalancer.java           |   20 +-
 .../DruidCoordinatorCleanupOvershadowed.java       |   53 +-
 .../helper/DruidCoordinatorCleanupUnneeded.java    |   13 +-
 .../coordinator/helper/DruidCoordinatorLogger.java |   13 +-
 .../helper/DruidCoordinatorRuleRunner.java         |   27 +-
 .../helper/DruidCoordinatorSegmentCompactor.java   |    3 +-
 .../helper/DruidCoordinatorSegmentInfoLoader.java  |   53 +-
 .../helper/DruidCoordinatorSegmentKiller.java      |   45 +-
 .../druid/server/coordinator/rules/DropRule.java   |    2 +-
 .../druid/server/coordinator/rules/Rule.java       |    8 +-
 .../druid/server/http/CoordinatorResource.java     |    2 +-
 .../druid/server/http/DataSourcesResource.java     |  447 ++-
 .../apache/druid/server/http/MetadataResource.java |  173 +-
 .../apache/druid/server/http/RouterResource.java   |    3 +
 .../druid/server/http/SegmentListerResource.java   |    8 +-
 .../server/security/AuthenticationResult.java      |    2 +
 .../druid/server/security/AuthenticationUtils.java |    2 +-
 .../druid/server/security/AuthorizationUtils.java  |   30 +-
 .../server/security/UnsecuredResourceFilter.java   |    8 +-
 .../CachingClusteredClientFunctionalityTest.java   |   25 +-
 .../druid/client/CachingClusteredClientTest.java   |   69 +-
 .../druid/client/CachingQueryRunnerTest.java       |   12 +-
 .../apache/druid/client/DirectDruidClientTest.java |   29 +-
 .../druid/client/ImmutableDruidDataSourceTest.java |   84 +-
 .../druid/client/ImmutableDruidServerTests.java    |   39 +
 .../druid/client/indexing/ClientKillQueryTest.java |   12 +-
 .../client/indexing/NoopIndexingServiceClient.java |    7 +
 .../druid/client/selector/ServerSelectorTest.java  |   10 +-
 .../org/apache/druid/guice/FirehoseModuleTest.java |   88 +
 .../druid/initialization/InitializationTest.java   |   19 +-
 .../SQLMetadataSegmentManagerEmptyTest.java        |  113 +
 .../metadata/SQLMetadataSegmentManagerTest.java    | 1025 +++----
 .../query/lookup/LookupReferencesManagerTest.java  |  181 +-
 .../firehose/CombiningFirehoseFactoryTest.java     |  159 -
 .../segment/indexing/RealtimeTuningConfigTest.java |   10 +-
 .../SegmentLoaderLocalCacheManagerTest.java        |   36 +-
 .../druid/segment/loading/StorageLocationTest.java |   12 +-
 .../druid/segment/realtime/FireDepartmentTest.java |    3 +-
 .../segment/realtime/RealtimeManagerTest.java      | 1104 -------
 .../appenderator/AppenderatorPlumberTest.java      |    1 +
 .../realtime/appenderator/AppenderatorTest.java    |   18 +-
 .../realtime/appenderator/AppenderatorTester.java  |    1 +
 .../DefaultOfflineAppenderatorFactoryTest.java     |    1 +
 .../appenderator/TestUsedSegmentChecker.java       |    8 +-
 .../firehose/CombiningFirehoseFactoryTest.java     |  158 +
 .../firehose/InlineFirehoseFactoryTest.java        |  113 +
 .../realtime/firehose/InlineFirehoseTest.java      |  231 ++
 .../plumber/RealtimePlumberSchoolTest.java         |    1 +
 .../druid/segment/realtime/plumber/SinkTest.java   |    2 +
 .../org/apache/druid/server/QueryResourceTest.java |    4 +-
 .../server/SegmentManagerThreadSafetyTest.java     |    2 +-
 .../apache/druid/server/StatusResourceTest.java    |   13 +-
 .../server/coordination/ServerManagerTest.java     |    8 +-
 .../CoordinatorRuntimeParamsTestHelpers.java       |   44 +
 .../coordinator/CostBalancerStrategyTest.java      |    3 +-
 .../coordinator/CuratorDruidCoordinatorTest.java   |   57 +-
 .../DiskNormalizedCostBalancerStrategyTest.java    |    3 +-
 .../server/coordinator/DruidClusterBuilder.java    |   61 +
 .../druid/server/coordinator/DruidClusterTest.java |   34 +-
 .../DruidCoordinatorBalancerProfiler.java          |  139 +-
 .../coordinator/DruidCoordinatorBalancerTest.java  |  109 +-
 .../DruidCoordinatorBalancerTester.java            |    9 -
 .../DruidCoordinatorRuleRunnerTest.java            |  967 ++----
 .../server/coordinator/DruidCoordinatorTest.java   |   72 +-
 .../coordinator/ReservoirSegmentSamplerTest.java   |    9 +-
 .../cost/CachingCostBalancerStrategyTest.java      |    2 +-
 .../coordinator/cost/SegmentsCostCacheTest.java    |   25 +-
 .../DruidCoordinatorCleanupOvershadowedTest.java   |   41 +-
 .../DruidCoordinatorSegmentCompactorTest.java      |   42 +-
 .../helper/DruidCoordinatorSegmentKillerTest.java  |   39 +-
 .../helper/NewestSegmentFirstPolicyTest.java       |   13 +-
 .../rules/BroadcastDistributionRuleSerdeTest.java  |    8 +-
 .../rules/BroadcastDistributionRuleTest.java       |  193 +-
 .../server/coordinator/rules/LoadRuleTest.java     |  590 ++--
 .../server/http/CoordinatorDynamicConfigTest.java  |   34 +-
 .../druid/server/http/DataSourcesResourceTest.java |  819 +++--
 .../http/security/SecurityResourceFilterTest.java  |    8 +-
 .../druid/server/initialization/JettyQosTest.java  |    5 +-
 .../druid/server/initialization/JettyTest.java     |    2 +-
 ...JavaScriptTieredBrokerSelectorStrategyTest.java |   24 +-
 .../utils/ImmutableDruidDataSourceTestUtils.java   |   94 +
 .../java/org/apache/druid/cli/CliCoordinator.java  |   12 +-
 .../org/apache/druid/cli/CliMiddleManager.java     |    5 +-
 .../java/org/apache/druid/cli/CliOverlord.java     |    8 +-
 .../java/org/apache/druid/cli/CliRealtime.java     |   73 -
 .../org/apache/druid/cli/CliRealtimeExample.java   |  131 -
 .../cli/CoordinatorJettyServerInitializer.java     |    8 +-
 .../java/org/apache/druid/cli/DumpSegment.java     |   37 +-
 .../src/main/java/org/apache/druid/cli/Main.java   |    6 -
 .../cli/MiddleManagerJettyServerInitializer.java   |    6 +-
 .../druid/cli/QueryJettyServerInitializer.java     |    4 +-
 .../druid/cli/RouterJettyServerInitializer.java    |   13 +-
 .../org/apache/druid/guice/RealtimeModule.java     |  133 -
 .../test/java/org/apache/druid/cli/MainTest.java   |    2 -
 .../druid/cli/validate/DruidJsonValidatorTest.java |    4 +-
 .../expression/DirectOperatorConversion.java       |    5 +
 .../druid/sql/calcite/expression/TimeUnits.java    |   14 +-
 .../ArrayConstructorOperatorConversion.java        |   58 +
 .../builtin/ArrayContainsOperatorConversion.java   |   54 +
 .../builtin/ArrayLengthOperatorConversion.java     |   73 +
 .../builtin/ArrayOffsetOfOperatorConversion.java   |   77 +
 .../builtin/ArrayOffsetOperatorConversion.java     |   77 +
 .../builtin/ArrayOrdinalOfOperatorConversion.java  |   77 +
 .../builtin/ArrayOrdinalOperatorConversion.java    |   77 +
 .../builtin/ArrayOverlapOperatorConversion.java    |   54 +
 .../builtin/ArrayToStringOperatorConversion.java   |   77 +
 .../BaseExpressionDimFilterOperatorConversion.java |   70 +
 .../expression/builtin/CeilOperatorConversion.java |   54 +-
 .../builtin/ExtractOperatorConversion.java         |    7 +
 .../builtin/FloorOperatorConversion.java           |   46 +-
 .../MultiValueStringAppendOperatorConversion.java  |   76 +
 .../MultiValueStringConcatOperatorConversion.java  |   73 +
 .../MultiValueStringPrependOperatorConversion.java |   76 +
 .../MultiValueStringSliceOperatorConversion.java   |   81 +
 ...StringToMultiValueStringOperatorConversion.java |   74 +
 .../builtin/TimeCeilOperatorConversion.java        |   75 +
 .../builtin/TimeFloorOperatorConversion.java       |  115 +-
 .../apache/druid/sql/calcite/planner/Calcites.java |    3 +
 .../sql/calcite/planner/DruidConvertletTable.java  |    2 +
 .../sql/calcite/planner/DruidOperatorTable.java    |   40 +
 .../sql/calcite/planner/DruidRexExecutor.java      |    4 +
 .../apache/druid/sql/calcite/rel/Projection.java   |   12 +-
 .../apache/druid/sql/calcite/rel/QueryMaker.java   |    7 +
 .../apache/druid/sql/calcite/rule/DruidRules.java  |   10 +-
 .../druid/sql/calcite/schema/SystemSchema.java     |    2 +-
 .../druid/sql/avatica/DruidAvaticaHandlerTest.java |   14 +
 .../druid/sql/calcite/BaseCalciteQueryTest.java    |   64 +-
 .../apache/druid/sql/calcite/CalciteQueryTest.java | 1245 +++++++-
 .../sql/calcite/expression/ExpressionsTest.java    |   33 +-
 .../druid/sql/calcite/schema/DruidSchemaTest.java  |    3 +-
 .../druid/sql/calcite/schema/SystemSchemaTest.java |    8 +-
 .../druid/sql/calcite/util/CalciteTests.java       |   47 +-
 .../util/SpecificSegmentsQuerySegmentWalker.java   |    5 +-
 web-console/.gitignore                             |    1 +
 web-console/README.md                              |    7 +-
 web-console/assets/druid.png                       |  Bin 0 -> 15699 bytes
 web-console/assets/example.png                     |  Bin 0 -> 8873 bytes
 web-console/assets/hadoop.png                      |  Bin 0 -> 47082 bytes
 web-console/assets/http.png                        |  Bin 0 -> 10407 bytes
 web-console/assets/kafka.png                       |  Bin 0 -> 18022 bytes
 web-console/assets/kinesis.png                     |  Bin 0 -> 15631 bytes
 web-console/assets/local.png                       |  Bin 0 -> 9211 bytes
 web-console/assets/other.png                       |  Bin 0 -> 9549 bytes
 web-console/assets/static-google-blobstore.png     |  Bin 0 -> 19344 bytes
 web-console/assets/static-s3.png                   |  Bin 0 -> 16541 bytes
 web-console/babel.config.js                        |   38 +
 web-console/favicon.png                            |  Bin 4514 -> 1644 bytes
 web-console/package-lock.json                      | 2827 ++++++++++++------
 web-console/package.json                           |   87 +-
 web-console/script/build                           |    2 +-
 web-console/script/cp-to                           |    1 +
 web-console/script/create-sql-function-doc.js      |  102 +-
 web-console/script/licenses                        |  175 ++
 web-console/script/mkcomp                          |   30 +-
 web-console/src/ace-modes/dsql.js                  |  142 +
 web-console/src/ace-modes/hjson.js                 |  300 ++
 .../bootstrap/react-table-custom-pagination.tsx    |   32 +-
 web-console/src/bootstrap/react-table-defaults.tsx |   17 +-
 .../src/components/action-cell/action-cell.scss    |    1 -
 .../components/action-cell/action-cell.spec.tsx    |    7 +-
 .../src/components/action-cell/action-cell.tsx     |   27 +-
 .../components/action-icon/action-icon.spec.tsx    |    4 +-
 .../src/components/action-icon/action-icon.tsx     |    8 +-
 .../components/array-input/array-input.spec.tsx    |   16 +-
 .../src/components/array-input/array-input.tsx     |   27 +-
 .../__snapshots__/auto-form.spec.tsx.snap          |    2 +-
 .../src/components/auto-form/auto-form.spec.tsx    |   25 +-
 web-console/src/components/auto-form/auto-form.tsx |  325 +-
 .../center-message/center-message.spec.tsx         |    7 +-
 .../components/center-message/center-message.tsx   |   11 +-
 .../__snapshots__/clearable-input.spec.tsx.snap    |    2 +-
 .../clearable-input/clearable-input.spec.tsx       |   13 +-
 .../components/clearable-input/clearable-input.tsx |   20 +-
 .../external-link/external-link.spec.tsx           |    7 +-
 .../src/components/external-link/external-link.tsx |   13 +-
 .../__snapshots__/header-bar.spec.tsx.snap         |    3 +
 .../src/components/header-bar/header-bar.scss      |    4 +-
 .../src/components/header-bar/header-bar.spec.tsx  |    7 +-
 .../src/components/header-bar/header-bar.tsx       |  290 +-
 web-console/src/components/index.ts                |    2 +
 .../json-collapse/json-collapse.spec.tsx           |   10 +-
 .../src/components/json-collapse/json-collapse.tsx |   36 +-
 .../src/components/json-input/json-input.spec.tsx  |    8 +-
 .../src/components/json-input/json-input.tsx       |   66 +-
 web-console/src/components/loader/loader.scss      |    6 +-
 web-console/src/components/loader/loader.spec.tsx  |    7 +-
 web-console/src/components/loader/loader.tsx       |   52 +-
 .../menu-checkbox/menu-checkbox.spec.tsx           |    5 +-
 .../src/components/menu-checkbox/menu-checkbox.tsx |    9 +-
 .../components/refresh-button/refresh-button.tsx   |   57 +
 .../components/rule-editor/rule-editor.spec.tsx    |   23 +-
 .../src/components/rule-editor/rule-editor.tsx     |  255 +-
 .../src/components/show-json/show-json.spec.tsx    |    8 +-
 web-console/src/components/show-json/show-json.tsx |   74 +-
 .../src/components/show-log/show-log.spec.tsx      |    9 +-
 web-console/src/components/show-log/show-log.tsx   |   96 +-
 .../__snapshots__/suggestible-input.spec.tsx.snap  |   51 +
 .../suggestible-input/suggestible-input.spec.tsx   |   33 +
 .../suggestible-input/suggestible-input.tsx        |  106 +
 .../__snapshots__/table-cell.spec.tsx.snap         |   28 +-
 .../src/components/table-cell/table-cell.scss      |    3 +-
 .../src/components/table-cell/table-cell.spec.tsx  |   44 +-
 .../src/components/table-cell/table-cell.tsx       |   51 +-
 .../table-column-selector.spec.tsx                 |    9 +-
 .../table-column-selector.tsx                      |   56 +-
 .../src/components/timed-button/timed-button.scss  |   21 +
 .../src/components/timed-button/timed-button.tsx   |  131 +
 .../view-control-bar/view-control-bar.scss         |    2 +-
 .../view-control-bar/view-control-bar.spec.tsx     |    7 +-
 .../view-control-bar/view-control-bar.tsx          |   10 +-
 web-console/src/console-application.scss           |    2 +-
 web-console/src/console-application.tsx            |  250 +-
 .../__snapshots__/about-dialog.spec.tsx.snap       |    9 +-
 .../src/dialogs/about-dialog/about-dialog.spec.tsx |   11 +-
 .../src/dialogs/about-dialog/about-dialog.tsx      |   84 +-
 .../async-action-dialog.spec.tsx.snap              |    2 +-
 .../async-action-dialog/async-action-dialog.scss   |   23 +
 .../async-action-dialog.spec.tsx                   |   17 +-
 .../async-action-dialog/async-action-dialog.tsx    |  133 +-
 .../__snapshots__/compaction-dialog.spec.tsx.snap  |    2 +-
 .../compaction-dialog/compaction-dialog.spec.tsx   |   13 +-
 .../compaction-dialog/compaction-dialog.tsx        |  136 +-
 ...coordinator-dynamic-config-dialog.spec.tsx.snap |  114 +
 .../coordinator-dynamic-config-dialog.scss         |   47 +
 .../coordinator-dynamic-config-dialog.spec.tsx     |   30 +
 .../coordinator-dynamic-config-dialog.tsx          |  296 ++
 .../coordinator-dynamic-config.spec.tsx.snap       |  123 -
 .../coordinator-dynamic-config.scss                |   47 -
 .../coordinator-dynamic-config.spec.tsx            |   33 -
 .../coordinator-dynamic-config.tsx                 |  184 --
 .../src/dialogs/history-dialog/history-dialog.scss |    5 -
 .../dialogs/history-dialog/history-dialog.spec.tsx |   16 +-
 .../src/dialogs/history-dialog/history-dialog.tsx  |   78 +-
 web-console/src/dialogs/index.ts                   |    4 +-
 .../lookup-edit-dialog/lookup-edit-dialog.scss     |    8 +-
 .../lookup-edit-dialog/lookup-edit-dialog.spec.tsx |   11 +-
 .../lookup-edit-dialog/lookup-edit-dialog.tsx      |  208 +-
 .../overload-dynamic-config-dialog.spec.tsx.snap   |  114 +
 .../overload-dynamic-config-dialog.spec.tsx        |   31 +
 .../overlord-dynamic-config-dialog.scss            |   52 +
 .../overlord-dynamic-config-dialog.tsx             |  157 +
 .../overload-dynamic-config.spec.tsx.snap          |  356 ---
 .../overload-dynamic-config.spec.tsx               |   42 -
 .../overlord-dynamic-config.scss                   |   52 -
 .../overlord-dynamic-config.tsx                    |  148 -
 .../query-plan-dialog/query-plan-dialog.scss       |    1 -
 .../query-plan-dialog/query-plan-dialog.spec.tsx   |   13 +-
 .../query-plan-dialog/query-plan-dialog.tsx        |  155 +-
 .../__snapshots__/retention-dialog.spec.tsx.snap   |   13 +-
 .../retention-dialog.array.spec.ts                 |   57 -
 .../retention-dialog/retention-dialog.spec.tsx     |   48 +-
 .../dialogs/retention-dialog/retention-dialog.tsx  |  137 +-
 .../segment-table-action-dialog.spec.tsx.snap      |  182 ++
 .../segment-table-action-dialog.spec.tsx           |   38 +
 .../segment-table-action-dialog.tsx                |   78 +
 .../__snapshots__/show-value-dialog.spec.tsx.snap  |  107 +
 .../show-value-dialog/show-value-dialog.scss       |   32 +
 .../show-value-dialog/show-value-dialog.spec.tsx   |   37 +
 .../show-value-dialog/show-value-dialog.tsx        |   60 +
 .../src/dialogs/snitch-dialog/snitch-dialog.scss   |    1 -
 .../dialogs/snitch-dialog/snitch-dialog.spec.tsx   |   12 +-
 .../src/dialogs/snitch-dialog/snitch-dialog.tsx    |  153 +-
 .../src/dialogs/spec-dialog/spec-dialog.scss       |    4 +-
 .../src/dialogs/spec-dialog/spec-dialog.spec.tsx   |   13 +-
 .../src/dialogs/spec-dialog/spec-dialog.tsx        |   84 +-
 .../supervisor-table-action-dialog.spec.tsx        |   14 +-
 .../supervisor-table-action-dialog.tsx             |   90 +-
 .../table-action-dialog/table-action-dialog.scss   |    6 +-
 .../table-action-dialog.spec.tsx                   |   13 +-
 .../table-action-dialog/table-action-dialog.tsx    |   47 +-
 .../task-table-action-dialog.spec.tsx              |   13 +-
 .../task-table-action-dialog.tsx                   |   99 +-
 web-console/src/entry.ts                           |   36 +-
 web-console/src/singletons/toaster.ts              |    2 +-
 web-console/src/utils/basic-action.tsx             |   28 +-
 web-console/src/utils/druid-expression.ts          |    4 +-
 web-console/src/utils/druid-query.ts               |   23 +-
 web-console/src/utils/druid-time.ts                |   23 +-
 web-console/src/utils/druid-type.ts                |   67 +-
 web-console/src/utils/general.spec.ts              |   38 +-
 web-console/src/utils/general.tsx                  |  114 +-
 web-console/src/utils/index.tsx                    |    1 -
 web-console/src/utils/ingestion-spec.tsx           | 1145 ++++---
 web-console/src/utils/joda-to-regexp.spec.ts       |    9 +-
 web-console/src/utils/joda-to-regexp.ts            |    2 +-
 .../src/utils/local-storage-backed-array.tsx       |   62 +
 web-console/src/utils/local-storage-keys.tsx       |    8 +-
 web-console/src/utils/object-change.spec.ts        |   69 +-
 web-console/src/utils/object-change.ts             |    3 +-
 web-console/src/utils/query-context.tsx            |   12 +-
 web-console/src/utils/query-manager.tsx            |   76 +-
 web-console/src/utils/query-state.ts               |    2 +-
 web-console/src/utils/rune-decoder.tsx             |   32 +-
 web-console/src/utils/sampler.ts                   |  267 +-
 web-console/src/utils/spec-utils.spec.ts           |   32 +-
 web-console/src/utils/spec-utils.ts                |   29 +-
 .../src/utils/table-column-selection-handler.tsx   |   61 -
 .../__snapshots__/datasource-view.spec.tsx.snap    |   84 +-
 .../src/views/datasource-view/datasource-view.scss |    2 +-
 .../views/datasource-view/datasource-view.spec.tsx |    7 +-
 .../src/views/datasource-view/datasource-view.tsx  |  900 +++---
 web-console/src/views/home-view/home-view.scss     |    2 +-
 web-console/src/views/home-view/home-view.spec.tsx |    5 +-
 web-console/src/views/home-view/home-view.tsx      |  319 +-
 .../__snapshots__/load-data-view.spec.tsx.snap     |  184 +-
 .../filter-table/filter-table.spec.tsx             |   26 +-
 .../load-data-view/filter-table/filter-table.tsx   |   99 +-
 .../src/views/load-data-view/load-data-view.scss   |   62 +-
 .../views/load-data-view/load-data-view.spec.tsx   |    5 +-
 .../src/views/load-data-view/load-data-view.tsx    | 3122 +++++++++++---------
 .../parse-data-table/parse-data-table.scss         |    2 +-
 .../parse-data-table/parse-data-table.spec.tsx     |   27 +-
 .../parse-data-table/parse-data-table.tsx          |  124 +-
 .../parse-time-table/parse-time-table.scss         |    2 +-
 .../parse-time-table/parse-time-table.spec.tsx     |   28 +-
 .../parse-time-table/parse-time-table.tsx          |  137 +-
 .../load-data-view/schema-table/schema-table.scss  |   16 +-
 .../schema-table/schema-table.spec.tsx             |   32 +-
 .../load-data-view/schema-table/schema-table.tsx   |  168 +-
 .../transform-table/transform-table.spec.tsx       |   26 +-
 .../transform-table/transform-table.tsx            |  108 +-
 .../__snapshots__/lookups-view.spec.tsx.snap       |   27 +-
 .../src/views/lookups-view/lookups-view.spec.tsx   |    3 +-
 .../src/views/lookups-view/lookups-view.tsx        |  388 +--
 .../query-view/column-tree/column-tree.spec.tsx    |   39 +-
 .../views/query-view/column-tree/column-tree.tsx   |  109 +-
 .../query-extra-info/query-extra-info.spec.tsx     |   26 +-
 .../query-extra-info/query-extra-info.tsx          |   73 +-
 .../src/views/query-view/query-input/keywords.ts   |   74 +
 .../views/query-view/query-input/query-input.scss  |    8 +-
 .../query-view/query-input/query-input.spec.tsx    |   16 +-
 .../views/query-view/query-input/query-input.tsx   |  172 +-
 .../query-view/query-output/query-output.spec.tsx  |    8 +-
 .../views/query-view/query-output/query-output.tsx |   29 +-
 web-console/src/views/query-view/query-view.scss   |    5 +-
 .../src/views/query-view/query-view.spec.tsx       |    9 +-
 web-console/src/views/query-view/query-view.tsx    |  220 +-
 .../views/query-view/run-button/run-button.scss    |   21 -
 .../query-view/run-button/run-button.spec.tsx      |   18 +-
 .../src/views/query-view/run-button/run-button.tsx |  156 +-
 .../__snapshots__/segments-view.spec.tsx.snap      |  607 ++--
 .../src/views/segments-view/segments-view.scss     |    2 +-
 .../src/views/segments-view/segments-view.spec.tsx |    5 +-
 .../src/views/segments-view/segments-view.tsx      |  809 +++--
 .../__snapshots__/servers-view.spec.tsx.snap       |   31 +-
 .../src/views/servers-view/servers-view.scss       |    6 +-
 .../src/views/servers-view/servers-view.spec.tsx   |    7 +-
 .../src/views/servers-view/servers-view.tsx        |  800 ++---
 .../__snapshots__/tasks-view.spec.tsx.snap         |  135 +-
 web-console/src/views/task-view/tasks-view.scss    |    2 +-
 .../src/views/task-view/tasks-view.spec.tsx        |    7 +-
 web-console/src/views/task-view/tasks-view.tsx     | 1401 +++++----
 web-console/tsconfig.json                          |   17 +-
 web-console/tslint.json                            |    4 +-
 web-console/unified-console.html                   |   24 +-
 web-console/webpack.config.js                      |   77 +-
 1340 files changed, 50532 insertions(+), 34706 deletions(-)



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org