[erlang-bugs] disksup:get_disk_data() is returning the wrong data on my system (OS X 10.8 -- Darwin 12)
Lukas Larsson
lukas@REDACTED
Tue Apr 23 14:54:33 CEST 2013
Hello,
I believe that this is already a known and fixed issue. The fix[1] will
be part of the R16B01 release or you can get the latest maint from github.
If this does not fix your issue please use git to send in your proposed
fixes as described at github.com[2].
Lukas
[1]:
http://erlang.org/pipermail/erlang-patches/2013-February/003611.html
[2]: https://github.com/erlang/otp/wiki/Submitting-patches
On 23/04/13 01:16, John Bard wrote:
>
> disksup:get_disk_data() is returning garbage in OS X 10.8 (on my system)
>
>
> [I have verified this in R15B02, R15B03 & 16B]
>
>
> 1> ok = application:start(sasl).
>
> <snip>
>
> 2> ok = application:start(os_mon).
>
> <snip>
>
> 3> disksup:get_disk_data().
>
> [{"18704735",244277768,31}]
>
> 4>
>
>
> The expectation is: [{"/",244277768,31}]
>
>
> The problem is that the format of the df command changed in OS X 10.8
> for some reason (at least it is different on my machine... I checked
> and I don't appear to have any bash functions or aliases getting in
> the way).
>
>
> In OS X 10.7.? (a colleague's mac mini: hdd):
>
> $ df -k -t ufs,hfs
>
> Filesystem 1024-blocks Used Available Capacity Mounted on
>
> /dev/disk0s2 487546976 156364392 330926584 33% /
>
> $
>
>
> The 6th column is "Mounted on".
>
>
> In OS X 10.8.3 (my mac book pro: ssd):
>
> $ df -k -t ufs,hfs
>
> Filesystem 1024-blocks Used Available Capacity iused ifree
> %iused Mounted on
>
> /dev/disk0s2 244277768 74564136 169457632 31% 18705032 42364408
> 31% /
>
> $
>
>
> The 6th column is "iused" instead of "Mounted on".
>
>
>
> If this is a simply difference in 10.8 [darwin 12] and isn't a more
> complex situation than that (macs pre-installed with ssds vs. hdds?
> some configuration somewhere?), a fix could be:
>
> [I toyed around in R16B, but the code is pretty much the same in
> R15B03 and I assume the same in R15B02]
>
>
> in os_mon's disksup.erl:
>
>
> add a guard for the specific darwin in init's case statement:
>
>
> Port = case OS of
>
> {unix, Flavor} when Flavor==sunos4;
>
> Flavor==solaris;
>
> Flavor==freebsd;
>
> Flavor==dragonfly;
>
> Flavor==darwin;
>
> Flavor==darwin_12;
>
> Flavor==linux;
>
> Flavor==openbsd;
>
> Flavor==netbsd;
>
> Flavor==irix64;
>
> Flavor==irix ->
>
> start_portprogram();
>
> {win32, _OSname} ->
>
> not_used;
>
> _ ->
>
> exit({unsupported_os, OS})
>
> end,
>
>
> add a clause to the case statement in the get_os() function:
>
>
> get_os() ->
>
> case os:type() of
>
> {unix, sunos} ->
>
> case os:version() of
>
> {5,_,_} -> {unix, solaris};
>
> {4,_,_} -> {unix, sunos4};
>
> V -> exit({unknown_os_version, V})
>
> end;
>
> {unix, irix64} ->
>
> {unix, irix};
>
> {unix, darwin} ->
>
> case os:version() of
>
> {12,_,_} -> {unix, darwin_12};
>
> _ -> {unix, darwin}
>
> end;
>
> OS ->
>
> OS
>
> end.
>
>
>
> add a function that will pattern match on the new darwin_12 atom
> specified in the other places and will call into a function to parse
> the df command differently:
>
>
> check_disk_space({unix, darwin_12}, Port, Threshold) ->
>
> Result = my_cmd("/bin/df -k -t ufs,hfs", Port),
>
> check_disks_darwin_12(skip_to_eol(Result), Threshold);
>
>
>
> and add that new function to parse the df command:
>
>
> %% Special cases like this annoy me...
>
> check_disks_darwin_12("", _Threshold) ->
>
> [];
>
> check_disks_darwin_12("\n", _Threshold) ->
>
> [];
>
> check_disks_darwin_12(Str, Threshold) ->
>
> case io_lib:fread("~s~d~d~d~d%~d~d~d%~s", Str) of
>
> {ok, [_FS, KB, _Used, _Avail, Cap, _IUsed, _IFree, _ICap,
> MntOn], RestStr} ->
>
> if
>
> Cap >= Threshold ->
>
> set_alarm({disk_almost_full, MntOn}, []);
>
> true ->
>
> clear_alarm({disk_almost_full, MntOn})
>
> end,
>
> [{MntOn, KB, Cap} | check_disks_darwin_12(RestStr,
> Threshold)];
>
> _Other ->
>
> check_disks_darwin_12(skip_to_eol(Str),Threshold)
>
> end.
>
>
>
> Sorry if I butchered the whitespace (gmail ate the tabs, so I had to
> manually fix the whitespace with consistent spaces).
>
> --
> Ryan
>
>
> _______________________________________________
> erlang-bugs mailing list
> erlang-bugs@REDACTED
> http://erlang.org/mailman/listinfo/erlang-bugs
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20130423/21abbf16/attachment.htm>
More information about the erlang-bugs
mailing list