Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/internal/common/convert/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ func PathToAbs(path string) string {
return filepath.Clean(absPath)
}

// NanoCPUs converts a CPU value to Docker NanoCPUs.
func NanoCPUs(v string) (int64, error) {
// NanoCPUsFromString converts a CPU value to Docker NanoCPUs.
func NanoCPUsFromString(v string) (int64, error) {
f, err := strconv.ParseFloat(strings.TrimSpace(v), 64)
if err != nil {
return 0, err
Expand All @@ -38,8 +38,8 @@ func NanoCPUs(v string) (int64, error) {
return int64(f * 1_000_000_000), nil
}

// Bytes converts a memory string to bytes.
func Bytes(v string) (int64, error) {
// BytesFromString converts a memory string to bytes.
func BytesFromString(v string) (int64, error) {
s := strings.TrimSpace(strings.ToLower(v))
mult := int64(1)

Expand Down Expand Up @@ -77,8 +77,8 @@ func Bytes(v string) (int64, error) {
return n * mult, nil
}

// PortBinding parses HOST:CONTAINER port mapping text.
func PortBinding(s string) (nat.Port, nat.PortBinding, error) {
// PortBindingFromString parses HOST:CONTAINER port mapping text.
func PortBindingFromString(s string) (nat.Port, nat.PortBinding, error) {
parts := strings.Split(s, ":")
if len(parts) != 2 {
return "", nat.PortBinding{}, fmt.Errorf("expected HOST:CONTAINER, got %q", s)
Expand Down
4 changes: 2 additions & 2 deletions src/internal/ctl/app/disk.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func (a *App) ensureDiskUser(userID string) error {
// createSharedDisk creates and mounts a shared loopback disk at the target path.
func (a *App) createSharedDisk(path string) error {
sizeStr := a.Config.Volumes.DiskLimit
size, err := convert.Bytes(sizeStr)
size, err := convert.BytesFromString(sizeStr)
if err != nil {
return fmt.Errorf("invalid disk size for shared disk: %w", err)
}
Expand Down Expand Up @@ -278,7 +278,7 @@ func (a *App) createUserDisk(userID string, isAdmin bool) error {
sizeStr = a.Config.UserService.Limits.Admin.Disk
}

size, err := convert.Bytes(sizeStr)
size, err := convert.BytesFromString(sizeStr)
if err != nil {
return fmt.Errorf("invalid disk size for %s: %w", userID, err)
}
Expand Down
6 changes: 3 additions & 3 deletions src/internal/ctl/app/docker_container.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func (a *App) ensureContainer(spec spec.RuntimeContainerSpec) error {
portBindings = nat.PortMap{}

for _, p := range spec.Ports {
containerPort, hostBinding, err := convert.PortBinding(p)
containerPort, hostBinding, err := convert.PortBindingFromString(p)
if err != nil {
return fmt.Errorf("invalid port binding %q: %w", p, err)
}
Expand Down Expand Up @@ -89,14 +89,14 @@ func (a *App) ensureContainer(spec spec.RuntimeContainerSpec) error {
}

if spec.Limits.Memory != "" {
memBytes, err := convert.Bytes(spec.Limits.Memory)
memBytes, err := convert.BytesFromString(spec.Limits.Memory)
if err != nil {
return fmt.Errorf("invalid memory limit %q: %w", spec.Limits.Memory, err)
}
hostCfg.Memory = memBytes
}
if spec.Limits.CPUs != "" {
nanoCPUs, err := convert.NanoCPUs(spec.Limits.CPUs)
nanoCPUs, err := convert.NanoCPUsFromString(spec.Limits.CPUs)
if err != nil {
return fmt.Errorf("invalid cpu limit %q: %w", spec.Limits.CPUs, err)
}
Expand Down
8 changes: 4 additions & 4 deletions src/internal/ctl/app/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,21 @@ func (a *App) buildAuthRuntimeSpec() spec.RuntimeContainerSpec {
// buildManagerRuntimeSpec builds the manager service container runtime specification.
func (a *App) buildManagerRuntimeSpec() (spec.RuntimeContainerSpec, error) {
userCPUStr := fmt.Sprintf("%v", a.Config.UserService.Limits.User.CPU)
userNanoCPUs, err := convert.NanoCPUs(userCPUStr)
userNanoCPUs, err := convert.NanoCPUsFromString(userCPUStr)
if err != nil {
return spec.RuntimeContainerSpec{}, fmt.Errorf("invalid user cpu limit: %w", err)
}
userMemBytes, err := convert.Bytes(a.Config.UserService.Limits.User.Memory)
userMemBytes, err := convert.BytesFromString(a.Config.UserService.Limits.User.Memory)
if err != nil {
return spec.RuntimeContainerSpec{}, fmt.Errorf("invalid user memory limit: %w", err)
}

adminCPUStr := fmt.Sprintf("%v", a.Config.UserService.Limits.Admin.CPU)
adminNanoCPUs, err := convert.NanoCPUs(adminCPUStr)
adminNanoCPUs, err := convert.NanoCPUsFromString(adminCPUStr)
if err != nil {
return spec.RuntimeContainerSpec{}, fmt.Errorf("invalid admin cpu limit: %w", err)
}
adminMemBytes, err := convert.Bytes(a.Config.UserService.Limits.Admin.Memory)
adminMemBytes, err := convert.BytesFromString(a.Config.UserService.Limits.Admin.Memory)
if err != nil {
return spec.RuntimeContainerSpec{}, fmt.Errorf("invalid admin memory limit: %w", err)
}
Expand Down
8 changes: 4 additions & 4 deletions src/internal/ctl/config/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ func ValidateConfig(cfg *Config) error {

if cfg.Volumes.DiskLimit == "" {
errMsgs = append(errMsgs, "volumes.disk_limit is required")
} else if _, err := convert.Bytes(cfg.Volumes.DiskLimit); err != nil {
} else if _, err := convert.BytesFromString(cfg.Volumes.DiskLimit); err != nil {
errMsgs = append(errMsgs, "volumes.disk_limit must be a valid size string (e.g., 1g, 512m)")
}

Expand Down Expand Up @@ -282,14 +282,14 @@ func isValidSubnet16(subnet string) bool {
func isValidLimits(l Limits) error {
errMsgs := []string{}

nanoCPU, err := convert.NanoCPUs(fmt.Sprintf("%v", l.CPU))
nanoCPU, err := convert.NanoCPUsFromString(fmt.Sprintf("%v", l.CPU))
if err != nil {
errMsgs = append(errMsgs, "cpu limit must be a valid numeric string (e.g., 1, 0.5)")
} else if nanoCPU <= 0 {
errMsgs = append(errMsgs, "cpu limit must be greater than zero")
}

mem, err := convert.Bytes(l.Memory)
mem, err := convert.BytesFromString(l.Memory)
if err != nil {
errMsgs = append(errMsgs, "memory limit must be a valid size string (e.g., 512m, 1g)")
} else if mem <= 0 {
Expand All @@ -300,7 +300,7 @@ func isValidLimits(l Limits) error {
errMsgs = append(errMsgs, "pid limit must be greater than zero")
}

disk, err := convert.Bytes(l.Disk)
disk, err := convert.BytesFromString(l.Disk)
if err != nil {
errMsgs = append(errMsgs, "disk limit must be a valid size string (e.g., 1g, 512m)")
} else if disk <= 0 {
Expand Down