This method iteratively does the following:
it first selects a block to move,
then sends a request to the proxy source to start the block move
when the source's block list falls below a threshold, it asks
the namenode for more blocks.
It terminates when it has dispatch enough block move tasks or
it has received enough blocks from the namenode, or
the elapsed time of the iteration has exceeded the max time limit.