package zombie import ( "errors" "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/commonflags" "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config" commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/spf13/cobra" ) func remove(cmd *cobra.Command, _ []string) { configFile, _ := cmd.Flags().GetString(commonflags.ConfigFlag) configDir, _ := cmd.Flags().GetString(commonflags.ConfigDirFlag) appCfg := config.New(configFile, configDir, config.EnvPrefix) storageEngine := newEngine(cmd, appCfg) q := createQuarantine(cmd, storageEngine.DumpInfo()) var containerID cid.ID cidStr, _ := cmd.Flags().GetString(cidFlag) commonCmd.ExitOnErr(cmd, "decode container ID string: %w", containerID.DecodeString(cidStr)) var objectID *oid.ID oidStr, _ := cmd.Flags().GetString(oidFlag) if oidStr != "" { objectID = &oid.ID{} commonCmd.ExitOnErr(cmd, "decode object ID string: %w", objectID.DecodeString(oidStr)) } if objectID != nil { var addr oid.Address addr.SetContainer(containerID) addr.SetObject(*objectID) removeObject(cmd, q, addr) } else { commonCmd.ExitOnErr(cmd, "iterate over quarantine: %w", q.Iterate(cmd.Context(), func(addr oid.Address) error { if addr.Container() != containerID { return nil } removeObject(cmd, q, addr) return nil })) } } func removeObject(cmd *cobra.Command, q *quarantine, addr oid.Address) { err := q.Delete(cmd.Context(), addr) if errors.Is(err, new(apistatus.ObjectNotFound)) { return } commonCmd.ExitOnErr(cmd, "remove object from quarantine: %w", err) }