java.lang.Object
org.apache.hadoop.ozone.container.common.volume.VolumeUsage

public class VolumeUsage extends Object
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 Details

    • getCurrentUsage

      public org.apache.hadoop.hdds.fs.SpaceUsageSource getCurrentUsage()
       
       Calculate available space use method B.
       |----used----|   (avail)   |++++++++reserved++++++++|
                    |     fsAvail      |-------other-------|
                                -&gt;|~~~~|&lt;-
                            remainingReserved
       
       
      B) avail = fsAvail - Max(reserved - other, 0);
    • 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

      public static long getUsableSpace(StorageLocationReport report)
    • isReservedUsagesInRange

      public boolean isReservedUsagesInRange()