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

ankitsultana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 47b322bde7 [timeseries] Minor Time Series Engine Improvements (#14227)
47b322bde7 is described below

commit 47b322bde728df7264f0c4b6dc3684c3519fef52
Author: Ankit Sultana <ankitsult...@uber.com>
AuthorDate: Mon Oct 14 20:31:28 2024 -0500

    [timeseries] Minor Time Series Engine Improvements (#14227)
---
 .../core/operator/timeseries/TimeSeriesAggregationOperator.java   | 3 +++
 .../src/main/java/org/apache/pinot/query/runtime/QueryRunner.java | 4 +++-
 .../runtime/timeseries/PhysicalTimeSeriesPlanVisitorTest.java     | 4 ++--
 .../org/apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNode.java    | 2 +-
 .../apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNodeTest.java    | 8 ++++----
 5 files changed, 13 insertions(+), 8 deletions(-)

diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/operator/timeseries/TimeSeriesAggregationOperator.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/operator/timeseries/TimeSeriesAggregationOperator.java
index b55605589b..a47a05e83a 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/operator/timeseries/TimeSeriesAggregationOperator.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/operator/timeseries/TimeSeriesAggregationOperator.java
@@ -105,6 +105,9 @@ public class TimeSeriesAggregationOperator extends 
BaseOperator<TimeSeriesResult
         case LONG:
           tagValues[i] = ArrayUtils.toObject(blockValSet.getLongValuesSV());
           break;
+        case INT:
+          tagValues[i] = ArrayUtils.toObject(blockValSet.getIntValuesSV());
+          break;
         default:
           throw new NotImplementedException("Can't handle types other than 
string and long");
       }
diff --git 
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/QueryRunner.java
 
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/QueryRunner.java
index 5b80d35065..a0739162a6 100644
--- 
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/QueryRunner.java
+++ 
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/QueryRunner.java
@@ -253,7 +253,8 @@ public class QueryRunner {
     final Consumer<Throwable> handleErrors = (t) -> {
       Map<String, String> errorMetadata = new HashMap<>();
       errorMetadata.put(WorkerResponseMetadataKeys.ERROR_TYPE, 
t.getClass().getSimpleName());
-      errorMetadata.put(WorkerResponseMetadataKeys.ERROR_MESSAGE, 
t.getMessage());
+      errorMetadata.put(WorkerResponseMetadataKeys.ERROR_MESSAGE, 
t.getMessage() == null
+          ? "Unknown error: no message" : t.getMessage());
       
responseObserver.onNext(Worker.TimeSeriesResponse.newBuilder().putAllMetadata(errorMetadata).build());
       responseObserver.onCompleted();
     };
@@ -280,6 +281,7 @@ public class QueryRunner {
         }
       });
     } catch (Throwable t) {
+      LOGGER.error("Error running time-series query", t);
       handleErrors.accept(t);
     }
   }
diff --git 
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/timeseries/PhysicalTimeSeriesPlanVisitorTest.java
 
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/timeseries/PhysicalTimeSeriesPlanVisitorTest.java
index 929e2669cf..8f877aec01 100644
--- 
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/timeseries/PhysicalTimeSeriesPlanVisitorTest.java
+++ 
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/timeseries/PhysicalTimeSeriesPlanVisitorTest.java
@@ -54,7 +54,7 @@ public class PhysicalTimeSeriesPlanVisitorTest {
       assertEquals(queryContext.getTimeSeriesContext().getTimeColumn(), 
timeColumn);
       
assertEquals(queryContext.getTimeSeriesContext().getValueExpression().getIdentifier(),
 "orderCount");
       assertEquals(queryContext.getFilter().toString(),
-          "(cityName = 'Chicago' AND orderTime >= '1000' AND orderTime <= 
'2000')");
+          "(cityName = 'Chicago' AND orderTime >= '1000' AND orderTime < 
'2000')");
     }
     // Case-2: With offset, complex group-by expression, complex value, and 
non-empty filter
     {
@@ -75,7 +75,7 @@ public class PhysicalTimeSeriesPlanVisitorTest {
       
assertEquals(queryContext.getTimeSeriesContext().getValueExpression().toString(),
 "times(orderCount,'2')");
       assertNotNull(queryContext.getFilter());
       assertEquals(queryContext.getFilter().toString(),
-          "(cityName = 'Chicago' AND orderTime >= '990' AND orderTime <= 
'1990')");
+          "(cityName = 'Chicago' AND orderTime >= '990' AND orderTime < 
'1990')");
     }
   }
 }
diff --git 
a/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNode.java
 
b/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNode.java
index e563508450..856b81622a 100644
--- 
a/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNode.java
+++ 
b/pinot-timeseries/pinot-timeseries-spi/src/main/java/org/apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNode.java
@@ -119,7 +119,7 @@ public class LeafTimeSeriesPlanNode extends 
BaseTimeSeriesPlanNode {
     long endTime =
         _timeUnit.convert(Duration.ofSeconds(
             timeBuckets.getEndTime() + timeBuckets.getBucketSize().toSeconds() 
- _offsetSeconds));
-    String addnFilter = String.format("%s >= %d AND %s <= %d", _timeColumn, 
startTime, _timeColumn, endTime);
+    String addnFilter = String.format("%s >= %d AND %s < %d", _timeColumn, 
startTime, _timeColumn, endTime);
     if (filter.strip().isEmpty()) {
       return addnFilter;
     }
diff --git 
a/pinot-timeseries/pinot-timeseries-spi/src/test/java/org/apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNodeTest.java
 
b/pinot-timeseries/pinot-timeseries-spi/src/test/java/org/apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNodeTest.java
index ece46c332a..f439bfc028 100644
--- 
a/pinot-timeseries/pinot-timeseries-spi/src/test/java/org/apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNodeTest.java
+++ 
b/pinot-timeseries/pinot-timeseries-spi/src/test/java/org/apache/pinot/tsdb/spi/plan/LeafTimeSeriesPlanNodeTest.java
@@ -46,7 +46,7 @@ public class LeafTimeSeriesPlanNodeTest {
           new LeafTimeSeriesPlanNode(ID, Collections.emptyList(), TABLE, 
TIME_COLUMN, TIME_UNIT, 0L, "", "value_col",
               new AggInfo("SUM", null), Collections.singletonList("cityName"));
       assertEquals(planNode.getEffectiveFilter(timeBuckets),
-          "orderTime >= " + expectedStartTimeInFilter + " AND orderTime <= " + 
expectedEndTimeInFilter);
+          "orderTime >= " + expectedStartTimeInFilter + " AND orderTime < " + 
expectedEndTimeInFilter);
     }
     // Case-2: Offset, but empty filter
     {
@@ -54,7 +54,7 @@ public class LeafTimeSeriesPlanNodeTest {
           new LeafTimeSeriesPlanNode(ID, Collections.emptyList(), TABLE, 
TIME_COLUMN, TIME_UNIT, 123L, "", "value_col",
               new AggInfo("SUM", null), Collections.singletonList("cityName"));
       assertEquals(planNode.getEffectiveFilter(timeBuckets),
-          "orderTime >= " + (expectedStartTimeInFilter - 123) + " AND 
orderTime <= " + (expectedEndTimeInFilter - 123));
+          "orderTime >= " + (expectedStartTimeInFilter - 123) + " AND 
orderTime < " + (expectedEndTimeInFilter - 123));
     }
     // Case-3: Offset and non-empty filter
     {
@@ -62,7 +62,7 @@ public class LeafTimeSeriesPlanNodeTest {
           new LeafTimeSeriesPlanNode(ID, Collections.emptyList(), TABLE, 
TIME_COLUMN, TIME_UNIT, 123L, nonEmptyFilter,
               "value_col", new AggInfo("SUM", null), 
Collections.singletonList("cityName"));
       assertEquals(planNode.getEffectiveFilter(timeBuckets),
-          String.format("(%s) AND (orderTime >= %s AND orderTime <= %s)", 
nonEmptyFilter,
+          String.format("(%s) AND (orderTime >= %s AND orderTime < %s)", 
nonEmptyFilter,
               (expectedStartTimeInFilter - 123), (expectedEndTimeInFilter - 
123)));
     }
     // Case-4: Offset, and non-empty filter, and time-unit that is not seconds
@@ -71,7 +71,7 @@ public class LeafTimeSeriesPlanNodeTest {
           new LeafTimeSeriesPlanNode(ID, Collections.emptyList(), TABLE, 
TIME_COLUMN, TimeUnit.MILLISECONDS, 123L,
               nonEmptyFilter, "value_col", new AggInfo("SUM", null), 
Collections.singletonList("cityName"));
       assertEquals(planNode.getEffectiveFilter(timeBuckets),
-          String.format("(%s) AND (orderTime >= %s AND orderTime <= %s)", 
nonEmptyFilter,
+          String.format("(%s) AND (orderTime >= %s AND orderTime < %s)", 
nonEmptyFilter,
               (expectedStartTimeInFilter * 1000 - 123 * 1000), 
(expectedEndTimeInFilter * 1000 - 123 * 1000)));
     }
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to