The CleanUp step of the Delete Fate operation configures the MetaDataTableScanner so that it can compute each tablets location. When all tablets are unassigned, then it can move on to the next step in the operation.
However, MetaDataTableScanner.configureScanner calls Manager.merges which iterates over every table to read its merge information from ZooKeeper. Manager.getMergeInfo is synchronized, causing Delete Fate Ops to block.
MetaDataTableScanner.createTabletLocationState, called by CleanUp.isReady, doesn't use the Merge information.
It's also possible that when CleanUp calls MetaDataTableScanner.configureScanner, null could be passed for the Manager state object.
The CleanUp step of the Delete Fate operation configures the MetaDataTableScanner so that it can compute each tablets location. When all tablets are unassigned, then it can move on to the next step in the operation.
However, MetaDataTableScanner.configureScanner calls Manager.merges which iterates over every table to read its merge information from ZooKeeper. Manager.getMergeInfo is synchronized, causing Delete Fate Ops to block.
MetaDataTableScanner.createTabletLocationState, called by
CleanUp.isReady, doesn't use the Merge information.It's also possible that when CleanUp calls MetaDataTableScanner.configureScanner,
nullcould be passed for the Manager state object.