Skip to content

Commit 2ebc250

Browse files
authored
fix addr expired throw (#292)
1 parent 78f5292 commit 2ebc250

File tree

1 file changed

+41
-20
lines changed

1 file changed

+41
-20
lines changed

src/main/java/com/alipay/oceanbase/rpc/ObTableClient.java

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)