Class VolumeUsage
java.lang.Object
org.apache.hadoop.ozone.container.common.volume.VolumeUsage
Stores information about a disk/volume.
Since we have a reserved space for each volume for other usage,
let's clarify the space values a bit here:
- used: hdds actual usage.
- avail: remaining space for hdds usage.
- reserved: total space for other usage.
- capacity: total space for hdds usage.
- other: space used by other service consuming the same volume.
- fsAvail: reported remaining space from local fs.
- fsUsed: reported total used space from local fs.
- fsCapacity: reported total capacity from local fs.
- minVolumeFreeSpace (mvfs) : determines the free space for closing
containers.This is like adding a few reserved bytes to reserved space.
Dn's will send close container action to SCM at this limit, and it is
configurable.
|----used----| (avail) |++mvfs++|++++reserved+++++++|
|<- capacity ->|
| fsAvail |-------other-----------|
|<- fsCapacity ->|
What we could directly get from local fs:
fsCapacity, fsAvail, (fsUsed = fsCapacity - fsAvail)
We could get from config:
reserved
Get from cmd line:
used: from cmd 'du' (by default)
Get from calculation:
capacity = fsCapacity - reserved
other = fsUsed - used
The avail is the result we want from calculation.
So, it could be:
A) avail = capacity - used
B) avail = fsAvail - Max(reserved - other, 0);
To be Conservative, we could get min
avail = Max(Min(A, B), 0);
If we have a dedicated disk for hdds and are not using the reserved space,
then we should use DedicatedDiskSpaceUsage for
`hdds.datanode.du.factory.classname`,
Then it is much simpler, since we don't care about other usage:
|----used----| (avail)/fsAvail |
|<- capacity/fsCapacity ->|
We have avail == fsAvail.
-
Method Summary
Modifier and TypeMethodDescriptionvoiddecrementUsedSpace(long reclaimedSpace) org.apache.hadoop.hdds.fs.SpaceUsageSourceCalculate available space use method B. |----used----| (avail) |++++++++reserved++++++++| | fsAvail |-------other-------| ->|~~~~|<- remainingReservedlongstatic longgetUsableSpace(org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.StorageReportProto report) static longgetUsableSpace(StorageLocationReport report) voidincrementUsedSpace(long usedSpace) booleanvoidvoidshutdown()voidstart()
-
Method Details
-
getCurrentUsage
public org.apache.hadoop.hdds.fs.SpaceUsageSource getCurrentUsage()
B) avail = fsAvail - Max(reserved - other, 0);Calculate available space use method B. |----used----| (avail) |++++++++reserved++++++++| | fsAvail |-------other-------| ->|~~~~|<- remainingReserved -
incrementUsedSpace
public void incrementUsedSpace(long usedSpace) -
decrementUsedSpace
public void decrementUsedSpace(long reclaimedSpace) -
start
public void start() -
shutdown
public void shutdown() -
refreshNow
public void refreshNow() -
getReservedInBytes
public long getReservedInBytes() -
getUsableSpace
public static long getUsableSpace(org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.StorageReportProto report) -
getUsableSpace
-
isReservedUsagesInRange
public boolean isReservedUsagesInRange()
-