Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
3.0.0-alpha1
Description
When name node call triggerActiveLogRoll, and the cachedActiveProxy is a dead name node, it will throws a ConnectTimeoutException, expected behavior is to try next NN, but current logic doesn't do so, instead, it keeps trying the dead, mistakenly take it as active.
2018-08-17 10:02:12,001 WARN [Edit log tailer] org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer: Unable to trigger a roll of the active NN
org.apache.hadoop.net.ConnectTimeoutException: Call From SourceMachine001/SourceIP to001 TargetMachine001.ap.gbl:8020 failed on socket timeout exception: org.apache.hadoop.net.ConnectTimeoutException: 20000 millis timeout org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$2.doWork(EditLogTailer.java:298)
C:\Users\rotang>ping TargetMachine001
Pinging TargetMachine001[TargetIP001] with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Attachment is a log file saying how it repeatedly retries a dead name node, and a fix patch.
I replaced the actual machine name/ip as SourceMachine001/SourceIP001 and TargetMachine001/TargetIP001.
How to Repro:
In a good running NNs, take down the active NN (don't let it come back during test), and then the stand by NNs will keep trying dead (old active) NN, because it is the cached one.
Attachments
Attachments
Issue Links
- duplicates
-
HDFS-13900 NameNode: Unable to trigger a roll of the active NN
- Resolved
- is caused by
-
HDFS-6440 Support more than 2 NameNodes
- Resolved
- relates to
-
HDFS-14397 Backport HADOOP-15684 to branch-2
- Resolved