diff options
Diffstat (limited to 'weed/shell')
| -rw-r--r-- | weed/shell/command_cluster_check.go | 1 | ||||
| -rw-r--r-- | weed/shell/command_cluster_ps.go | 1 | ||||
| -rw-r--r-- | weed/shell/command_fs_configure.go | 2 | ||||
| -rw-r--r-- | weed/shell/command_volume_check_disk.go | 4 | ||||
| -rw-r--r-- | weed/shell/command_volume_fsck.go | 8 | ||||
| -rw-r--r-- | weed/shell/command_volume_vacuum.go | 2 | ||||
| -rw-r--r-- | weed/shell/commands.go | 3 | ||||
| -rw-r--r-- | weed/shell/shell_liner.go | 1 |
8 files changed, 16 insertions, 6 deletions
diff --git a/weed/shell/command_cluster_check.go b/weed/shell/command_cluster_check.go index 616669b6d..2ab82fca2 100644 --- a/weed/shell/command_cluster_check.go +++ b/weed/shell/command_cluster_check.go @@ -59,6 +59,7 @@ func (c *commandClusterCheck) Do(args []string, commandEnv *CommandEnv, writer i err = commandEnv.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error { resp, err := client.ListClusterNodes(context.Background(), &master_pb.ListClusterNodesRequest{ ClientType: cluster.FilerType, + FilerGroup: *commandEnv.option.FilerGroup, }) for _, node := range resp.ClusterNodes { diff --git a/weed/shell/command_cluster_ps.go b/weed/shell/command_cluster_ps.go index 2d391de1d..72f477607 100644 --- a/weed/shell/command_cluster_ps.go +++ b/weed/shell/command_cluster_ps.go @@ -39,6 +39,7 @@ func (c *commandClusterPs) Do(args []string, commandEnv *CommandEnv, writer io.W err = commandEnv.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error { resp, err := client.ListClusterNodes(context.Background(), &master_pb.ListClusterNodesRequest{ ClientType: cluster.FilerType, + FilerGroup: *commandEnv.option.FilerGroup, }) fmt.Fprintf(writer, "the cluster has %d filers\n", len(resp.ClusterNodes)) diff --git a/weed/shell/command_fs_configure.go b/weed/shell/command_fs_configure.go index 068e83a5b..73bb8e5c6 100644 --- a/weed/shell/command_fs_configure.go +++ b/weed/shell/command_fs_configure.go @@ -62,7 +62,7 @@ func (c *commandFsConfigure) Do(args []string, commandEnv *CommandEnv, writer io isDelete := fsConfigureCommand.Bool("delete", false, "delete the configuration by locationPrefix") apply := fsConfigureCommand.Bool("apply", false, "update and apply filer configuration") if err = fsConfigureCommand.Parse(args); err != nil { - return err + return nil } fc, err := filer.ReadFilerConf(commandEnv.option.FilerAddress, commandEnv.option.GrpcDialOption, commandEnv.MasterClient) diff --git a/weed/shell/command_volume_check_disk.go b/weed/shell/command_volume_check_disk.go index 53284096d..daa64c1bd 100644 --- a/weed/shell/command_volume_check_disk.go +++ b/weed/shell/command_volume_check_disk.go @@ -45,6 +45,7 @@ func (c *commandVolumeCheckDisk) Do(args []string, commandEnv *CommandEnv, write fsckCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError) slowMode := fsckCommand.Bool("slow", false, "slow mode checks all replicas even file counts are the same") verbose := fsckCommand.Bool("v", false, "verbose mode") + volumeId := fsckCommand.Uint("volumeId", 0, "the volume id") applyChanges := fsckCommand.Bool("force", false, "apply the fix") nonRepairThreshold := fsckCommand.Float64("nonRepairThreshold", 0.3, "repair when missing keys is not more than this limit") if err = fsckCommand.Parse(args); err != nil { @@ -70,6 +71,9 @@ func (c *commandVolumeCheckDisk) Do(args []string, commandEnv *CommandEnv, write } for _, replicas := range volumeReplicas { + if *volumeId > 0 && replicas[0].info.Id != uint32(*volumeId) { + continue + } slices.SortFunc(replicas, func(a, b *VolumeReplica) bool { return fileCount(a) > fileCount(b) }) diff --git a/weed/shell/command_volume_fsck.go b/weed/shell/command_volume_fsck.go index 1aa33e054..584ce722b 100644 --- a/weed/shell/command_volume_fsck.go +++ b/weed/shell/command_volume_fsck.go @@ -33,7 +33,8 @@ func init() { } type commandVolumeFsck struct { - env *CommandEnv + env *CommandEnv + forcePurging *bool } func (c *commandVolumeFsck) Name() string { @@ -68,6 +69,7 @@ func (c *commandVolumeFsck) Do(args []string, commandEnv *CommandEnv, writer io. findMissingChunksInFilerPath := fsckCommand.String("findMissingChunksInFilerPath", "/", "used together with findMissingChunksInFiler") findMissingChunksInVolumeId := fsckCommand.Int("findMissingChunksInVolumeId", 0, "used together with findMissingChunksInFiler") applyPurging := fsckCommand.Bool("reallyDeleteFromVolume", false, "<expert only!> after detection, delete missing data from volumes / delete missing file entries from filer") + c.forcePurging = fsckCommand.Bool("forcePurging", false, "delete missing data from volumes in one replica used together with applyPurging") purgeAbsent := fsckCommand.Bool("reallyDeleteFilerEntries", false, "<expert only!> delete missing file entries from filer if the corresponding volume is missing for any reason, please ensure all still existing/expected volumes are connected! used together with findMissingChunksInFiler") tempPath := fsckCommand.String("tempPath", path.Join(os.TempDir()), "path for temporary idx files") @@ -293,7 +295,7 @@ func (c *commandVolumeFsck) findExtraChunksInVolumeServers(dataNodeVolumeIdToVIn } orphanFileIds := []string{} for fid, foundInAllReplicas := range orphanReplicaFileIds { - if !isSeveralReplicas[volumeId] || (isSeveralReplicas[volumeId] && foundInAllReplicas) { + if !isSeveralReplicas[volumeId] || *c.forcePurging || (isSeveralReplicas[volumeId] && foundInAllReplicas) { orphanFileIds = append(orphanFileIds, fid) } } @@ -301,7 +303,7 @@ func (c *commandVolumeFsck) findExtraChunksInVolumeServers(dataNodeVolumeIdToVIn continue } if verbose { - fmt.Fprintf(writer, "purging process for volume %d", volumeId) + fmt.Fprintf(writer, "purging process for volume %d.\n", volumeId) } if isEcVolumeReplicas[volumeId] { diff --git a/weed/shell/command_volume_vacuum.go b/weed/shell/command_volume_vacuum.go index fc454c9ff..37b8aa030 100644 --- a/weed/shell/command_volume_vacuum.go +++ b/weed/shell/command_volume_vacuum.go @@ -34,7 +34,7 @@ func (c *commandVacuum) Do(args []string, commandEnv *CommandEnv, writer io.Writ collection := volumeVacuumCommand.String("collection", "", "vacuum this collection") volumeId := volumeVacuumCommand.Uint("volumeId", 0, "the volume id") if err = volumeVacuumCommand.Parse(args); err != nil { - return + return nil } if err = commandEnv.confirmIsLocked(args); err != nil { diff --git a/weed/shell/commands.go b/weed/shell/commands.go index 3ff49f1d2..08f639d34 100644 --- a/weed/shell/commands.go +++ b/weed/shell/commands.go @@ -22,6 +22,7 @@ type ShellOptions struct { // shell transient context FilerHost string FilerPort int64 + FilerGroup *string FilerAddress pb.ServerAddress Directory string } @@ -46,7 +47,7 @@ var ( func NewCommandEnv(options *ShellOptions) *CommandEnv { ce := &CommandEnv{ env: make(map[string]string), - MasterClient: wdclient.NewMasterClient(options.GrpcDialOption, pb.AdminShellClient, "", "", pb.ServerAddresses(*options.Masters).ToAddressMap()), + MasterClient: wdclient.NewMasterClient(options.GrpcDialOption, *options.FilerGroup, pb.AdminShellClient, "", "", pb.ServerAddresses(*options.Masters).ToAddressMap()), option: options, } ce.locker = exclusive_locks.NewExclusiveLocker(ce.MasterClient, "admin") diff --git a/weed/shell/shell_liner.go b/weed/shell/shell_liner.go index 94a68f5bc..595dbf679 100644 --- a/weed/shell/shell_liner.go +++ b/weed/shell/shell_liner.go @@ -54,6 +54,7 @@ func RunShell(options ShellOptions) { commandEnv.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error { resp, err := client.ListClusterNodes(context.Background(), &master_pb.ListClusterNodesRequest{ ClientType: cluster.FilerType, + FilerGroup: *options.FilerGroup, }) if err != nil { return err |
