Fix volume.fsck crashing on EC volumes and add multi-volume vacuum support (#8406)
* helm: refine openshift-values.yaml to remove hardcoded UIDs Remove hardcoded runAsUser, runAsGroup, and fsGroup from the openshift-values.yaml example. This allows OpenShift's admission controller to automatically assign a valid UID from the namespace's allocated range, avoiding "forbidden" errors when UID 1000 is outside the permissible range. Updates #8381, #8390. * helm: fix volume.logs and add consistent security context comments * Update README.md * fix volume.fsck crashing on EC volumes and add multi-volume vacuum support * address comments
This commit is contained in:
@@ -3,7 +3,10 @@ package shell
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/seaweedfs/seaweedfs/weed/pb/master_pb"
|
||||
)
|
||||
@@ -36,7 +39,7 @@ func (c *commandVacuum) Do(args []string, commandEnv *CommandEnv, writer io.Writ
|
||||
volumeVacuumCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
|
||||
garbageThreshold := volumeVacuumCommand.Float64("garbageThreshold", 0.3, "vacuum when garbage is more than this limit")
|
||||
collection := volumeVacuumCommand.String("collection", "", "vacuum this collection")
|
||||
volumeId := volumeVacuumCommand.Uint("volumeId", 0, "the volume id")
|
||||
volumeIds := volumeVacuumCommand.String("volumeId", "", "comma-separated list of volume IDs")
|
||||
if err = volumeVacuumCommand.Parse(args); err != nil {
|
||||
return nil
|
||||
}
|
||||
@@ -45,16 +48,32 @@ func (c *commandVacuum) Do(args []string, commandEnv *CommandEnv, writer io.Writ
|
||||
return
|
||||
}
|
||||
|
||||
err = commandEnv.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error {
|
||||
_, err = client.VacuumVolume(context.Background(), &master_pb.VacuumVolumeRequest{
|
||||
GarbageThreshold: float32(*garbageThreshold),
|
||||
VolumeId: uint32(*volumeId),
|
||||
Collection: *collection,
|
||||
var volumeIdInts []uint32
|
||||
if *volumeIds != "" {
|
||||
for _, volumeIdStr := range strings.Split(*volumeIds, ",") {
|
||||
volumeIdStr = strings.TrimSpace(volumeIdStr)
|
||||
if volumeIdInt, err := strconv.ParseUint(volumeIdStr, 10, 32); err == nil {
|
||||
volumeIdInts = append(volumeIdInts, uint32(volumeIdInt))
|
||||
} else {
|
||||
return fmt.Errorf("parse volumeId string %s to int: %v", volumeIdStr, err)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
volumeIdInts = append(volumeIdInts, 0)
|
||||
}
|
||||
|
||||
for _, volumeId := range volumeIdInts {
|
||||
err = commandEnv.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error {
|
||||
_, err = client.VacuumVolume(context.Background(), &master_pb.VacuumVolumeRequest{
|
||||
GarbageThreshold: float32(*garbageThreshold),
|
||||
VolumeId: volumeId,
|
||||
Collection: *collection,
|
||||
})
|
||||
return err
|
||||
})
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
return
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user