You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "Mark Gui (Jira)" <ji...@apache.org> on 2021/06/24 08:04:00 UTC
[jira] [Updated] (HDDS-5380) Get more accurate space info for
DedicatedDiskSpaceUsage
[ https://issues.apache.org/jira/browse/HDDS-5380?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mark Gui updated HDDS-5380:
---------------------------
Description:
Java has 2 apis to get available space info for a mounted fs: `getFreeSpace()` and `getUsableSpace()`, the latter is more accurate(see its java doc).
Let's do a experiment:
{code:java}
// java
import java.io.File;
public class FsSpace {
public static void main(String args[]) {
File file = new File(args[0]);
System.out.println("FreeSpace: " + file.getFreeSpace());
System.out.println("UsableSpace: " + file.getUsableSpace());
}
}{code}
compile it and run against my root /, let's compare with linux command 'df'.
{code:java}
// linux command line
$ java FsSpace /
FreeSpace: 49653022720 <-- A
UsableSpace: 45126942720 <-- B
$ df / -B1
Filesystem 1B-blocks Used Available Use% Mounted on
overlay 105553784832 55900872704 45126832128 56% /
^
|
C{code}
So the B and C is more close to each other, while A is larger.
Here we have about a 4GB diff on a 100GB disk for the 2 java apis.
I think that `getFreeSpace()` must only account for all unallocated space but does not take the space reserved for system use into consideration while `getUsableSpace()` do.
So we should be more conservative to prevent over consumed disk space.
P.S.
HDFS has a implemtation that use the 2 apis for different purposes, see:
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java
> Get more accurate space info for DedicatedDiskSpaceUsage
> --------------------------------------------------------
>
> Key: HDDS-5380
> URL: https://issues.apache.org/jira/browse/HDDS-5380
> Project: Apache Ozone
> Issue Type: Sub-task
> Reporter: Mark Gui
> Assignee: Mark Gui
> Priority: Minor
>
> Java has 2 apis to get available space info for a mounted fs: `getFreeSpace()` and `getUsableSpace()`, the latter is more accurate(see its java doc).
> Let's do a experiment:
> {code:java}
> // java
> import java.io.File;
> public class FsSpace {
> public static void main(String args[]) {
> File file = new File(args[0]);
> System.out.println("FreeSpace: " + file.getFreeSpace());
> System.out.println("UsableSpace: " + file.getUsableSpace());
> }
> }{code}
> compile it and run against my root /, let's compare with linux command 'df'.
> {code:java}
> // linux command line
> $ java FsSpace /
> FreeSpace: 49653022720 <-- A
> UsableSpace: 45126942720 <-- B
> $ df / -B1
> Filesystem 1B-blocks Used Available Use% Mounted on
> overlay 105553784832 55900872704 45126832128 56% /
> ^
> |
> C{code}
> So the B and C is more close to each other, while A is larger.
> Here we have about a 4GB diff on a 100GB disk for the 2 java apis.
> I think that `getFreeSpace()` must only account for all unallocated space but does not take the space reserved for system use into consideration while `getUsableSpace()` do.
> So we should be more conservative to prevent over consumed disk space.
> P.S.
> HDFS has a implemtation that use the 2 apis for different purposes, see:
> hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/DF.java
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@ozone.apache.org
For additional commands, e-mail: issues-help@ozone.apache.org