Skip to content

Commit df23610

Browse files
committed
Capture exceptions in the refreshIndexInfo and do syncRefreshMetadata
1 parent dce57a2 commit df23610

File tree

2 files changed

+33
-10
lines changed

2 files changed

+33
-10
lines changed

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

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,16 +1144,35 @@ public ObIndexInfo getOrRefreshIndexInfo(final String indexTableName, boolean fo
11441144
int refreshTryTimes = tableEntryRefreshTryTimes > serverSize ? serverSize
11451145
: tableEntryRefreshTryTimes;
11461146
for (int i = 0; i < refreshTryTimes; i++) {
1147-
ObServerAddr serverAddr = serverRoster.getServer(serverAddressPriorityTimeout,
1148-
serverAddressCachingTimeout);
1149-
indexInfo = getIndexInfoFromRemote(serverAddr, sysUA,
1150-
tableEntryAcquireConnectTimeout, tableEntryAcquireSocketTimeout,
1151-
indexTableName);
1152-
if (indexInfo != null) {
1153-
indexinfos.put(indexTableName, indexInfo);
1154-
} else {
1155-
RUNTIME.error("get index info from remote is null, indexTableName: {}",
1156-
indexTableName);
1147+
try {
1148+
ObServerAddr serverAddr = serverRoster.getServer(serverAddressPriorityTimeout,
1149+
serverAddressCachingTimeout);
1150+
indexInfo = getIndexInfoFromRemote(serverAddr, sysUA,
1151+
tableEntryAcquireConnectTimeout, tableEntryAcquireSocketTimeout,
1152+
indexTableName);
1153+
if (indexInfo != null) {
1154+
indexinfos.put(indexTableName, indexInfo);
1155+
} else {
1156+
RUNTIME.error("get index info from remote is null, indexTableName: {}",
1157+
indexTableName);
1158+
}
1159+
} catch (ObTableServerCacheExpiredException e) {
1160+
RUNTIME.error("get index info from remote meet exception", e);
1161+
syncRefreshMetadata(false);
1162+
} catch (ObTableEntryRefreshException e) {
1163+
RUNTIME.error("get index info from remote meet exception", e);
1164+
if (tableEntryRefreshContinuousFailureCount.incrementAndGet() > tableEntryRefreshContinuousFailureCeiling) {
1165+
logger.error(LCD.convert("01-00019"),
1166+
tableEntryRefreshContinuousFailureCeiling);
1167+
syncRefreshMetadata(false);
1168+
tableEntryRefreshContinuousFailureCount.set(0);
1169+
} else if (e.isConnectInactive()) {
1170+
syncRefreshMetadata(false);
1171+
tableEntryRefreshContinuousFailureCount.set(0);
1172+
}
1173+
} catch (Throwable t) {
1174+
RUNTIME.error("getOrRefreshTableEntry meet exception", t);
1175+
throw t;
11571176
}
11581177
}
11591178
return indexInfo;

src/main/java/com/alipay/oceanbase/rpc/location/LocationUtil.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,6 +1050,10 @@ public static ObIndexInfo getIndexInfoFromRemote(ObServerAddr obServerAddr, ObUs
10501050
} else {
10511051
throw new ObTableEntryRefreshException("index is not exist");
10521052
}
1053+
} catch (SQLException e) {
1054+
// cannot execute sql, maybe some of the observers have been killed
1055+
RUNTIME.error(LCD.convert("01-00010"), indexTableName, e.getMessage());
1056+
throw new ObTableEntryRefreshException("fail to get index info from remote", e, true);
10531057
} catch (Exception e) {
10541058
if (e instanceof ObTableEntryRefreshException) {
10551059
throw new ObTableEntryRefreshException(format(

0 commit comments

Comments
 (0)