[
https://issues.apache.org/jira/browse/IOTDB-2990?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Haonan Hou reassigned IOTDB-2990:
---------------------------------
Assignee: Yuan Tian
> SeriesReader读取Chunk时错误地加载下一份文件
> ------------------------------
>
> Key: IOTDB-2990
> URL: https://issues.apache.org/jira/browse/IOTDB-2990
> Project: Apache IoTDB
> Issue Type: Bug
> Components: Core/Query
> Reporter: Dongming Zhao
> Assignee: Yuan Tian
> Priority: Minor
>
> Query模块中SeriesReader.hasNextChunk()第339行
> {code:java}
> while (firstChunkMetadata == null && (!cachedChunkMetadata.isEmpty() ||
> hasNextFile()))
> {
> initFirstChunkMetadata();
> }
> {code}
> 调用了hasNextFile()接口,这决定了当firstChunkMetadata为null,即上一个Chunk已经被消费掉,且cachedChunkMetadata为空,即上一个已经是最后一个Chunk时,该方法会尝试加载下一份文件而不是返回false。
> 以一种极端情况为例,SeriesReader获得了n份有序文件,每份文件有且仅有1个Chunk。则当我使用类似下边这样的代码进行访问时,第一次调用hasNextChunk()解开第一份文件,因为仅有一个Chunk所以cachedChunkMetadata为空,随后该Chunk被消费掉,firstChunkMetadata被解开并置为null,在完成了所有Page的读取之后,第二次调用hasNextChunk()即满足以上所述条件,调用了hasNextFile()接口解开了下一份文件,依次类推。最终一下代码实现的效果是,最外层File循环仅跑了一次,而Chunk循环跑了n次,每次都会解开下一份文件,这与预期的运行效果并不一致。
> {code:java}
> while(seriesReader.hasNextFile()) {
> while(seriesReader.hasNextChunk()) {
> while (seriesReader.hasNextPage()) {
> BatchData currentPage = seriesReader.nextPage()
> // do something
> }
> }
> }{code}
--
This message was sent by Atlassian Jira
(v8.20.7#820007)