diff --git a/go.mod b/go.mod index 9d7845697..19c1a9ce5 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/longhorn/go-common-libs v0.0.0-20240811024046-b6ddc3efb72e github.com/longhorn/go-spdk-helper v0.0.0-20240811121608-9383fa59dd7c github.com/longhorn/longhorn-engine v1.7.0-rc3 - github.com/longhorn/longhorn-spdk-engine v0.0.0-20240811083742-a962f1c7713f + github.com/longhorn/longhorn-spdk-engine v0.0.0-20240811140223-087cddee60f1 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 3c4594b5e..86c28c129 100644 --- a/go.sum +++ b/go.sum @@ -101,8 +101,8 @@ github.com/longhorn/go-spdk-helper v0.0.0-20240811121608-9383fa59dd7c h1:ztjrkxi github.com/longhorn/go-spdk-helper v0.0.0-20240811121608-9383fa59dd7c/go.mod h1:BrtXoVnIZ97+uZ+cMcaICc5KnuJkh8j3+G1NjKxh+8Q= github.com/longhorn/longhorn-engine v1.7.0-rc3 h1:YTt++OeSrEOlifz++8VAOH/aJ4lGShD2TaJP1ZaQ3Uw= github.com/longhorn/longhorn-engine v1.7.0-rc3/go.mod h1:2Hq/3QzW4fF2yUg+kauiAT3ps5WCKLMkrwXW2Wyfj9o= -github.com/longhorn/longhorn-spdk-engine v0.0.0-20240811083742-a962f1c7713f h1:Q86kYKeE8r32lvewvYEa7k5eMPq6laUCcYnP2XgKNl4= -github.com/longhorn/longhorn-spdk-engine v0.0.0-20240811083742-a962f1c7713f/go.mod h1:AEYaufJlkiw6WAzYGdWIZUYdnGXKCk/yluLbdn+5gcc= +github.com/longhorn/longhorn-spdk-engine v0.0.0-20240811140223-087cddee60f1 h1:2hRz+mJySsxJ2D4aAYZcCMnu/8pZoTvNKL088yKaEW8= +github.com/longhorn/longhorn-spdk-engine v0.0.0-20240811140223-087cddee60f1/go.mod h1:AEYaufJlkiw6WAzYGdWIZUYdnGXKCk/yluLbdn+5gcc= 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/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/engine.go b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/engine.go index a5d6d909e..de581ac64 100644 --- a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/engine.go +++ b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/engine.go @@ -219,6 +219,7 @@ func (e *Engine) Create(spdkClient *spdkclient.Client, replicaAddressMap map[str if err != nil { return nil, err } + defer targetSPDKClient.Close() var engineWithTarget *api.Engine if initiatorIP != targetIP { @@ -650,6 +651,8 @@ func (e *Engine) checkAndUpdateInfoFromReplicaNoLock() { e.log.WithError(err).Warnf("failed to get service client for replica %s with address %s, will skip this replica and continue info update from replica", replicaName, address) continue } + defer replicaServiceCli.Close() + replica, err := replicaServiceCli.ReplicaGet(replicaName) if err != nil { e.log.WithError(err).Warnf("Failed to get replica %s with address %s, mark the mode from %v to ERR", replicaName, address, e.ReplicaModeMap[replicaName]) @@ -913,6 +916,7 @@ func (e *Engine) ReplicaAdd(spdkClient *spdkclient.Client, dstReplicaName, dstRe if err != nil { return err } + defer e.closeRplicaClients(replicaClients) srcReplicaName, srcReplicaAddress, err := e.getReplicaAddSrcReplica() if err != nil { @@ -922,15 +926,30 @@ func (e *Engine) ReplicaAdd(spdkClient *spdkclient.Client, dstReplicaName, dstRe if err != nil { return err } + defer func() { + if err != nil { + srcReplicaServiceCli.Close() + } + }() dstReplicaServiceCli, err := GetServiceClient(dstReplicaAddress) if err != nil { return err } + defer func() { + if err != nil { + dstReplicaServiceCli.Close() + } + }() var rebuildingSnapshotList []*api.Lvol // Need to make sure the replica clients available before set this deferred goroutine defer func() { go func() { + defer func() { + srcReplicaServiceCli.Close() + dstReplicaServiceCli.Close() + }() + if err == nil && engineErr == nil { if err = e.replicaShallowCopy(srcReplicaServiceCli, dstReplicaServiceCli, srcReplicaName, dstReplicaName, rebuildingSnapshotList); err != nil { e.log.WithError(err).Errorf("Engine failed to do the shallow copy for replica %s add", dstReplicaName) @@ -1338,6 +1357,7 @@ func (e *Engine) snapshotOperation(spdkClient *spdkclient.Client, inputSnapshotN if err != nil { return "", err } + defer e.closeRplicaClients(replicaClients) if snapshotName, err = e.snapshotOperationPreCheckWithoutLock(replicaClients, inputSnapshotName, snapshotOp); err != nil { return "", err @@ -1384,6 +1404,12 @@ func (e *Engine) getReplicaClients() (replicaClients map[string]*client.SPDKClie return replicaClients, nil } +func (e *Engine) closeRplicaClients(replicaClients map[string]*client.SPDKClient) { + for replicaName := range replicaClients { + replicaClients[replicaName].Close() + } +} + func (e *Engine) snapshotOperationPreCheckWithoutLock(replicaClients map[string]*client.SPDKClient, snapshotName string, snapshotOp SnapshotOperationType) (string, error) { for replicaName := range replicaClients { switch snapshotOp { @@ -1519,6 +1545,7 @@ func (e *Engine) ReplicaList(spdkClient *spdkclient.Client) (ret map[string]*api e.log.WithError(err).Errorf("Failed to get service client for replica %s with address %s", name, address) continue } + defer replicaServiceCli.Close() replica, err := replicaServiceCli.ReplicaGet(name) if err != nil { @@ -1573,6 +1600,7 @@ func (e *Engine) BackupCreate(backupName, volumeName, engineName, snapshotName, if err != nil { return nil, grpcstatus.Errorf(grpccodes.Internal, err.Error()) } + defer replicaServiceCli.Close() recv, err := replicaServiceCli.ReplicaBackupCreate(&client.BackupCreateRequest{ BackupName: backupName, @@ -1622,6 +1650,7 @@ func (e *Engine) BackupStatus(backupName, replicaAddress string) (*spdkrpc.Backu if err != nil { return nil, grpcstatus.Errorf(grpccodes.Internal, err.Error()) } + defer replicaServiceCli.Close() return replicaServiceCli.ReplicaBackupStatus(backupName) } @@ -1669,6 +1698,7 @@ func (e *Engine) BackupRestore(spdkClient *spdkclient.Client, backupUrl, engineN resp.Errors[replicaAddress] = err.Error() continue } + defer replicaServiceCli.Close() err = replicaServiceCli.ReplicaBackupRestore(&client.BackupRestoreRequest{ BackupUrl: backupUrl, @@ -1736,6 +1766,8 @@ func (e *Engine) RestoreStatus() (*spdkrpc.RestoreStatusResponse, error) { if err != nil { return nil, err } + defer replicaServiceCli.Close() + status, err := replicaServiceCli.ReplicaRestoreStatus(replicaName) if err != nil { return nil, err diff --git a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/replica.go b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/replica.go index b0aabcf28..4e6d8b163 100644 --- a/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/replica.go +++ b/vendor/github.com/longhorn/longhorn-spdk-engine/pkg/spdk/replica.go @@ -1563,6 +1563,7 @@ func (r *Replica) RebuildingDstShallowCopyStart(spdkClient *spdkclient.Client, s if err != nil { return err } + defer srcReplicaServiceCli.Close() r.rebuildingDstCache.processingOpID, err = srcReplicaServiceCli.ReplicaRebuildingSrcShallowCopyStart(r.rebuildingDstCache.srcReplicaName, snapshotName) return err @@ -1618,6 +1619,8 @@ func (r *Replica) RebuildingDstShallowCopyCheck(spdkClient *spdkclient.Client) ( if err != nil { return nil, err } + defer srcReplicaServiceCli.Close() + state, copiedClusters, totalClusters, errorMsg, err := srcReplicaServiceCli.ReplicaRebuildingSrcShallowCopyCheck(r.rebuildingDstCache.srcReplicaName, r.Name, r.rebuildingDstCache.processingSnapshotName, r.rebuildingDstCache.processingOpID) if err != nil { errorMsg = errors.Wrapf(err, "dst replica %s failed to check the shallow copy status from src replica %s for snapshot %s", r.Name, r.rebuildingDstCache.srcReplicaName, r.rebuildingDstCache.processingSnapshotName).Error() diff --git a/vendor/modules.txt b/vendor/modules.txt index e6bbd860d..afe0856c4 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-20240811083742-a962f1c7713f +# github.com/longhorn/longhorn-spdk-engine v0.0.0-20240811140223-087cddee60f1 ## explicit; go 1.22.0 github.com/longhorn/longhorn-spdk-engine/pkg/api github.com/longhorn/longhorn-spdk-engine/pkg/client