2424import org .apache .iotdb .commons .client .exception .ClientManagerException ;
2525import org .apache .iotdb .commons .consensus .ConfigRegionId ;
2626import org .apache .iotdb .commons .exception .IoTDBRuntimeException ;
27+ import org .apache .iotdb .commons .exception .MetadataLeaseFencedException .LeaseFencedRetryPolicy ;
2728import org .apache .iotdb .commons .exception .SemanticException ;
2829import org .apache .iotdb .commons .schema .table .NonCommittableTsTable ;
2930import org .apache .iotdb .commons .schema .table .PreDeleteTsTable ;
@@ -102,8 +103,8 @@ public static ITableCache getInstance() {
102103 return DataNodeTableCacheHolder .INSTANCE ;
103104 }
104105
105- void failIfMetadataLeaseFenced () {
106- MetadataLeaseManager .getInstance ().failIfMetadataLeaseFenced ();
106+ void failIfMetadataLeaseFenced (final LeaseFencedRetryPolicy leaseFencedRetryPolicy ) {
107+ MetadataLeaseManager .getInstance ().failIfMetadataLeaseFenced (leaseFencedRetryPolicy );
107108 }
108109
109110 @ Override
@@ -180,7 +181,7 @@ public void preUpdateTable(String database, final TsTable table, final String ol
180181 database = PathUtils .unQualifyDatabaseName (database );
181182 readWriteLock .writeLock ().lock ();
182183 try {
183- failIfMetadataLeaseFenced ();
184+ failIfMetadataLeaseFenced (LeaseFencedRetryPolicy . RETRY_UNTIL_SUCCESS );
184185 specialStatusMap
185186 .computeIfAbsent (database , k -> new ConcurrentHashMap <>())
186187 .compute (
@@ -228,7 +229,7 @@ public void rollbackUpdateTable(String database, final String tableName, final S
228229 database = PathUtils .unQualifyDatabaseName (database );
229230 readWriteLock .writeLock ().lock ();
230231 try {
231- failIfMetadataLeaseFenced ();
232+ failIfMetadataLeaseFenced (LeaseFencedRetryPolicy . RETRY_UNTIL_SUCCESS );
232233 // if rollback the drop table procedure, do nothing,
233234 // wait for triggering the action of pull table from CN
234235 final TsTable table = getTableFromSpecialStatusMap (database , tableName );
@@ -299,7 +300,7 @@ public void commitUpdateTable(
299300 database = PathUtils .unQualifyDatabaseName (database );
300301 readWriteLock .writeLock ().lock ();
301302 try {
302- failIfMetadataLeaseFenced ();
303+ failIfMetadataLeaseFenced (LeaseFencedRetryPolicy . RETRY_UNTIL_SUCCESS );
303304 final TsTable newTable = getTableFromSpecialStatusMap (database , tableName );
304305 if (Objects .isNull (newTable )) {
305306 LOGGER .info (
@@ -422,7 +423,7 @@ public long getInstanceVersion() {
422423 public Map <String , Map <String , TsTable >> getTableSnapshot () {
423424 readWriteLock .readLock ().lock ();
424425 try {
425- failIfMetadataLeaseFenced ();
426+ failIfMetadataLeaseFenced (LeaseFencedRetryPolicy . RETRY_UNTIL_SUCCESS );
426427 return databaseTableMap .entrySet ().stream ()
427428 .collect (
428429 Collectors .toMap (
@@ -444,7 +445,8 @@ public Map<String, Map<String, TsTable>> getTableSnapshot() {
444445
445446 @ Override
446447 public TsTable getTableInWrite (final String database , final String tableName ) {
447- final TsTable result = getTableInCache (database , tableName );
448+ final TsTable result =
449+ getTableInCache (database , tableName , LeaseFencedRetryPolicy .RETRY_UNTIL_SUCCESS );
448450 return Objects .nonNull (result ) ? result : getTable (database , tableName , false );
449451 }
450452
@@ -459,21 +461,30 @@ public TsTable getTable(final String database, final String tableName) {
459461 */
460462 @ Override
461463 public TsTable getTable (String database , final String tableName , final boolean force ) {
464+ return getTable (database , tableName , force , LeaseFencedRetryPolicy .RETRY_UNTIL_SUCCESS );
465+ }
466+
467+ @ Override
468+ public TsTable getTable (
469+ String database ,
470+ final String tableName ,
471+ final boolean force ,
472+ final LeaseFencedRetryPolicy leaseFencedRetryPolicy ) {
462473 database = PathUtils .unQualifyDatabaseName (database );
463474 final AtomicReference <TableNodeStatus > tableStatusRef = new AtomicReference <>();
464475 final Map <String , Map <String , Long >> specialStatusMap =
465- mayGetTableInSpecialStatusMap (database , tableName , tableStatusRef );
476+ mayGetTableInSpecialStatusMap (database , tableName , tableStatusRef , leaseFencedRetryPolicy );
466477
467478 if (Objects .nonNull (specialStatusMap ) && !specialStatusMap .isEmpty ()) {
468479 Map <String , Map <String , TsTable >> fetchedTables =
469480 getTablesInConfigNode (specialStatusMap , tableStatusRef .get ());
470481 if (tableStatusRef .get () == TableNodeStatus .USING ) {
471- updateUsingTable (fetchedTables , specialStatusMap );
482+ updateUsingTable (fetchedTables , specialStatusMap , leaseFencedRetryPolicy );
472483 } else {
473- updateDeleteTable (fetchedTables , database , tableName );
484+ updateDeleteTable (fetchedTables , database , tableName , leaseFencedRetryPolicy );
474485 }
475486 }
476- final TsTable table = getTableInCache (database , tableName );
487+ final TsTable table = getTableInCache (database , tableName , leaseFencedRetryPolicy );
477488 if (Objects .isNull (table ) && force ) {
478489 CommonMetadataUtils .throwTableNotExistsException (database , tableName );
479490 }
@@ -483,10 +494,11 @@ public TsTable getTable(String database, final String tableName, final boolean f
483494 private Map <String , Map <String , Long >> mayGetTableInSpecialStatusMap (
484495 final String database ,
485496 final String tableName ,
486- final AtomicReference <TableNodeStatus > tableNodeStatus ) {
497+ final AtomicReference <TableNodeStatus > tableNodeStatus ,
498+ final LeaseFencedRetryPolicy leaseFencedRetryPolicy ) {
487499 readWriteLock .readLock ().lock ();
488500 try {
489- failIfMetadataLeaseFenced ();
501+ failIfMetadataLeaseFenced (leaseFencedRetryPolicy );
490502 final Map <String , Pair <TsTable , Long >> targetDatabaseMap = specialStatusMap .get (database );
491503 if (Objects .isNull (targetDatabaseMap )) {
492504 return null ;
@@ -560,10 +572,11 @@ private Map<String, Map<String, TsTable>> getTablesInConfigNode(
560572
561573 private void updateUsingTable (
562574 final Map <String , Map <String , TsTable >> fetchedTables ,
563- final Map <String , Map <String , Long >> previousVersions ) {
575+ final Map <String , Map <String , Long >> previousVersions ,
576+ final LeaseFencedRetryPolicy leaseFencedRetryPolicy ) {
564577 readWriteLock .writeLock ().lock ();
565578 try {
566- failIfMetadataLeaseFenced ();
579+ failIfMetadataLeaseFenced (leaseFencedRetryPolicy );
567580 final AtomicBoolean isUpdated = new AtomicBoolean (false );
568581 fetchedTables .forEach (
569582 (qualifiedDatabase , tableInfoMap ) -> {
@@ -618,10 +631,11 @@ private void updateUsingTable(
618631 private void updateDeleteTable (
619632 Map <String , Map <String , TsTable >> fetchedTables ,
620633 String targetDatabase ,
621- final String targetTable ) {
634+ final String targetTable ,
635+ final LeaseFencedRetryPolicy leaseFencedRetryPolicy ) {
622636 readWriteLock .writeLock ().lock ();
623637 try {
624- failIfMetadataLeaseFenced ();
638+ failIfMetadataLeaseFenced (leaseFencedRetryPolicy );
625639 boolean isUpdated = false ;
626640 boolean targetTableIsStillDeleting = false ;
627641
@@ -762,10 +776,13 @@ private String compareTable(final TsTable oldTable, final TsTable newTable) {
762776 return modified ? builder .toString () : DataNodeSchemaMessages .COMPARE_TABLE_NOT_MODIFIED ;
763777 }
764778
765- private TsTable getTableInCache (final String database , final String tableName ) {
779+ private TsTable getTableInCache (
780+ final String database ,
781+ final String tableName ,
782+ final LeaseFencedRetryPolicy leaseFencedRetryPolicy ) {
766783 readWriteLock .readLock ().lock ();
767784 try {
768- failIfMetadataLeaseFenced ();
785+ failIfMetadataLeaseFenced (leaseFencedRetryPolicy );
769786 final TsTable result =
770787 databaseTableMap .containsKey (database )
771788 ? databaseTableMap .get (database ).get (tableName )
@@ -779,7 +796,7 @@ private TsTable getTableInCache(final String database, final String tableName) {
779796 }
780797
781798 public boolean isDatabaseExist (final String database ) {
782- failIfMetadataLeaseFenced ();
799+ failIfMetadataLeaseFenced (LeaseFencedRetryPolicy . RETRY_UNTIL_SUCCESS );
783800 if (databaseTableMap .containsKey (database )) {
784801 return true ;
785802 }
@@ -788,7 +805,7 @@ public boolean isDatabaseExist(final String database) {
788805 .containsKey (database )) {
789806 readWriteLock .readLock ().lock ();
790807 try {
791- failIfMetadataLeaseFenced ();
808+ failIfMetadataLeaseFenced (LeaseFencedRetryPolicy . RETRY_UNTIL_SUCCESS );
792809 databaseTableMap .computeIfAbsent (database , k -> new ConcurrentHashMap <>());
793810 return true ;
794811 } finally {
0 commit comments