mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-08 15:41:15 +02:00
mini: grow volumes one at a time
Mini auto-sizes a few large volume slots, but the master pre-grows 7 volumes per new collection. Under a filer group each S3 bucket is its own collection, so the first buckets claimed every slot and later writes failed to assign a volume. Cap mini's volume_growth copy counts to 1.
This commit is contained in:
@@ -720,6 +720,31 @@ func loadOrCreateMiniHexSecret(path string, nBytes int) string {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ensureMiniVolumeGrowthDefaults keeps a small mini cluster usable with many
|
||||||
|
// S3 buckets. Mini auto-sizes its data disk into a handful of large (up to
|
||||||
|
// 1 GiB) volume slots, but the master pre-grows copy_1 (default 7) volumes for
|
||||||
|
// every new collection. Under a filer group each bucket is its own collection,
|
||||||
|
// so the first couple of buckets' writes claim every slot and later buckets
|
||||||
|
// can no longer grow a volume — their PutObjects fail with
|
||||||
|
// "assign volume: ... no free volumes". Grow one volume at a time so the slots
|
||||||
|
// stretch across many collections. Anything the operator already set via
|
||||||
|
// master.toml or a WEED_ env var wins.
|
||||||
|
func ensureMiniVolumeGrowthDefaults() {
|
||||||
|
v := util.GetViper()
|
||||||
|
for _, key := range []string{
|
||||||
|
"master.volume_growth.copy_1",
|
||||||
|
"master.volume_growth.copy_2",
|
||||||
|
"master.volume_growth.copy_3",
|
||||||
|
"master.volume_growth.copy_other",
|
||||||
|
} {
|
||||||
|
envKey := "WEED_" + strings.ToUpper(strings.ReplaceAll(key, ".", "_"))
|
||||||
|
if v.IsSet(key) || os.Getenv(envKey) != "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
v.Set(key, 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// isPortOpenOnIP checks if a port is available for binding on a specific IP address
|
// isPortOpenOnIP checks if a port is available for binding on a specific IP address
|
||||||
func isPortOpenOnIP(ip string, port int) bool {
|
func isPortOpenOnIP(ip string, port int) bool {
|
||||||
if port <= 0 || port > 65535 {
|
if port <= 0 || port > 65535 {
|
||||||
@@ -1141,6 +1166,8 @@ func runMini(cmd *Command, args []string) bool {
|
|||||||
util.LoadConfiguration("volume", false)
|
util.LoadConfiguration("volume", false)
|
||||||
miniOptions.v.applyDiskIOProbeConfig()
|
miniOptions.v.applyDiskIOProbeConfig()
|
||||||
|
|
||||||
|
ensureMiniVolumeGrowthDefaults()
|
||||||
|
|
||||||
// applyConfigFileOptions above may have overwritten -dir from the
|
// applyConfigFileOptions above may have overwritten -dir from the
|
||||||
// mini.options file, so re-resolve it here alongside the other paths.
|
// mini.options file, so re-resolve it here alongside the other paths.
|
||||||
*miniDataFolders = util.ResolveCommaSeparatedPaths(*miniDataFolders)
|
*miniDataFolders = util.ResolveCommaSeparatedPaths(*miniDataFolders)
|
||||||
|
|||||||
Reference in New Issue
Block a user