@@ -1343,7 +1343,7 @@ private TableEntry refreshTableEntry(TableEntry tableEntry, String tableName)
13431343 return refreshTableEntry (tableEntry , tableName , false );
13441344 }
13451345
1346- public TableEntry refreshTableLocationByTabletId (TableEntry tableEntry , String tableName , Long tabletId ) throws ObTableAuthException {
1346+ public TableEntry refreshTableLocationByTabletId (TableEntry tableEntry , String tableName , Long tabletId ) throws Exception {
13471347 TableEntryKey tableEntryKey = new TableEntryKey (clusterName , tenantName , database , tableName );
13481348 try {
13491349 if (tableEntry == null ) {
@@ -1380,30 +1380,51 @@ public TableEntry refreshTableLocationByTabletId(TableEntry tableEntry, String t
13801380 if (currentTime - lastRefreshTime < tableEntryRefreshIntervalCeiling ) {
13811381 return tableEntry ;
13821382 }
1383-
1384- tableEntry = loadTableEntryLocationWithPriority (
1385- serverRoster ,
1386- tableEntryKey ,
1387- tableEntry ,
1388- tabletId ,
1389- tableEntryAcquireConnectTimeout ,
1390- tableEntryAcquireSocketTimeout ,
1391- serverAddressPriorityTimeout ,
1392- serverAddressCachingTimeout ,
1393- sysUA
1394- );
1395-
1396- tableEntry .prepareForWeakRead (serverRoster .getServerLdcLocation ());
1397-
1383+ for (int i = 0 ; i < tableEntryRefreshTryTimes ; i ++) {
1384+ try {
1385+ tableEntry = loadTableEntryLocationWithPriority (
1386+ serverRoster ,
1387+ tableEntryKey ,
1388+ tableEntry ,
1389+ tabletId ,
1390+ tableEntryAcquireConnectTimeout ,
1391+ tableEntryAcquireSocketTimeout ,
1392+ serverAddressPriorityTimeout ,
1393+ serverAddressCachingTimeout ,
1394+ sysUA
1395+ );
1396+ tableEntry .prepareForWeakRead (serverRoster .getServerLdcLocation ());
1397+ break ;
1398+
1399+ } catch (ObTableNotExistException e ) {
1400+ RUNTIME .error ("RefreshTableEntry encountered an exception" , e );
1401+ throw e ;
1402+ } catch (ObTableServerCacheExpiredException e ) {
1403+ RUNTIME .warn ("RefreshTableEntry encountered an exception" , e );
1404+ syncRefreshMetadata ();
1405+ tableEntryRefreshContinuousFailureCount .set (0 );
1406+ } catch (ObTableEntryRefreshException e ) {
1407+ RUNTIME .error ("getOrRefreshTableEntry meet exception" , e );
1408+ // if the problem is the lack of row key name, throw directly
1409+ if (tableRowKeyElement .get (tableName ) == null ) {
1410+ throw e ;
1411+ }
1412+ if (tableEntryRefreshContinuousFailureCount .incrementAndGet () > tableEntryRefreshContinuousFailureCeiling ) {
1413+ logger .error (LCD .convert ("01-00019" ),
1414+ tableEntryRefreshContinuousFailureCeiling );
1415+ syncRefreshMetadata ();
1416+ tableEntryRefreshContinuousFailureCount .set (0 );
1417+ }
1418+ } catch (Throwable t ) {
1419+ RUNTIME .error ("getOrRefreshTableEntry meet exception" , t );
1420+ throw t ;
1421+ }
1422+ }
13981423 } finally {
13991424 if (acquired ) {
14001425 lock .unlock ();
14011426 }
14021427 }
1403-
1404- } catch (ObTableNotExistException | ObTableServerCacheExpiredException e ) {
1405- RUNTIME .error ("RefreshTableEntry encountered an exception" , e );
1406- throw e ;
14071428 } catch (Exception e ) {
14081429 String errorMsg = String .format ("Failed to get table entry. Key=%s, TabletId=%d, message=%s" ,
14091430 tableEntryKey , tabletId , e .getMessage ());
0 commit comments