Details
Description
BlockPlacementPolicyDefault.java
protected Node chooseTargetInOrder(int numOfReplicas, Node writer, final Set<Node> excludedNodes, final long blocksize, final int maxNodesPerRack, final List<DatanodeStorageInfo> results, final boolean avoidStaleNodes, final boolean newBlock, EnumMap<StorageType, Integer> storageTypes) throws NotEnoughReplicasException { final int numOfResults = results.size(); if (numOfResults == 0) { writer = chooseLocalStorage(writer, excludedNodes, blocksize, maxNodesPerRack, results, avoidStaleNodes, storageTypes, true) .getDatanodeDescriptor(); if (--numOfReplicas == 0) { return writer; } } ...
The method chooseLocalStorage can return a null value but it's not being checked here and the method getDatanodeDescriptor() is immediately being called on the result. Please check for a null value first.