Skip to content

Commit 5c22891

Browse files
committed
fix multi-cf operations have not existed table go into dead loop
1 parent 739cdd4 commit 5c22891

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

src/main/java/com/alipay/oceanbase/rpc/protocol/payload/impl/execute/query/AbstractQueryStreamResult.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -240,16 +240,21 @@ protected ObPayload commonExecute(ObTableClient client, Logger logger,
240240
throw e;
241241
}
242242
} else if (e instanceof ObTableException) {
243-
if ((((ObTableException) e).getErrorCode() == ResultCodes.OB_TABLE_NOT_EXIST.errorCode || ((ObTableException) e)
244-
.getErrorCode() == ResultCodes.OB_NOT_SUPPORTED.errorCode || ((ObTableException) e)
245-
.getErrorCode() == ResultCodes.OB_SCHEMA_ERROR.errorCode)
246-
&& ((request instanceof ObTableQueryAsyncRequest && ((ObTableQueryAsyncRequest) request).getObTableQueryRequest().getTableQuery().isHbaseQuery())
247-
|| (request instanceof ObTableQueryRequest && ((ObTableQueryRequest) request).getTableQuery().isHbaseQuery()))
243+
if ((((ObTableException) e).getErrorCode() == ResultCodes.OB_TABLE_NOT_EXIST.errorCode
244+
|| ((ObTableException) e).getErrorCode() == ResultCodes.OB_NOT_SUPPORTED.errorCode || ((ObTableException) e)
245+
.getErrorCode() == ResultCodes.OB_SCHEMA_ERROR.errorCode)
246+
&& ((request instanceof ObTableQueryAsyncRequest && ((ObTableQueryAsyncRequest) request)
247+
.getObTableQueryRequest().getTableQuery().isHbaseQuery()) || (request instanceof ObTableQueryRequest && ((ObTableQueryRequest) request)
248+
.getTableQuery().isHbaseQuery()))
248249
&& client.getTableGroupInverted().get(indexTableName) != null) {
249250
// table not exists && hbase mode && table group exists , three condition both
250251
client.eraseTableGroupFromCache(tableName);
251-
indexTableName = client.tryGetTableNameFromTableGroupCache(tableName,
252-
true);
252+
String newIndexTableName = client.tryGetTableNameFromTableGroupCache(tableName, true);
253+
if (indexTableName.equalsIgnoreCase(newIndexTableName)) {
254+
throw new ObTableNotExistException("multi column-family operations contain not existed table name", ResultCodes.OB_ERR_UNKNOWN_TABLE.errorCode);
255+
} else {
256+
indexTableName = newIndexTableName;
257+
}
253258
}
254259
if (((ObTableException) e).isNeedRefreshTableEntry()) {
255260
needRefreshTableEntry = true;

src/main/java/com/alipay/oceanbase/rpc/table/ObTableClientLSBatchOpsImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,12 @@ public void partitionExecute(ObTableSingleOpResult[] results,
589589
// TABLE_NOT_EXIST + tableName is tableGroup + TableGroup cache is not empty
590590
// means tableGroupName cache need to refresh
591591
obTableClient.eraseTableGroupFromCache(tableName);
592-
realTableName = obTableClient.tryGetTableNameFromTableGroupCache(tableName, true);
592+
String newRealTableName = obTableClient.tryGetTableNameFromTableGroupCache(tableName, true);
593+
if (realTableName.equalsIgnoreCase(newRealTableName)) {
594+
throw new ObTableNotExistException("multi column-family operations contain not existed table name", ResultCodes.OB_ERR_UNKNOWN_TABLE.errorCode);
595+
} else {
596+
realTableName = newRealTableName;
597+
}
593598
}
594599
if (obTableClient.isRetryOnChangeMasterTimes()
595600
&& (tryTimes - 1) < obTableClient.getRuntimeRetryTimes()) {

0 commit comments

Comments
 (0)