The data transfer server may complete its final acknowledge before blockReceived returns because acknowledgements are returned on a separate thread.
Then the client thinks its data is complete so it will complete on the namenode, but there is a chance the namenode did not process blockReceived in time and will fail.
The data transfer server may complete its final acknowledge before blockReceived returns because acknowledgements are returned on a separate thread.
Then the client thinks its data is complete so it will complete on the namenode, but there is a chance the namenode did not process blockReceived in time and will fail.