4343import org .apache .iotdb .rpc .TSStatusCode ;
4444
4545import org .apache .commons .io .FileUtils ;
46- import org .apache .tsfile .utils .Pair ;
4746import org .slf4j .Logger ;
4847import org .slf4j .LoggerFactory ;
4948
@@ -84,12 +83,13 @@ public int getCurrentAllowedPendingSize() {
8483 return MAX_PENDING_SIZE - pendingQueue .size ();
8584 }
8685
87- public void tryTriggerTsFileLoad (String absolutePath , boolean isGeneratedByPipe ) {
86+ public void tryTriggerTsFileLoad (
87+ String absolutePath , boolean isTabletMode , boolean isGeneratedByPipe ) {
8888 if (CommonDescriptor .getInstance ().getConfig ().isReadOnly ()) {
8989 return ;
9090 }
9191
92- if (pendingQueue .enqueue (absolutePath , isGeneratedByPipe )) {
92+ if (pendingQueue .enqueue (absolutePath , isTabletMode , isGeneratedByPipe )) {
9393 initFailDirIfNecessary ();
9494 adjustExecutorIfNecessary ();
9595 }
@@ -165,44 +165,44 @@ private void tryLoadPendingTsFiles() {
165165
166166 try {
167167 while (true ) {
168- final Optional <Pair < String , Boolean >> filePair = tryGetNextPendingFile ();
169- if (!filePair .isPresent ()) {
168+ final Optional <ActiveLoadPendingQueue . ActiveLoadEntry > loadEntry = tryGetNextPendingFile ();
169+ if (!loadEntry .isPresent ()) {
170170 return ;
171171 }
172172
173173 try {
174- final TSStatus result = loadTsFile (filePair .get (), session );
174+ final TSStatus result = loadTsFile (loadEntry .get (), session );
175175 if (result .getCode () == TSStatusCode .SUCCESS_STATUS .getStatusCode ()
176176 || result .getCode () == TSStatusCode .REDIRECTION_RECOMMEND .getStatusCode ()) {
177177 LOGGER .info (
178178 "Successfully auto load tsfile {} (isGeneratedByPipe = {})" ,
179- filePair .get ().getLeft (),
180- filePair .get ().getRight ());
179+ loadEntry .get ().getFile (),
180+ loadEntry .get ().isGeneratedByPipe ());
181181 } else {
182- handleLoadFailure (filePair .get (), result );
182+ handleLoadFailure (loadEntry .get (), result );
183183 }
184184 } catch (final FileNotFoundException e ) {
185- handleFileNotFoundException (filePair .get ());
185+ handleFileNotFoundException (loadEntry .get ());
186186 } catch (final Exception e ) {
187- handleOtherException (filePair .get (), e );
187+ handleOtherException (loadEntry .get (), e );
188188 } finally {
189- pendingQueue .removeFromLoading (filePair .get ().getLeft ());
189+ pendingQueue .removeFromLoading (loadEntry .get ().getFile ());
190190 }
191191 }
192192 } finally {
193193 SESSION_MANAGER .closeSession (session , Coordinator .getInstance ()::cleanupQueryExecution );
194194 }
195195 }
196196
197- private Optional <Pair < String , Boolean > > tryGetNextPendingFile () {
197+ private Optional <ActiveLoadPendingQueue . ActiveLoadEntry > tryGetNextPendingFile () {
198198 final long maxRetryTimes =
199199 Math .max (1 , IOTDB_CONFIG .getLoadActiveListeningCheckIntervalSeconds () << 1 );
200200 long currentRetryTimes = 0 ;
201201
202202 while (true ) {
203- final Pair < String , Boolean > filePair = pendingQueue .dequeueFromPending ();
204- if (Objects .nonNull (filePair )) {
205- return Optional .of (filePair );
203+ final ActiveLoadPendingQueue . ActiveLoadEntry entry = pendingQueue .dequeueFromPending ();
204+ if (Objects .nonNull (entry )) {
205+ return Optional .of (entry );
206206 }
207207
208208 LockSupport .parkNanos (TimeUnit .SECONDS .toNanos (1 ));
@@ -213,17 +213,20 @@ private Optional<Pair<String, Boolean>> tryGetNextPendingFile() {
213213 }
214214 }
215215
216- private TSStatus loadTsFile (final Pair <String , Boolean > filePair , final IClientSession session )
216+ private TSStatus loadTsFile (
217+ final ActiveLoadPendingQueue .ActiveLoadEntry entry , final IClientSession session )
217218 throws FileNotFoundException {
218- final LoadTsFileStatement statement = new LoadTsFileStatement (filePair . getLeft ());
219+ final LoadTsFileStatement statement = new LoadTsFileStatement (entry . getFile ());
219220 final List <File > files = statement .getTsFiles ();
220221
221222 // It should be noted here that the instructions in this code block do not need to use the
222223 // DataBase, so the DataBase is assigned a value of null. If the DataBase is used later, an
223224 // exception will be thrown.
224225 final File parentFile ;
225226 statement .setDatabase (
226- files .isEmpty () || (parentFile = files .get (0 ).getParentFile ()) == null
227+ files .isEmpty ()
228+ || !entry .isTableModel ()
229+ || (parentFile = files .get (0 ).getParentFile ()) == null
227230 ? null
228231 : parentFile .getName ());
229232 statement .setDeleteAfterLoad (true );
@@ -232,7 +235,7 @@ private TSStatus loadTsFile(final Pair<String, Boolean> filePair, final IClientS
232235 statement .setAutoCreateDatabase (
233236 IoTDBDescriptor .getInstance ().getConfig ().isAutoCreateSchemaEnabled ());
234237 return executeStatement (
235- filePair . getRight () ? new PipeEnrichedStatement (statement ) : statement , session );
238+ entry . isGeneratedByPipe () ? new PipeEnrichedStatement (statement ) : statement , session );
236239 }
237240
238241 private TSStatus executeStatement (final Statement statement , final IClientSession session ) {
@@ -254,34 +257,35 @@ private TSStatus executeStatement(final Statement statement, final IClientSessio
254257 }
255258 }
256259
257- private void handleLoadFailure (final Pair < String , Boolean > filePair , final TSStatus status ) {
258- if (! ActiveLoadFailedMessageHandler . isExceptionMessageShouldRetry (
259- filePair , status .getMessage ())) {
260+ private void handleLoadFailure (
261+ final ActiveLoadPendingQueue . ActiveLoadEntry entry , final TSStatus status ) {
262+ if (! ActiveLoadFailedMessageHandler . isExceptionMessageShouldRetry ( entry , status .getMessage ())) {
260263 LOGGER .warn (
261264 "Failed to auto load tsfile {} (isGeneratedByPipe = {}), status: {}. File will be moved to fail directory." ,
262- filePair . getLeft (),
263- filePair . getRight (),
265+ entry . getFile (),
266+ entry . isGeneratedByPipe (),
264267 status );
265- removeFileAndResourceAndModsToFailDir (filePair . getLeft ());
268+ removeFileAndResourceAndModsToFailDir (entry . getFile ());
266269 }
267270 }
268271
269- private void handleFileNotFoundException (final Pair < String , Boolean > filePair ) {
272+ private void handleFileNotFoundException (final ActiveLoadPendingQueue . ActiveLoadEntry entry ) {
270273 LOGGER .warn (
271274 "Failed to auto load tsfile {} (isGeneratedByPipe = {}) due to file not found, will skip this file." ,
272- filePair . getLeft (),
273- filePair . getRight ());
274- removeFileAndResourceAndModsToFailDir (filePair . getLeft ());
275+ entry . getFile (),
276+ entry . isGeneratedByPipe ());
277+ removeFileAndResourceAndModsToFailDir (entry . getFile ());
275278 }
276279
277- private void handleOtherException (final Pair <String , Boolean > filePair , final Exception e ) {
278- if (!ActiveLoadFailedMessageHandler .isExceptionMessageShouldRetry (filePair , e .getMessage ())) {
280+ private void handleOtherException (
281+ final ActiveLoadPendingQueue .ActiveLoadEntry entry , final Exception e ) {
282+ if (!ActiveLoadFailedMessageHandler .isExceptionMessageShouldRetry (entry , e .getMessage ())) {
279283 LOGGER .warn (
280284 "Failed to auto load tsfile {} (isGeneratedByPipe = {}) because of an unexpected exception. File will be moved to fail directory." ,
281- filePair . getLeft (),
282- filePair . getRight (),
285+ entry . getFile (),
286+ entry . isGeneratedByPipe (),
283287 e );
284- removeFileAndResourceAndModsToFailDir (filePair . getLeft ());
288+ removeFileAndResourceAndModsToFailDir (entry . getFile ());
285289 }
286290 }
287291
0 commit comments