Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
0.23.0
-
None
-
None
Description
If multiple datanodes are attempting to act as the coordinator for a block recovery, but one is being particularly slow, it's possible that you see the following interleaving:
- Primary A receives block recovery command for recovery genstamp = 1, then starts acting slow
- Primary B receives block recovery command for recovery genstamp = 2
- Primary B calls initReplicaRecovery on other nodes for genstamp = 2
- Primary A calls initReplicaRecovery on other nodes for genstamp = 1
This results in a scary message. For example:
java.io.IOException: java.io.IOException: THIS IS NOT SUPPOSED TO HAPPEN: replica.getGenerationStamp() >= recoveryId = 4148, block=blk_6899379920748342698_4136, replica=FinalizedReplica, blk_6899379920748342698_4176, FINALIZED
BUT, this scenario is properly handled by the recovery protocol. We should tone down the message a bit.