Description
We expect catching-up nodes to sync blocks in order so the blocks can become graph-ready soon. But if some blocks are missing during recovery, the current mechanism will try to request them directly, and then their dependencies. These backward-requested blocks may stay not-graph-ready for a long time and get eventually garbage collected, wasting network resources.
This mainly happens for full nodes. After it syncs headers and a checkpoint, it will try to recover the graph based on the header terminals, and these terminals do not have available bodies, so they'll always become initial_missed_block
.
Since this issue mostly affects full nodes, it will not cause much trouble because full nodes will only sync bodies after the latest checkpoints. Even backward sync should complete within an acceptable time.