Description
CloseCommand gets picked up via datanode by the Hearbeat response it receives from SCM. It may happen, one of the follower node not yet received the heartBeat response from SCM whereas the leader has got issued the closeContainer Command encoded from its own HeartBeat response from SCM. In such a case, leader will close the container followed by the followers.
The follower on which the container is closed Via ratis, has not yet received any CloseContainer command from SCM directly and hence on that closeCommandHandler is not invoked yet. hence the assertion on the below code in one of the followers:
if (!containerData.isOpen()) { // make sure the closeContainerHandler on the Datanode is invoked Assert.assertTrue( datanodeService.getDatanodeStateMachine().getCommandDispatcher() .getCloseContainerHandler().getInvocationCount() > 0); return true; }