serve: [batch] config; open the store, reap jobs killed by a restart, start the runner
Add the [batch] config block (Batch type + File.Batch) and ParseSize (binary KiB/MiB/GiB byte counts) in internal/config. serve now opens the dcache store when batch is on, marks the queued/running jobs a restart killed as failed (never resumed) and observes them, builds the runner from the config with the runner's defaults filling zeros, and closes the runner on both shutdown paths. Batch is on by default; disabled = true leaves srv.Batch nil so the endpoints answer 503. Co-Authored-By: ornith-1.5-35b-a3b <ornith-1.5-35b-a3b@llama.cpp.invalid>
This commit is contained in:
@@ -2,6 +2,8 @@ package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/pelletier/go-toml/v2"
|
||||
@@ -17,6 +19,19 @@ type File struct {
|
||||
Digest Digest `toml:"digest"`
|
||||
Context Context `toml:"context"`
|
||||
Search Search `toml:"search"`
|
||||
Batch Batch `toml:"batch"`
|
||||
}
|
||||
|
||||
// Batch is the [batch] block. Batch is on by default: no block means the runner runs with its own
|
||||
// defaults. disabled = true turns it off and the endpoints answer 503.
|
||||
type Batch struct {
|
||||
Disabled bool `toml:"disabled"`
|
||||
TargetsPerJob int `toml:"targets_per_job"`
|
||||
JobsPerCaller int `toml:"jobs_per_caller"`
|
||||
JobsTotal int `toml:"jobs_total"`
|
||||
Workers int `toml:"workers"`
|
||||
TTL string `toml:"ttl"`
|
||||
MaxBytes string `toml:"max_bytes"`
|
||||
}
|
||||
|
||||
type Dixie struct {
|
||||
@@ -110,3 +125,28 @@ func ParseDuration(s string, def time.Duration) time.Duration {
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
// ParseSize parses a positive byte count: a plain integer, or one with a binary suffix KiB, MiB or
|
||||
// GiB. Anything else, zero or negative returns def.
|
||||
func ParseSize(s string, def int64) int64 {
|
||||
s = strings.TrimSpace(s)
|
||||
if s == "" {
|
||||
return def
|
||||
}
|
||||
var mult int64
|
||||
switch {
|
||||
case strings.HasSuffix(s, "KiB"):
|
||||
mult, s = 1<<10, s[:len(s)-3]
|
||||
case strings.HasSuffix(s, "MiB"):
|
||||
mult, s = 1<<20, s[:len(s)-3]
|
||||
case strings.HasSuffix(s, "GiB"):
|
||||
mult, s = 1<<30, s[:len(s)-3]
|
||||
default:
|
||||
mult = 1
|
||||
}
|
||||
n, err := strconv.ParseInt(s, 10, 64)
|
||||
if err != nil || n <= 0 {
|
||||
return def
|
||||
}
|
||||
return n * mult
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user