When all the nodes containing a replica of a block are decommissioned while they are dead, they get decommissioned right away even if there are missing blocks. This behavior was introduced by
The problem starts when those decommissioned nodes are brought back online. The namenode no longer shows missing blocks, which creates a false sense of cluster health. When the decommissioned nodes are removed and reformatted, the block data is permanently lost. The namenode will report missing blocks after the heartbeat recheck interval (e.g. 10 minutes) from the moment the last node is taken down.
There are multiple issues in the code. As some cause different behaviors in testing vs. production, it took a while to reproduce it in a unit test. I will present analysis and proposal soon.