You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@iotdb.apache.org by "Dongming Zhao (Jira)" <ji...@apache.org> on 2022/04/23 10:42:00 UTC
[jira] [Created] (IOTDB-2990) SeriesReader读取Chunk时错误地加载下一份文件
Dongming Zhao created IOTDB-2990:
------------------------------------
Summary: 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
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)