apache / apache/iotdb

count聚合出错0.13版本

オープン
#6,435 コメント 5 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Java
スター
6.4k
フォーク
1.2k
平均マージ
1日 23時間
マージ済み PR(30日)
115

説明

查询可以,聚合出错
```
IoTDB> select * from root.sg.JIN_TNC order by Time desc limit 10
+-----------------------------+--------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------------+
| Time|root.sg.JIN_TNC.IO10|root.sg.JIN_TNC.IO1|root.sg.JIN_TNC.IO3|root.sg.JIN_TNC.IO2|root.sg.JIN_TNC.IO5|root.sg.JIN_TNC.IO4|root.sg.JIN_TNC.IO7|root.sg.JIN_TNC.IO6|root.sg.JIN_TNC.IO9|root.sg.JIN_TNC.IO8| root.sg.JIN_TNC.tm|
+-----------------------------+--------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------------+
|2022-06-25T13:20:35.183+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:34+08:00|
|2022-06-25T13:20:35.026+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:33+08:00|
|2022-06-25T13:20:34.558+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:33+08:00|
|2022-06-25T13:20:34.417+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:33+08:00|
|2022-06-25T13:20:34.292+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:33+08:00|
|2022-06-25T13:20:34.151+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:33+08:00|
|2022-06-25T13:20:33.933+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:32+08:00|
|2022-06-25T13:20:33.776+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:32+08:00|
|2022-06-25T13:20:33.323+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:32+08:00|
|2022-06-25T13:20:33.183+08:00| 1.00| 0.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00| 1.00|2022-06-25T13:20:32+08:00|
+-----------------------------+--------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------------+
Total line number = 10
It costs 0.025s
IoTDB> select count(*) from root.sg.JIN_TNC
Msg: 500: [INTERNAL_SERVER_ERROR(500)] Exception occurred: "select count(*) from root.sg.JIN_TNC". executeStatement failed. java.nio.BufferUnderflowException
```

IOTDB中的报错信息
```
2022-06-25 13:20:50,547 [pool-15-IoTDB-RPC-Client-1] WARN o.a.i.d.u.ErrorHandlingUtils:61 - Status code: INTERNAL_SERVER_ERROR(500), operation: "select count(*) from root.sg.JIN_TNC". executeStatement failed
java.util.concurrent.ExecutionException: java.nio.BufferUnderflowException
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.iotdb.db.service.thrift.impl.TSServiceImpl.submitQueryTask(TSServiceImpl.java:785)
at org.apache.iotdb.db.service.thrift.impl.TSServiceImpl.executeStatement(TSServiceImpl.java:619)
at org.apache.iotdb.service.rpc.thrift.TSIService$Processor$executeStatement.getResult(TSIService.java:2853)
at org.apache.iotdb.service.rpc.thrift.TSIService$Processor$executeStatement.getResult(TSIService.java:2833)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:38)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:38)
at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:248)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.nio.BufferUnderflowException: null
at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:154)
at org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.readVarIntString(ReadWriteIOUtils.java:601)
at org.apache.iotdb.tsfile.file.metadata.MetadataIndexEntry.deserializeFrom(MetadataIndexEntry.java:66)
at org.apache.iotdb.tsfile.file.metadata.MetadataIndexNode.deserializeFrom(MetadataIndexNode.java:103)
at org.apache.iotdb.tsfile.read.TsFileSequenceReader.getLeafMetadataIndexPair(TsFileSequenceReader.java:480)
at org.apache.iotdb.tsfile.read.TsFileSequenceReader.readTimeseriesMetadata(TsFileSequenceReader.java:444)
at org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache.get(TimeSeriesMetadataCache.java:199)
at org.apache.iotdb.db.utils.FileLoaderUtils.loadTimeSeriesMetadata(FileLoaderUtils.java:104)
at org.apache.iotdb.db.query.reader.series.SeriesReader.loadTimeSeriesMetadata(SeriesReader.java:1125)
at org.apache.iotdb.db.query.reader.series.SeriesReader.unpackSeqTsFileResource(SeriesReader.java:1091)
at org.apache.iotdb.db.query.reader.series.SeriesReader.tryToUnpackAllOverlappedFilesToTimeSeriesMetadata(SeriesReader.java:1014)
at org.apache.iotdb.db.query.reader.series.SeriesReader.hasNextFile(SeriesReader.java:263)
at org.apache.iotdb.db.query.reader.series.SeriesAggregateReader.hasNextFile(SeriesAggregateReader.java:93)
at org.apache.iotdb.db.query.executor.AggregationExecutor.aggregateFromReader(AggregationExecutor.java:390)
at org.apache.iotdb.db.query.executor.AggregationExecutor.aggregateOneSeries(AggregationExecutor.java:304)
at org.apache.iotdb.db.query.executor.AggregationExecutor.aggregateOneSeries(AggregationExecutor.java:195)
at org.apache.iotdb.db.query.executor.AggregationExecutor.executeWithoutValueFilter(AggregationExecutor.java:149)
at org.apache.iotdb.db.query.executor.QueryRouter.aggregate(QueryRouter.java:123)
at org.apache.iotdb.db.qp.executor.PlanExecutor.processDataQuery(PlanExecutor.java:630)
at org.apache.iotdb.db.qp.executor.PlanExecutor.processQuery(PlanExecutor.java:258)
at org.apache.iotdb.db.service.basic.ServiceProvider.createQueryDataSet(ServiceProvider.java:264)
at org.apache.iotdb.db.service.thrift.impl.TSServiceImpl.executeQueryPlan(TSServiceImpl.java:821)
at org.apache.iotdb.db.service.thrift.impl.TSServiceImpl.access$000(TSServiceImpl.java:163)
at org.apache.iotdb.db.service.thrift.impl.TSServiceImpl$QueryTask.call(TSServiceImpl.java:221)
at org.apache.iotdb.db.service.thrift.impl.TSServiceImpl$QueryTask.call(TSServiceImpl.java:165)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
... 3 common frames omitted
```

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

データクエリが成功した後に `select count(*) from root.sg.JIN_TNC` を再現し、その後 `AggregationExecutor` から `SeriesReader`、`TsFileSequenceReader` までスタックを追跡します。`MetadataIndexEntry.deserializeFrom` と `MetadataIndexNode.deserializeFrom` のメタデータのデシリアライズを調査します。完了の条件は、報告されたデータに対する count クエリで `BufferUnderflowException` が発生しなくなることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java
領域
databases
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。