|
30 | 30 | import org.apache.iotdb.commons.utils.FileUtils; |
31 | 31 | import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource; |
32 | 32 | import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus; |
| 33 | +import org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.FileTimeIndex; |
33 | 34 | import org.apache.iotdb.pipe.api.customizer.parameter.PipeParameterValidator; |
34 | 35 | import org.apache.iotdb.pipe.api.customizer.parameter.PipeParameters; |
35 | 36 |
|
@@ -143,6 +144,36 @@ public void testTsFileResourceCoveredByPattern() throws Exception { |
143 | 144 | } |
144 | 145 | } |
145 | 146 |
|
| 147 | + @Test |
| 148 | + public void testMissingTsFileResourceDoesNotBlockHistoricalExtraction() throws Exception { |
| 149 | + final File tempDir = Files.createTempDirectory("pipeHistoricalMissingResource").toFile(); |
| 150 | + |
| 151 | + try { |
| 152 | + final PipeHistoricalDataRegionTsFileSource source = |
| 153 | + new PipeHistoricalDataRegionTsFileSource(); |
| 154 | + final TsFileResource resource = createTsFileResource(tempDir, "missing-resource.tsfile"); |
| 155 | + resource.setTimeIndex(new FileTimeIndex()); |
| 156 | + |
| 157 | + setPrivateField(source, "pipeName", "pipe"); |
| 158 | + setPrivateField(source, "dataRegionId", 1); |
| 159 | + setPrivateField(source, "pipePattern", new PrefixPipePattern("root.**")); |
| 160 | + |
| 161 | + final Method mayOverlapMethod = |
| 162 | + PipeHistoricalDataRegionTsFileSource.class.getDeclaredMethod( |
| 163 | + "mayTsFileResourceOverlappedWithPattern", TsFileResource.class); |
| 164 | + mayOverlapMethod.setAccessible(true); |
| 165 | + Assert.assertTrue((Boolean) mayOverlapMethod.invoke(source, resource)); |
| 166 | + |
| 167 | + final Method coveredMethod = |
| 168 | + PipeHistoricalDataRegionTsFileSource.class.getDeclaredMethod( |
| 169 | + "isTsFileResourceCoveredByPattern", TsFileResource.class); |
| 170 | + coveredMethod.setAccessible(true); |
| 171 | + Assert.assertFalse((Boolean) coveredMethod.invoke(source, resource)); |
| 172 | + } finally { |
| 173 | + FileUtils.deleteFileOrDirectory(tempDir); |
| 174 | + } |
| 175 | + } |
| 176 | + |
146 | 177 | private static void assertMayTsFileContainUnprocessedData( |
147 | 178 | final File tempDir, |
148 | 179 | final String fileName, |
|
0 commit comments