diff --git a/cmd/frostfs-adm/internal/modules/maintenance/zombie/scan.go b/cmd/frostfs-adm/internal/modules/maintenance/zombie/scan.go index 8e9c04da5..41ff91d8d 100644 --- a/cmd/frostfs-adm/internal/modules/maintenance/zombie/scan.go +++ b/cmd/frostfs-adm/internal/modules/maintenance/zombie/scan.go @@ -15,6 +15,7 @@ import ( commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common" clientCore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/client" netmapCore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/netmap" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/engine" cntClient "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/container" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/netmap" @@ -102,9 +103,9 @@ const ( statusQuarantine status = "quarantine" ) -func checkAddr(ctx context.Context, cnrCli *cntClient.Client, nmCli *netmap.Client, cc *cache.ClientCache, addr oid.Address) (status, error) { +func checkAddr(ctx context.Context, cnrCli *cntClient.Client, nmCli *netmap.Client, cc *cache.ClientCache, obj object.Info) (status, error) { rawCID := make([]byte, sha256.Size) - cid := addr.Container() + cid := obj.Address.Container() cid.Encode(rawCID) cnr, err := cnrCli.Get(rawCID) @@ -127,12 +128,17 @@ func checkAddr(ctx context.Context, cnrCli *cntClient.Client, nmCli *netmap.Clie nodes = append([][]netmap.NodeInfo{}, nm.Nodes()) } - objID := addr.Object() - cnrID := addr.Container() + objID := obj.Address.Object() + cnrID := obj.Address.Container() + local := true + if obj.ECInfo != nil { + objID = obj.ECInfo.ParentID + local = false + } prm := clientSDK.PrmObjectHead{ ObjectID: &objID, ContainerID: &cnrID, - Local: true, + Local: local, } var ni clientCore.NodeInfo @@ -156,7 +162,7 @@ func checkAddr(ctx context.Context, cnrCli *cntClient.Client, nmCli *netmap.Clie } } - if cnr.Value.PlacementPolicy().NumberOfReplicas() == 1 && cnr.Value.PlacementPolicy().ReplicaNumberByIndex(0) == 1 { + if cnr.Value.PlacementPolicy().NumberOfReplicas() == 1 && cnr.Value.PlacementPolicy().ReplicaDescriptor(0).NumberOfObjects() == 1 { return statusFound, nil } return statusQuarantine, nil @@ -202,7 +208,7 @@ func scanStorageEngine(cmd *cobra.Command, batchSize uint32, storageEngine *engi for i := range addrList { addr := addrList[i] eg.Go(func() error { - result, err := checkAddr(egCtx, cnrCli, nmCli, cc, addr.Address) + result, err := checkAddr(egCtx, cnrCli, nmCli, cc, addr) if err != nil { return fmt.Errorf("check object %s status: %w", addr.Address, err) }