package zombie import ( "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/commonflags" "github.com/spf13/cobra" "github.com/spf13/viper" ) const ( flagBatchSize = "batch-size" flagBatchSizeUsage = "Objects iteration batch size" CIDFlag = "cid" CIDFlagUsage = "Container ID" OIDFlag = "oid" OIDFlagUsage = "Object ID" ) var ( Cmd = &cobra.Command{ Use: "zombie", Short: "Zombie objects related commands", } scanCmd = &cobra.Command{ Use: "scan", Short: "Scan storage engine for zombie objects and move them to quarantine", Long: "", PreRun: func(cmd *cobra.Command, _ []string) { _ = viper.BindPFlag(commonflags.EndpointFlag, cmd.Flags().Lookup(commonflags.EndpointFlag)) _ = viper.BindPFlag(commonflags.ConfigFlag, cmd.Flags().Lookup(commonflags.ConfigFlag)) _ = viper.BindPFlag(commonflags.ConfigDirFlag, cmd.Flags().Lookup(commonflags.ConfigDirFlag)) _ = viper.BindPFlag(flagBatchSize, cmd.Flags().Lookup(flagBatchSize)) }, Run: scan, } listCmd = &cobra.Command{ Use: "list", Short: "List zombie objects from quarantine", Long: "", PreRun: func(cmd *cobra.Command, _ []string) { _ = viper.BindPFlag(commonflags.ConfigFlag, cmd.Flags().Lookup(commonflags.ConfigFlag)) _ = viper.BindPFlag(commonflags.ConfigDirFlag, cmd.Flags().Lookup(commonflags.ConfigDirFlag)) }, Run: list, } restoreCmd = &cobra.Command{ Use: "restore", Short: "Restore zombie objects from quarantine", Long: "", PreRun: func(cmd *cobra.Command, _ []string) { _ = viper.BindPFlag(commonflags.ConfigFlag, cmd.Flags().Lookup(commonflags.ConfigFlag)) _ = viper.BindPFlag(commonflags.ConfigDirFlag, cmd.Flags().Lookup(commonflags.ConfigDirFlag)) _ = viper.BindPFlag(CIDFlag, cmd.Flags().Lookup(CIDFlag)) _ = viper.BindPFlag(OIDFlag, cmd.Flags().Lookup(OIDFlag)) }, Run: restore, } removeCmd = &cobra.Command{ Use: "remove", Short: "Remove zombie objects from quarantine", Long: "", PreRun: func(cmd *cobra.Command, _ []string) { _ = viper.BindPFlag(commonflags.ConfigFlag, cmd.Flags().Lookup(commonflags.ConfigFlag)) _ = viper.BindPFlag(commonflags.ConfigDirFlag, cmd.Flags().Lookup(commonflags.ConfigDirFlag)) _ = viper.BindPFlag(CIDFlag, cmd.Flags().Lookup(CIDFlag)) _ = viper.BindPFlag(OIDFlag, cmd.Flags().Lookup(OIDFlag)) }, Run: remove, } ) func init() { initScanCmd() initListCmd() initRestoreCmd() initRemoveCmd() } func initScanCmd() { Cmd.AddCommand(scanCmd) scanCmd.Flags().StringP(commonflags.EndpointFlag, commonflags.EndpointFlagShort, "", commonflags.EndpointFlagDesc) scanCmd.Flags().StringP(commonflags.ConfigFlag, commonflags.ConfigFlagShorthand, "", commonflags.ConfigFlagUsage) scanCmd.Flags().String(commonflags.ConfigDirFlag, "", commonflags.ConfigDirFlagUsage) scanCmd.Flags().Uint32(flagBatchSize, 1000, flagBatchSizeUsage) } func initListCmd() { Cmd.AddCommand(listCmd) listCmd.Flags().StringP(commonflags.ConfigFlag, commonflags.ConfigFlagShorthand, "", commonflags.ConfigFlagUsage) listCmd.Flags().String(commonflags.ConfigDirFlag, "", commonflags.ConfigDirFlagUsage) } func initRestoreCmd() { Cmd.AddCommand(restoreCmd) restoreCmd.Flags().StringP(commonflags.ConfigFlag, commonflags.ConfigFlagShorthand, "", commonflags.ConfigFlagUsage) restoreCmd.Flags().String(commonflags.ConfigDirFlag, "", commonflags.ConfigDirFlagUsage) restoreCmd.Flags().String(CIDFlag, "", CIDFlagUsage) restoreCmd.Flags().String(OIDFlag, "", OIDFlagUsage) } func initRemoveCmd() { Cmd.AddCommand(removeCmd) removeCmd.Flags().StringP(commonflags.ConfigFlag, commonflags.ConfigFlagShorthand, "", commonflags.ConfigFlagUsage) removeCmd.Flags().String(commonflags.ConfigDirFlag, "", commonflags.ConfigDirFlagUsage) removeCmd.Flags().String(CIDFlag, "", CIDFlagUsage) removeCmd.Flags().String(OIDFlag, "", OIDFlagUsage) }