[improvement](group commit) make get column function more reliable when replaying wal (#28900)

This commit is contained in:
huanghaibin
2023-12-24 21:17:39 +08:00
committed by GitHub
parent 7107415230
commit 145683ccdb
4 changed files with 53 additions and 39 deletions

View File

@ -114,6 +114,7 @@ import org.apache.doris.thrift.TCheckAuthRequest;
import org.apache.doris.thrift.TCheckAuthResult;
import org.apache.doris.thrift.TColumnDef;
import org.apache.doris.thrift.TColumnDesc;
import org.apache.doris.thrift.TColumnInfo;
import org.apache.doris.thrift.TCommitTxnRequest;
import org.apache.doris.thrift.TCommitTxnResult;
import org.apache.doris.thrift.TConfirmUnusedRemoteFilesRequest;
@ -240,7 +241,6 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
@ -3280,40 +3280,38 @@ public class FrontendServiceImpl implements FrontendService.Iface {
@Override
public TGetColumnInfoResult getColumnInfo(TGetColumnInfoRequest request) {
TGetColumnInfoResult result = new TGetColumnInfoResult();
TStatus errorStatus = new TStatus(TStatusCode.RUNTIME_ERROR);
TStatus status = new TStatus(TStatusCode.OK);
result.setStatus(status);
long dbId = request.getDbId();
long tableId = request.getTableId();
if (!Env.getCurrentEnv().isMaster()) {
errorStatus.setStatusCode(TStatusCode.NOT_MASTER);
errorStatus.addToErrorMsgs(NOT_MASTER_ERR_MSG);
status.setStatusCode(TStatusCode.NOT_MASTER);
status.addToErrorMsgs(NOT_MASTER_ERR_MSG);
LOG.error("failed to getColumnInfo: {}", NOT_MASTER_ERR_MSG);
return result;
}
Database db = Env.getCurrentEnv().getInternalCatalog().getDbNullable(dbId);
Database db = Env.getCurrentInternalCatalog().getDbNullable(dbId);
if (db == null) {
errorStatus.setErrorMsgs(Lists.newArrayList(String.format("dbId=%d is not exists", dbId)));
result.setStatus(errorStatus);
status.setStatusCode(TStatusCode.NOT_FOUND);
status.setErrorMsgs(Lists.newArrayList(String.format("dbId=%d is not exists", dbId)));
return result;
}
Table table;
try {
table = db.getTable(tableId).get();
} catch (NoSuchElementException e) {
errorStatus.setErrorMsgs(
Table table = db.getTableNullable(tableId);
if (table == null) {
status.setStatusCode(TStatusCode.NOT_FOUND);
status.setErrorMsgs(
(Lists.newArrayList(String.format("dbId=%d tableId=%d is not exists", dbId, tableId))));
result.setStatus(errorStatus);
return result;
}
StringBuilder sb = new StringBuilder();
List<TColumnInfo> columnsResult = Lists.newArrayList();
for (Column column : table.getBaseSchema(true)) {
sb.append(column.getName() + ":" + column.getUniqueId() + ",");
final TColumnInfo info = new TColumnInfo();
info.setColumnName(column.getName());
info.setColumnId(column.getUniqueId());
columnsResult.add(info);
}
String columnInfo = sb.toString();
columnInfo = columnInfo.substring(0, columnInfo.length() - 1);
result.setStatus(new TStatus(TStatusCode.OK));
result.setColumnInfo(columnInfo);
result.setColumns(columnsResult);
return result;
}