- HMaster is starting ,RS who holds the meta table reports in
- HMaster adds the RS to onlineServers.
- RS crash but it has't register to ZK yet.
- In normal case, ZK can detect the RS crash.
- And remove the RS from onlineServers.
- HMaster will connect the meta table, but fails, then it checks RS whether exists in onlineServers, yes, hence HMaster will retry (forever).
- The crash time is very important to trigger this bug.
- if the node crash before report, then the onlineServers will not have RS
- if RS crash after register, then the recovery will remove it from onlineServers
- The origin developer have given the TODO fixing:
1 try {
2 sendRequest(getServerName(), request.build());
3 } catch (IOException e) {
4 e = unwrapException(e);
5 // TODO: In the future some operation may want to bail out early.
6 // TODO: How many times should we retry (use numberOfAttemptsSoFar)
7 if (!scheduleForRetry(e)) {
8 remoteCallFailed(procedureEnv, e);
9 }
10 }
post-write
org.apache.hadoop.hbase.regionserver.HRegionServer handleReportForDutyResponse 1516
