Skip to content

Commit 9cccdd2

Browse files
committed
fix check expired nullpointer, add login-failed ip into suspect list
1 parent 918ba45 commit 9cccdd2

File tree

5 files changed

+19
-25
lines changed

5 files changed

+19
-25
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,12 +1184,12 @@ public Row transformToRow(String tableName, Object[] rowkey) throws Exception {
11841184
public void dealWithRpcTimeoutForSingleTablet(ObServerAddr addr, String tableName, long tabletId) throws Exception {
11851185
tableRoute.refreshPartitionLocation(tableName, tabletId, null);
11861186
RouteTableRefresher.SuspectObServer suspectAddr = new RouteTableRefresher.SuspectObServer(addr);
1187-
tableRoute.addIntoSuspectIPs(suspectAddr);
1187+
RouteTableRefresher.addIntoSuspectIPs(suspectAddr);
11881188
}
11891189
public void dealWithRpcTimeoutForBatchTablet(ObServerAddr addr, String tableName) throws Exception {
11901190
tableRoute.refreshTabletLocationBatch(tableName);
11911191
RouteTableRefresher.SuspectObServer suspectAddr = new RouteTableRefresher.SuspectObServer(addr);
1192-
tableRoute.addIntoSuspectIPs(suspectAddr);
1192+
RouteTableRefresher.addIntoSuspectIPs(suspectAddr);
11931193
}
11941194

11951195
/**

src/main/java/com/alipay/oceanbase/rpc/bolt/transport/ObTableConnection.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.alipay.oceanbase.rpc.ObGlobal;
2121
import com.alipay.oceanbase.rpc.exception.*;
2222
import com.alipay.oceanbase.rpc.location.LocationUtil;
23+
import com.alipay.oceanbase.rpc.location.model.RouteTableRefresher;
2324
import com.alipay.oceanbase.rpc.protocol.payload.impl.login.ObTableLoginRequest;
2425
import com.alipay.oceanbase.rpc.protocol.payload.impl.login.ObTableLoginResult;
2526
import com.alipay.oceanbase.rpc.table.ObTable;
@@ -115,6 +116,8 @@ private boolean connect() throws Exception {
115116
MONITOR.info(logMessage(null, "CONNECT", endpoint, System.currentTimeMillis() - start));
116117

117118
if (tries >= maxTryTimes) {
119+
RouteTableRefresher.SuspectObServer suspectAddr = new RouteTableRefresher.SuspectObServer(obTable.getObServerAddr());
120+
RouteTableRefresher.addIntoSuspectIPs(suspectAddr);
118121
LOGGER.warn("connect failed after max " + maxTryTimes + " tries "
119122
+ TraceUtil.formatIpPort(obTable));
120123
throw new ObTableServerConnectException("connect failed after max " + maxTryTimes
@@ -252,7 +255,7 @@ public void reConnectAndLogin(String msg) throws ObTableException {
252255
try {
253256
// 1. check the connection is available, force to close it
254257
if (checkAvailable()) {
255-
LOGGER.warn("The connection would be closed and reconnected if: "
258+
LOGGER.warn("The connection would be closed and reconnected is: "
256259
+ connection.getUrl());
257260
close();
258261
}

src/main/java/com/alipay/oceanbase/rpc/location/model/RouteTableRefresher.java

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,21 @@
3939

4040
public class RouteTableRefresher {
4141

42-
private static final Logger logger = getLogger(RouteTableRefresher.class);
42+
private static final Logger logger = getLogger(RouteTableRefresher.class);
4343

44-
private static final String sql = "select 'detect server alive' from dual";
44+
private static final String sql = "select 'detect server alive' from dual";
4545

46-
private final ObTableClient tableClient;
46+
private final ObTableClient tableClient;
4747

48-
private final ObUserAuth sysUA;
48+
private final ObUserAuth sysUA;
4949

50-
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
50+
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
5151

52-
private final ConcurrentHashMap<ObServerAddr, Lock> suspectLocks = new ConcurrentHashMap<>(); // ObServer -> access lock
52+
private final static ConcurrentHashMap<ObServerAddr, Lock> suspectLocks = new ConcurrentHashMap<>(); // ObServer -> access lock
5353

54-
private final ConcurrentHashMap<ObServerAddr, SuspectObServer> suspectServers = new ConcurrentHashMap<>(); // ObServer -> information structure
54+
private final static ConcurrentHashMap<ObServerAddr, SuspectObServer> suspectServers = new ConcurrentHashMap<>(); // ObServer -> information structure
5555

56-
private final HashMap<ObServerAddr, Long> serverLastAccessTimestamps = new HashMap<>(); // ObServer -> last access timestamp
56+
private final static HashMap<ObServerAddr, Long> serverLastAccessTimestamps = new HashMap<>(); // ObServer -> last access timestamp
5757

5858
public RouteTableRefresher(ObTableClient tableClient, ObUserAuth sysUA) {
5959
this.tableClient = tableClient;
@@ -149,24 +149,21 @@ private void checkAlive(ObServerAddr addr) {
149149
Statement statement = null;
150150
ResultSet rs = null;
151151
try {
152-
logger.debug("[background keep alive] check alive, server: {}", addr);
153152
connection = LocationUtil.getMetaRefreshConnection(url, sysUA);
154153
statement = connection.createStatement();
155154
rs = statement.executeQuery(sql);
156155
boolean alive = false;
157156
while (rs.next()) {
158157
String res = rs.getString("detect server alive");
159-
logger.debug("[background keep alive] result: {}", res);
160158
alive = res.equalsIgnoreCase("detect server alive");
161159
}
162160
if (alive) {
163-
logger.debug("[background keep alive] alive, remove server: {}", addr);
164161
removeFromSuspectIPs(addr);
165162
} else {
166163
calcFailureOrClearCache(addr);
167164
}
168165
} catch (Throwable t) {
169-
logger.debug("check alive failed, server: {}", addr, t);
166+
logger.debug("check alive failed, server: {}", addr.toString(), t);
170167
if (t instanceof SQLException) {
171168
// occurred during query
172169
calcFailureOrClearCache(addr);
@@ -201,8 +198,7 @@ private void checkAlive(ObServerAddr addr) {
201198
}
202199
}
203200

204-
public void addIntoSuspectIPs(SuspectObServer server) throws Exception {
205-
logger.debug("[background keep alive] enter addInto");
201+
public static void addIntoSuspectIPs(SuspectObServer server) throws Exception {
206202
ObServerAddr addr = server.getAddr();
207203
if (suspectServers.get(addr) != null) {
208204
// already in the list, directly return
@@ -233,7 +229,7 @@ public void addIntoSuspectIPs(SuspectObServer server) throws Exception {
233229
break;
234230
}
235231
}
236-
logger.debug("[background keep alive] add into ips, server: {}", addr);
232+
logger.debug("add into suspect list, server: {}", addr);
237233
suspectServers.put(addr, server);
238234
serverLastAccessTimestamps.put(addr, server.getAccessTimestamp());
239235
break;
@@ -252,7 +248,6 @@ public void addIntoSuspectIPs(SuspectObServer server) throws Exception {
252248
}
253249

254250
private void removeFromSuspectIPs(ObServerAddr addr) {
255-
logger.debug("[background keep alive] remove server, server:{}", addr);
256251
Lock lock = suspectLocks.get(addr);
257252
if (lock == null) {
258253
// lock must have been added before remove
@@ -270,7 +265,7 @@ private void removeFromSuspectIPs(ObServerAddr addr) {
270265
}
271266
// no need to remove lock
272267
suspectServers.remove(addr);
273-
logger.debug("[background keep alive] removed server: {}", addr);
268+
logger.debug("removed server from suspect list: {}", addr);
274269
break;
275270
} catch (ObTableTryLockTimeoutException e) {
276271
// if try lock timeout, need to retry

src/main/java/com/alipay/oceanbase/rpc/location/model/TableRoute.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,6 @@ public void removeObServer(ObServerAddr addr) {
368368
servers.remove(addr);
369369
}
370370

371-
public void addIntoSuspectIPs(RouteTableRefresher.SuspectObServer addr) throws Exception {
372-
routeRefresher.addIntoSuspectIPs(addr);
373-
}
374-
375371
/**
376372
* refresh all ob server synchronized, it will not refresh if last refresh time is 1 min ago
377373
* @param newRsList new root servers

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,7 @@ private void checkAndReconnect() {
977977
}
978978
connections[idx].reConnectAndLogin("expired");
979979
} catch (Exception e) {
980-
log.warn("ObTableConnectionPool::checkAndReconnect reconnect fail {}. {}", connections[idx].getConnection().getUrl(), e.getMessage());
980+
log.warn("ObTableConnectionPool::checkAndReconnect reconnect fail {}:{}. {}", obTable.getIp(), obTable.getPort(), e.getMessage());
981981
} finally {
982982
connections[idx].setExpired(false);
983983
}

0 commit comments

Comments
 (0)