@@ -108,6 +108,67 @@ public void testFallbackToQueryForRemainingDevicesWhenScanParserHitsCorruption()
108108 Assert .assertEquals (loadedPointCountBeforeCorruption , loadedPointCountAfterFallback );
109109 }
110110
111+ @ Test
112+ public void testFallbackToQueryWhenFirstNonAlignedDeviceIsCorrupted () throws Exception {
113+ tsFile = new File ("load-tree-query-fallback-corrupted-first-non-aligned-device.tsfile" );
114+ writeTsFile (tsFile );
115+ corruptMeasurementChunk (tsFile , DEVICE_0 , "s0" );
116+
117+ Assert .assertTrue ("Expected scan parser to fail after corruption." , scanParserFails (tsFile ));
118+
119+ final Map <String , Integer > pointCountByTimeseries = new HashMap <>();
120+ final LoadTreeStatementDataTypeConvertExecutionVisitor visitor =
121+ new LoadTreeStatementDataTypeConvertExecutionVisitor (
122+ statement -> {
123+ collectLoadedPointsByTimeseries (statement , pointCountByTimeseries );
124+ return new TSStatus (TSStatusCode .SUCCESS_STATUS .getStatusCode ());
125+ });
126+
127+ final Optional <TSStatus > status =
128+ visitor .visitLoadFile (LoadTsFileStatement .createUnchecked (tsFile .getAbsolutePath ()), null );
129+
130+ Assert .assertTrue (status .isPresent ());
131+ Assert .assertEquals (TSStatusCode .SUCCESS_STATUS .getStatusCode (), status .get ().getCode ());
132+
133+ Assert .assertTrue (
134+ pointCountByTimeseries .getOrDefault (DEVICE_0 + ".s0" , 0 ) < ROW_COUNT_PER_DEVICE );
135+ assertMeasurementLoadedCompletely (pointCountByTimeseries , DEVICE_0 , 1 );
136+ assertMeasurementLoadedCompletely (pointCountByTimeseries , DEVICE_1 , 0 );
137+ assertMeasurementLoadedCompletely (pointCountByTimeseries , DEVICE_1 , 1 );
138+ assertMeasurementLoadedCompletely (pointCountByTimeseries , DEVICE_2 , 0 );
139+ assertMeasurementLoadedCompletely (pointCountByTimeseries , DEVICE_2 , 1 );
140+ }
141+
142+ @ Test
143+ public void testFallbackDoesNotReloadCompletedMeasurementsOfCurrentNonAlignedDevice ()
144+ throws Exception {
145+ tsFile = new File ("load-tree-query-fallback-corrupted-current-non-aligned-device.tsfile" );
146+ writeTsFile (tsFile );
147+ corruptMeasurementChunk (tsFile , DEVICE_1 , "s1" );
148+
149+ Assert .assertTrue ("Expected scan parser to fail after corruption." , scanParserFails (tsFile ));
150+
151+ final Map <String , Integer > pointCountByTimeseries = new HashMap <>();
152+ final LoadTreeStatementDataTypeConvertExecutionVisitor visitor =
153+ new LoadTreeStatementDataTypeConvertExecutionVisitor (
154+ statement -> {
155+ collectLoadedPointsByTimeseries (statement , pointCountByTimeseries );
156+ return new TSStatus (TSStatusCode .SUCCESS_STATUS .getStatusCode ());
157+ });
158+
159+ final Optional <TSStatus > status =
160+ visitor .visitLoadFile (LoadTsFileStatement .createUnchecked (tsFile .getAbsolutePath ()), null );
161+
162+ Assert .assertTrue (status .isPresent ());
163+ Assert .assertEquals (TSStatusCode .SUCCESS_STATUS .getStatusCode (), status .get ().getCode ());
164+
165+ assertMeasurementLoadedCompletely (pointCountByTimeseries , DEVICE_1 , 0 );
166+ Assert .assertTrue (
167+ pointCountByTimeseries .getOrDefault (DEVICE_1 + ".s1" , 0 ) < ROW_COUNT_PER_DEVICE );
168+ assertMeasurementLoadedCompletely (pointCountByTimeseries , DEVICE_2 , 0 );
169+ assertMeasurementLoadedCompletely (pointCountByTimeseries , DEVICE_2 , 1 );
170+ }
171+
111172 @ Test
112173 public void testFallbackToQueryForRemainingMeasurementsOfCurrentAlignedDevice () throws Exception {
113174 CommonDescriptor .getInstance ().getConfig ().setPipeMaxReaderChunkSize (0 );
0 commit comments