From b5dee24bb6a96686aa65c261fbf616733ba5301f Mon Sep 17 00:00:00 2001 From: Mike Snitzer Date: Mon, 23 Jun 2014 15:36:08 -0400 Subject: [PATCH] devmapper: use RAMInBytes() rather than FromHumanSize() Device Mapper needs device sizes in binary (1024) multiples. Otherwise kernel checks can find that the specified thin-pool device sizes aren't a multiple of the specified thin-pool blocksize. The name for "RAMInBytes" is likely too narrow given the new consumers but... Also add "tebibyte" support to RAMInBytes. Docker-DCO-1.1-Signed-off-by: Mike Snitzer (github: snitm) --- units/size.go | 8 +++++--- units/size_test.go | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/units/size.go b/units/size.go index 480ec2f..e0eec3e 100644 --- a/units/size.go +++ b/units/size.go @@ -58,11 +58,11 @@ func FromHumanSize(size string) (int64, error) { } // Parses a human-readable string representing an amount of RAM -// in bytes, kibibytes, mebibytes or gibibytes, and returns the -// number of bytes, or -1 if the string is unparseable. +// in bytes, kibibytes, mebibytes, gibibytes, or tebibytes and +// returns the number of bytes, or -1 if the string is unparseable. // Units are case-insensitive, and the 'b' suffix is optional. func RAMInBytes(size string) (bytes int64, err error) { - re, error := regexp.Compile("^(\\d+)([kKmMgG])?[bB]?$") + re, error := regexp.Compile("^(\\d+)([kKmMgGtT])?[bB]?$") if error != nil { return -1, error } @@ -86,6 +86,8 @@ func RAMInBytes(size string) (bytes int64, err error) { memLimit *= 1024 * 1024 } else if unit == "g" { memLimit *= 1024 * 1024 * 1024 + } else if unit == "t" { + memLimit *= 1024 * 1024 * 1024 * 1024 } return memLimit, nil diff --git a/units/size_test.go b/units/size_test.go index 5240bbd..2c4982b 100644 --- a/units/size_test.go +++ b/units/size_test.go @@ -64,7 +64,10 @@ func TestRAMInBytes(t *testing.T) { assertRAMInBytes(t, "32kb", false, 32*1024) assertRAMInBytes(t, "32Kb", false, 32*1024) assertRAMInBytes(t, "32Mb", false, 32*1024*1024) + assertRAMInBytes(t, "32MB", false, 32*1024*1024) assertRAMInBytes(t, "32Gb", false, 32*1024*1024*1024) + assertRAMInBytes(t, "32G", false, 32*1024*1024*1024) + assertRAMInBytes(t, "32Tb", false, 32*1024*1024*1024*1024) assertRAMInBytes(t, "", true, -1) assertRAMInBytes(t, "hello", true, -1)