[ 
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)

Reply via email to