| run() |  | 0% |  | 0% | 22 | 22 | 75 | 75 | 1 | 1 |
| analyseBlocksStorageMovementsAndAssignToDN(HdfsLocatedFileStatus, BlockStoragePolicy) |  | 0% |  | 0% | 13 | 13 | 60 | 60 | 1 | 1 |
| findSourceAndTargetToMove(List, LocatedBlock, List, List, EnumMap, ErasureCodingPolicy, List) |  | 0% |  | 0% | 15 | 15 | 35 | 35 | 1 | 1 |
| computeBlockMovingInfos(List, LocatedBlock, List, List, DatanodeInfo[], StoragePolicySatisfier.DatanodeMap, ErasureCodingPolicy) |  | 0% |  | 0% | 7 | 7 | 32 | 32 | 1 | 1 |
| chooseTarget(LocatedBlock, DatanodeInfo, List, Matcher, EnumMap, List) |  | 0% |  | 0% | 9 | 9 | 19 | 19 | 1 | 1 |
| chooseTargetTypeInSameNode(LocatedBlock, DatanodeInfo, EnumMap, List) |  | 0% |  | 0% | 7 | 7 | 16 | 16 | 1 | 1 |
| buildStripedBlockMovingInfos(LocatedBlock, DatanodeInfo, StorageType, DatanodeInfo, StorageType, List, ErasureCodingPolicy) |  | 0% |  | 0% | 4 | 4 | 17 | 17 | 1 | 1 |
| findTargetsForExpectedStorageTypes(List, StoragePolicySatisfier.DatanodeMap) |  | 0% |  | 0% | 6 | 6 | 17 | 17 | 1 | 1 |
| checkSourceAndTargetTypeExists(DatanodeInfo, List, List, StoragePolicySatisfier.DatanodeMap) |  | 0% |  | 0% | 10 | 10 | 14 | 14 | 1 | 1 |
| start(HdfsConstants.StoragePolicySatisfierMode) |  | 0% |  | 0% | 2 | 2 | 13 | 13 | 1 | 1 |
| removeOverlapBetweenStorageTypes(List, List, boolean) |  | 0% |  | 0% | 6 | 6 | 9 | 9 | 1 | 1 |
| init(Context) |  | 0% | | n/a | 1 | 1 | 6 | 6 | 1 | 1 |
| getMaxRemaining(StoragePolicySatisfier.DatanodeWithStorage, StorageType) |  | 0% |  | 0% | 3 | 3 | 10 | 10 | 1 | 1 |
| stopGracefully() |  | 0% |  | 0% | 5 | 5 | 11 | 11 | 1 | 1 |
| stop(boolean) |  | 0% |  | 0% | 3 | 3 | 10 | 10 | 1 | 1 |
| isLowRedundancyBlock(LocatedBlock, int, ErasureCodingPolicy) |  | 0% |  | 0% | 3 | 3 | 6 | 6 | 1 | 1 |
| checkIfAlreadyChosen(List, DatanodeInfo) |  | 0% |  | 0% | 3 | 3 | 5 | 5 | 1 | 1 |
| buildContinuousBlockMovingInfos(LocatedBlock, DatanodeInfo, StorageType, DatanodeInfo, StorageType, List) |  | 0% | | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| removeNonMovable(List) |  | 0% |  | 0% | 3 | 3 | 6 | 6 | 1 | 1 |
| addFileToProcess(ItemInfo, boolean) |  | 0% |  | 0% | 2 | 2 | 5 | 5 | 1 | 1 |
| getSPSWorkMultiplier(Configuration) |  | 0% |  | 0% | 2 | 2 | 4 | 4 | 1 | 1 |
| StoragePolicySatisfier(Configuration) |  | 0% | | n/a | 1 | 1 | 5 | 5 | 1 | 1 |
| notifyStorageMovementAttemptFinishedBlk(DatanodeInfo, StorageType, Block) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| clearQueues() |  | 0% | | n/a | 1 | 1 | 3 | 3 | 1 | 1 |
| addAllFilesToProcess(long, List, boolean) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| markScanCompletedForPath(long) |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| processingQueueSize() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| join() |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| static {...} |  | 0% | | n/a | 1 | 1 | 2 | 2 | 1 | 1 |
| isRunning() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| getAttemptedItemsMonitor() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| getConf() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| getStorageMovementQueue() |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |