diff --git a/go.mod b/go.mod index 43fc41a07..02d3fce62 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/longhorn/go-common-libs v0.0.0-20240727052403-b543ea3732fe github.com/longhorn/go-spdk-helper v0.0.0-20240727080828-a55a2982815a github.com/longhorn/longhorn-engine v1.7.0-rc1 - github.com/longhorn/longhorn-spdk-engine v0.0.0-20240727114504-89a392e62633 + github.com/longhorn/longhorn-spdk-engine v0.0.0-20240731051620-4b7c226d2570 github.com/longhorn/types v0.0.0-20240725040629-473d671316c4 github.com/pkg/errors v0.9.1 github.com/sirupsen/logrus v1.9.3 diff --git a/go.sum b/go.sum index 8fa477124..b09a81d30 100644 --- a/go.sum +++ b/go.sum @@ -101,8 +101,8 @@ github.com/longhorn/go-spdk-helper v0.0.0-20240727080828-a55a2982815a h1:x54NTKw github.com/longhorn/go-spdk-helper v0.0.0-20240727080828-a55a2982815a/go.mod h1:sD6aVynQSbPnYyJ77NLiYbWNI5zyzxcVzIEnXFcKCww= github.com/longhorn/longhorn-engine v1.7.0-rc1 h1:kQ4BwCvBemWsQvVnLdRsbiCXR3zmQBMA1J9Ezysh2q0= github.com/longhorn/longhorn-engine v1.7.0-rc1/go.mod h1:u0TZ1221YusDYA+ExdVLjLid1Ps6JuJXgh9185l5D9Y= -github.com/longhorn/longhorn-spdk-engine v0.0.0-20240727114504-89a392e62633 h1:OW8Vx/3Hh5NenKAm7RN+Gn9W12c3jrvsLx3aaRllxqo= -github.com/longhorn/longhorn-spdk-engine v0.0.0-20240727114504-89a392e62633/go.mod h1:wL4qNnw5bLF9rlv8XJtT1kcca5Fl8Twmef8dQ5OdmU4= +github.com/longhorn/longhorn-spdk-engine v0.0.0-20240731051620-4b7c226d2570 h1:pRj714KwbmFLeEkdmyiVRezmfD6IJXi7cxuVPQjSQRE= +github.com/longhorn/longhorn-spdk-engine v0.0.0-20240731051620-4b7c226d2570/go.mod h1:wL4qNnw5bLF9rlv8XJtT1kcca5Fl8Twmef8dQ5OdmU4= github.com/longhorn/nsfilelock v0.0.0-20200723175406-fa7c83ad0003 h1:Jw9uANsGcHTxp6HcC++/vN17LfeuDmozHI2j6DoZf5E= github.com/longhorn/nsfilelock v0.0.0-20200723175406-fa7c83ad0003/go.mod h1:0CLeXlf59Lg6C0kjLSDf47ft73Dh37CwymYRKWwAn04= github.com/longhorn/sparse-tools v0.0.0-20240703010727-92451e38077a h1:+o63c0oh7ZNKeQdc0Hawfzz5vRa4LiDvLOtJYjegtnk= diff --git a/pkg/client/disk.go b/pkg/client/disk.go index 5068f0cda..110a7a4ed 100644 --- a/pkg/client/disk.go +++ b/pkg/client/disk.go @@ -170,8 +170,8 @@ func (c *DiskServiceClient) DiskGet(diskType, diskName, diskPath, diskDriver str // DiskDelete deletes the disk with the given name, disk name, disk UUID, disk path and disk driver. func (c *DiskServiceClient) DiskDelete(diskType, diskName, diskUUID, diskPath, diskDriver string) error { - if diskName == "" || diskUUID == "" { - return fmt.Errorf("failed to delete disk: missing required parameters") + if diskName == "" { + return fmt.Errorf("failed to delete disk: missing required diskName") } client := c.getDiskServiceClient() diff --git a/pkg/disk/disk.go b/pkg/disk/disk.go index 78f8103c4..aae4a0cca 100644 --- a/pkg/disk/disk.go +++ b/pkg/disk/disk.go @@ -149,8 +149,8 @@ func (s *Server) DiskDelete(ctx context.Context, req *rpc.DiskDeleteRequest) (*e log.Info("Disk Server: Deleting disk") - if req.DiskName == "" || req.DiskUuid == "" { - return nil, grpcstatus.Error(grpccodes.InvalidArgument, "disk name and disk UUID are required") + if req.DiskName == "" { + return nil, grpcstatus.Error(grpccodes.InvalidArgument, "disk name is required") } ops, ok := s.ops[req.DiskType] diff --git a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/client/client.go b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/client/client.go index 75a5080f6..c6f88741b 100644 --- a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/client/client.go +++ b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/client/client.go @@ -929,8 +929,8 @@ func (c *SPDKClient) DiskGet(diskName, diskPath, diskDriver string) (*spdkrpc.Di } func (c *SPDKClient) DiskDelete(diskName, diskUUID, diskPath, diskDriver string) error { - if diskName == "" || diskUUID == "" { - return fmt.Errorf("failed to delete disk: missing required parameters") + if diskName == "" { + return fmt.Errorf("failed to delete disk: missing required parameter disk name") } client := c.getSPDKServiceClient() diff --git a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk.go b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk.go index c4a21c73c..9de484afe 100644 --- a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk.go +++ b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk.go @@ -85,17 +85,26 @@ func svcDiskDelete(spdkClient *spdkclient.Client, diskName, diskUUID, diskPath, } }() - if diskName == "" || diskUUID == "" { - return &emptypb.Empty{}, grpcstatus.Error(grpccodes.InvalidArgument, "disk name and disk UUID are required") + if diskName == "" { + return &emptypb.Empty{}, grpcstatus.Error(grpccodes.InvalidArgument, "disk name is required") } + var lvstores []spdktypes.LvstoreInfo bdevName := "" - lvstores, err := spdkClient.BdevLvolGetLvstore("", diskUUID) + + if diskUUID != "" { + lvstores, err = spdkClient.BdevLvolGetLvstore("", diskUUID) + } else { + // The disk is not successfully created in creation stage because the diskUUID is not provided, + // so we blindly use the diskName as the bdevName here. + log.Warn("Disk UUID is not provided, trying to get lvstore with disk name") + lvstores, err = spdkClient.BdevLvolGetLvstore(diskName, "") + } if err != nil { if !jsonrpc.IsJSONRPCRespErrorNoSuchDevice(err) { return nil, errors.Wrapf(err, "failed to get lvstore with UUID %v", diskUUID) } - log.Warnf("Cannot find lvstore with UUID %v", diskUUID) + log.WithError(err).Warn("Failed to get lvstore with UUID or disk name, blindly use disk name as bdev name") bdevName = diskName } else { lvstore := &lvstores[0] diff --git a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/nvme/nvme.go b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/nvme/nvme.go index 4f7b4e423..4e82b5472 100644 --- a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/nvme/nvme.go +++ b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/nvme/nvme.go @@ -35,7 +35,16 @@ func (d *DiskDriverNvme) DiskCreate(spdkClient *spdkclient.Client, diskName, dis if err != nil { return "", errors.Wrapf(err, "failed to bind NVMe disk %v", diskPath) } + defer func() { + if err != nil { + logrus.WithError(err).Warnf("Unbinding NVMe disk %v since failed to attach", diskPath) + _, errUnbind := spdksetup.Unbind(diskPath, executor) + if errUnbind != nil { + logrus.WithError(errUnbind).Warnf("Failed to unbind NVMe disk %v since failed to attach", diskPath) + } + } + }() bdevs, err := spdkClient.BdevNvmeAttachController(diskName, "", diskPath, "", "PCIe", "", helpertypes.DefaultCtrlrLossTimeoutSec, helpertypes.DefaultReconnectDelaySec, helpertypes.DefaultFastIOFailTimeoutSec, helpertypes.DefaultMultipath) diff --git a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/virtio-blk/virtio-blk.go b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/virtio-blk/virtio-blk.go index 147af0e33..24e43453a 100644 --- a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/virtio-blk/virtio-blk.go +++ b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/virtio-blk/virtio-blk.go @@ -2,6 +2,7 @@ package virtioblk import ( "github.com/pkg/errors" + "github.com/sirupsen/logrus" commonTypes "github.com/longhorn/go-common-libs/types" "github.com/longhorn/go-spdk-helper/pkg/jsonrpc" @@ -32,6 +33,16 @@ func (d *DiskDriverVirtioBlk) DiskCreate(spdkClient *spdkclient.Client, diskName if err != nil { return "", errors.Wrapf(err, "failed to bind virtio-blk disk %v", diskPath) } + defer func() { + if err != nil { + logrus.WithError(err).Warnf("Unbinding virtio-blk disk %v since failed to attach", diskPath) + + _, errUnbind := spdksetup.Unbind(diskPath, executor) + if errUnbind != nil { + logrus.WithError(errUnbind).Warnf("Failed to unbind virtio-blk disk %v since failed to attach", diskPath) + } + } + }() bdevs, err := spdkClient.BdevVirtioAttachController(diskName, "pci", diskPath, "blk") if err != nil { diff --git a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/virtio-scsi/virtio-scsi.go b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/virtio-scsi/virtio-scsi.go index 5d600d000..828a57d61 100644 --- a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/virtio-scsi/virtio-scsi.go +++ b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/virtio-scsi/virtio-scsi.go @@ -2,6 +2,7 @@ package virtioscsi import ( "github.com/pkg/errors" + "github.com/sirupsen/logrus" commonTypes "github.com/longhorn/go-common-libs/types" "github.com/longhorn/go-spdk-helper/pkg/jsonrpc" @@ -32,6 +33,16 @@ func (d *DiskDriverVirtioScsi) DiskCreate(spdkClient *spdkclient.Client, diskNam if err != nil { return "", errors.Wrapf(err, "failed to bind virtio-scsi disk %v", diskPath) } + defer func() { + if err != nil { + logrus.WithError(err).Warnf("Unbinding virtio-scsi disk %v since failed to attach", diskPath) + + _, errUnbind := spdksetup.Unbind(diskPath, executor) + if errUnbind != nil { + logrus.WithError(errUnbind).Warnf("Failed to unbind virtio-scsi disk %v since failed to attach", diskPath) + } + } + }() bdevs, err := spdkClient.BdevVirtioAttachController(diskName, "pci", diskPath, "scsi") if err != nil { diff --git a/vendor/modules.txt b/vendor/modules.txt index f20def962..74f054ff0 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -230,7 +230,7 @@ github.com/longhorn/longhorn-engine/pkg/sync github.com/longhorn/longhorn-engine/pkg/types github.com/longhorn/longhorn-engine/pkg/util github.com/longhorn/longhorn-engine/pkg/util/disk -# github.com/longhorn/longhorn-spdk-engine v0.0.0-20240727114504-89a392e62633 +# github.com/longhorn/longhorn-spdk-engine v0.0.0-20240731051620-4b7c226d2570 ## explicit; go 1.22.0 github.com/longhorn/longhorn-spdk-engine/pkg/api github.com/longhorn/longhorn-spdk-engine/pkg/client