in the latest code this is is not applicable. each storage is chosen and space of that storage is checked.
On 29 Jan 2018 3:53 pm, "Xie Gang" <xiegang...@gmail.com> wrote: > 2.4 and 2.6: > > public long getRemaining(StorageType t) { > long remaining = 0; > for(DatanodeStorageInfo s : getStorageInfos()) { > if (s.getStorageType() == t) { > remaining += s.getRemaining(); > } > } > return remaining; > } > > > On Mon, Jan 29, 2018 at 6:12 PM, Vinayakumar B <vinayakum...@apache.org> > wrote: > >> in which version of Hadoop you are seeing this? >> >> -Vinay >> >> On 29 Jan 2018 3:26 pm, "Xie Gang" <xiegang...@gmail.com> wrote: >> >> Hello, >> >> We recently hit a issue that almost all the disk of the datanode got full >> even we configured the du .reserved. >> >> After tracking down the code, found that when we choose a target datanode >> and check if it's good candidate for block allocation (isGoodTarget()), it >> only checks if the total left space of all the volumes(the same type), not >> each volume. This logic makes the reservation of each volume useless. >> Is this a problem or do I have any misunderstanding? >> >> final long remaining = node.getRemaining(storage.getStorageType()); >> if (requiredSize > remaining - scheduledSize) { >> logNodeIsNotChosen(storage, "the node does not have enough " >> + storage.getStorageType() + " space" >> + " (required=" + requiredSize >> + ", scheduled=" + scheduledSize >> + ", remaining=" + remaining + ")"); >> stats.incrOverScheduled(); >> return false; >> } >> >> >> >> -- >> Xie Gang >> > > > > -- > Xie Gang >