Xiangdong Huang created IOTDB-5228:
--------------------------------------

             Summary: NPE if the file does not exist when create 
TsFileSequenceReader instance 
                 Key: IOTDB-5228
                 URL: https://issues.apache.org/jira/browse/IOTDB-5228
             Project: Apache IoTDB
          Issue Type: Bug
            Reporter: Xiangdong Huang


When create a TsFileSequenceReader, an exception will be thrown if the file 
does not exist, and the reason of the exception can not be caught.

 

Current TsFileSequenceReader:
{code:java}
public TsFileSequenceReader(String file, boolean loadMetadataSize) throws 
IOException {
  if (resourceLogger.isDebugEnabled()) {
    resourceLogger.debug("{} reader is opened. {}", file, getClass().getName());
  }
  this.file = file;
  tsFileInput = FSFactoryProducer.getFileInputFactory().getTsFileInput(file);
  try {
    if (loadMetadataSize) {
      loadMetadataSize();
    }
  } catch (Throwable e) {
    tsFileInput.close();
    throw e;
  }
} {code}
 

while TsFileInput:
{code:java}
public TsFileInput getTsFileInput(String filePath) {
  try {
    return new LocalTsFileInput(Paths.get(filePath));
  } catch (IOException e) {
    logger.error("Failed to get TsFile input of file: {}, ", filePath, e);
    return null;
  }
} {code}
 

exception example:
{code:java}
java.lang.NullPointerException: Cannot invoke 
"org.apache.iotdb.tsfile.read.reader.TsFileInput.close()" because 
"this.tsFileInput" is null    at 
org.apache.iotdb.tsfile.read.TsFileSequenceReader.<init>(TsFileSequenceReader.java:143)
    at 
org.apache.iotdb.tsfile.read.TsFileSequenceReader.<init>(TsFileSequenceReader.java:123)
    at 
org.apache.iotdb.cross.tests.tools.tsfile.ExportTsFileTestIT.readTsFile(ExportTsFileTestIT.java:89)
    at 
org.apache.iotdb.cross.tests.tools.tsfile.ExportTsFileTestIT.testExport(ExportTsFileTestIT.java:78)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)
    at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at 
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at 
org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at 
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    at 
com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
    at 
com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
    at 
com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
    at 
com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) {code}
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to