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" walletFlag = "wallet" walletFlagShorthand = "w" walletFlagUsage = "Path to the wallet or binary key" addressFlag = "address" addressFlagUsage = "Address of wallet account" moveFlag = "move" moveFlagUsage = "Move objects from storage engine to quarantine" ) 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.ConfigFlag, cmd.Flags().Lookup(commonflags.ConfigFlag)) _ = viper.BindPFlag(commonflags.ConfigDirFlag, cmd.Flags().Lookup(commonflags.ConfigDirFlag)) _ = viper.BindPFlag(walletFlag, cmd.Flags().Lookup(walletFlag)) _ = viper.BindPFlag(addressFlag, cmd.Flags().Lookup(addressFlag)) _ = viper.BindPFlag(flagBatchSize, cmd.Flags().Lookup(flagBatchSize)) _ = viper.BindPFlag(moveFlag, cmd.Flags().Lookup(moveFlag)) }, 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)) _ = viper.BindPFlag(cidFlag, cmd.Flags().Lookup(cidFlag)) }, 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.ConfigFlag, commonflags.ConfigFlagShorthand, "", commonflags.ConfigFlagUsage) scanCmd.Flags().String(commonflags.ConfigDirFlag, "", commonflags.ConfigDirFlagUsage) scanCmd.Flags().Uint32(flagBatchSize, 1000, flagBatchSizeUsage) scanCmd.Flags().StringP(walletFlag, walletFlagShorthand, "", walletFlagUsage) scanCmd.Flags().String(addressFlag, "", addressFlagUsage) scanCmd.Flags().Bool(moveFlag, false, moveFlagUsage) } func initListCmd() { Cmd.AddCommand(listCmd) listCmd.Flags().StringP(commonflags.ConfigFlag, commonflags.ConfigFlagShorthand, "", commonflags.ConfigFlagUsage) listCmd.Flags().String(commonflags.ConfigDirFlag, "", commonflags.ConfigDirFlagUsage) listCmd.Flags().String(cidFlag, "", cidFlagUsage) } 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) }