diff --git a/go.mod b/go.mod index 22834b478..604c07aa4 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,9 @@ require ( github.com/google/uuid v1.6.0 github.com/longhorn/backupstore v0.0.0-20240827054225-fe89e488b75f github.com/longhorn/go-common-libs v0.0.0-20240821134112-907f57efd48f - github.com/longhorn/go-spdk-helper v0.0.0-20240827171022-9fe38fff5b51 + github.com/longhorn/go-spdk-helper v0.0.0-20240902084253-ba8761258885 github.com/longhorn/longhorn-engine v1.8.0-dev-20240825.0.20240831055950-b629ebaafa55 - github.com/longhorn/longhorn-spdk-engine v0.0.0-20240828022045-4ced424e8651 + github.com/longhorn/longhorn-spdk-engine v0.0.0-20240903022243-ca0b8f4dae1f github.com/longhorn/types v0.0.0-20240827042720-af8f10eb57cd github.com/pkg/errors v0.9.1 github.com/sirupsen/logrus v1.9.3 @@ -59,7 +59,6 @@ require ( github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/longhorn/go-iscsi-helper v0.0.0-20240811043302-df8de353dd58 // indirect - github.com/longhorn/nsfilelock v0.0.0-20200723175406-fa7c83ad0003 // indirect github.com/longhorn/sparse-tools v0.0.0-20240729132735-18b207e459ff // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect diff --git a/go.sum b/go.sum index 1ee9c79e2..607187c6a 100644 --- a/go.sum +++ b/go.sum @@ -111,14 +111,12 @@ github.com/longhorn/go-common-libs v0.0.0-20240821134112-907f57efd48f h1:hjqUs3W github.com/longhorn/go-common-libs v0.0.0-20240821134112-907f57efd48f/go.mod h1:Qv34svr/msf6XoUwnrltNBTwMhQljbHEhb5ZKWiRdxo= github.com/longhorn/go-iscsi-helper v0.0.0-20240811043302-df8de353dd58 h1:fzLAnCLCecoUnsSYyyo7li5GD17xckyBl/zietxz168= github.com/longhorn/go-iscsi-helper v0.0.0-20240811043302-df8de353dd58/go.mod h1:TobRDCXmF0Ni+jz6+nLJamw3uVu+gNDZoZre1JczGwc= -github.com/longhorn/go-spdk-helper v0.0.0-20240827171022-9fe38fff5b51 h1:qU69qwOdcJyDG36Bgp4/b/lydmpJZsPVx+bpszrzQFc= -github.com/longhorn/go-spdk-helper v0.0.0-20240827171022-9fe38fff5b51/go.mod h1:i9btdUP+14isigk+vOfANF7MQAbDO+u/ixeA/oOUwtA= +github.com/longhorn/go-spdk-helper v0.0.0-20240902084253-ba8761258885 h1:T0IQ9TIVDBm3IYy7ufvxBclxVa4q4c69HgjP0/OlnhY= +github.com/longhorn/go-spdk-helper v0.0.0-20240902084253-ba8761258885/go.mod h1:hoJmEzRBENFMEPqdX7jiEyjWMYMXNDxEXrHfAE99qVg= github.com/longhorn/longhorn-engine v1.8.0-dev-20240825.0.20240831055950-b629ebaafa55 h1:BJb3yRM/iCkwaHF8MrIqMCgXkEkiprshivAXBN36NlI= github.com/longhorn/longhorn-engine v1.8.0-dev-20240825.0.20240831055950-b629ebaafa55/go.mod h1:WxnRZefYEMqrTn4H189DTqIPeKEAknNlmQjoAOk9K38= -github.com/longhorn/longhorn-spdk-engine v0.0.0-20240828022045-4ced424e8651 h1:KK1c3zGJcM2FptA2cqPCxlIGEwNXR0WtfShIFxO06fk= -github.com/longhorn/longhorn-spdk-engine v0.0.0-20240828022045-4ced424e8651/go.mod h1:uBUFsGzTlrsf7FWMiKNEb2n6b/rceK2734jbs1Y66p8= -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/longhorn-spdk-engine v0.0.0-20240903022243-ca0b8f4dae1f h1:nLZMHdwzwkWeLVXPEw8/JfAaC4ytkgCphnPHNWd/byo= +github.com/longhorn/longhorn-spdk-engine v0.0.0-20240903022243-ca0b8f4dae1f/go.mod h1:ZJSMYDAwnL2YXDbc9waUi7TY1iAWOy4b8m0edjQM+U0= github.com/longhorn/sparse-tools v0.0.0-20240729132735-18b207e459ff h1:gmdQDbnaGJ/zmrK+QJzSys8mH679os6i7vW/pOpRn1U= github.com/longhorn/sparse-tools v0.0.0-20240729132735-18b207e459ff/go.mod h1:iUJCZtOKG/9xv2rfrUAYZntFTzP5dZtvy4Kwe6dMcUc= github.com/longhorn/types v0.0.0-20240827042720-af8f10eb57cd h1:AwVxaFaxLPmyl++SyigaZZw8u+Ggun7HlcmNgNqyhjs= diff --git a/vendor/github.com/longhorn/go-spdk-helper/pkg/nvme/initiator.go b/vendor/github.com/longhorn/go-spdk-helper/pkg/nvme/initiator.go index 0190aaa24..e9fdac98d 100644 --- a/vendor/github.com/longhorn/go-spdk-helper/pkg/nvme/initiator.go +++ b/vendor/github.com/longhorn/go-spdk-helper/pkg/nvme/initiator.go @@ -12,7 +12,6 @@ import ( commonns "github.com/longhorn/go-common-libs/ns" commontypes "github.com/longhorn/go-common-libs/types" - "github.com/longhorn/nsfilelock" "github.com/longhorn/go-spdk-helper/pkg/types" "github.com/longhorn/go-spdk-helper/pkg/util" @@ -80,12 +79,25 @@ func NewInitiator(name, subsystemNQN, hostProc string) (*Initiator, error) { }, nil } +func (i *Initiator) newLock() (*commonns.FileLock, error) { + if i.hostProc != commontypes.HostProcDirectory { + return nil, fmt.Errorf("invalid host proc path %s for initiator %s, supported path is %s", i.hostProc, i.Name, commontypes.HostProcDirectory) + } + + lock := commonns.NewLock(LockFile, LockTimeout) + if err := lock.Lock(); err != nil { + return nil, errors.Wrapf(err, "failed to get file lock for initiator %s", i.Name) + } + + return lock, nil +} + // DiscoverTarget discovers a target func (i *Initiator) DiscoverTarget(ip, port string) (string, error) { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return "", errors.Wrapf(err, "failed to get file lock for initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return "", err } defer lock.Unlock() } @@ -96,9 +108,9 @@ func (i *Initiator) DiscoverTarget(ip, port string) (string, error) { // ConnectTarget connects to a target func (i *Initiator) ConnectTarget(ip, port, nqn string) (string, error) { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return "", errors.Wrapf(err, "failed to get file lock for initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return "", err } defer lock.Unlock() } @@ -109,9 +121,9 @@ func (i *Initiator) ConnectTarget(ip, port, nqn string) (string, error) { // DisconnectTarget disconnects a target func (i *Initiator) DisconnectTarget() error { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return errors.Wrapf(err, "failed to get file lock for initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return err } defer lock.Unlock() } @@ -122,9 +134,9 @@ func (i *Initiator) DisconnectTarget() error { // WaitForConnect waits for the NVMe initiator to connect func (i *Initiator) WaitForConnect(maxNumRetries int, retryInterval time.Duration) (err error) { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return errors.Wrapf(err, "failed to get file lock for initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return err } defer lock.Unlock() } @@ -143,9 +155,9 @@ func (i *Initiator) WaitForConnect(maxNumRetries int, retryInterval time.Duratio // WaitForDisconnect waits for the NVMe initiator to disconnect func (i *Initiator) WaitForDisconnect(maxNumRetries int, retryInterval time.Duration) (err error) { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return errors.Wrapf(err, "failed to get file lock for initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return err } defer lock.Unlock() } @@ -164,9 +176,9 @@ func (i *Initiator) WaitForDisconnect(maxNumRetries int, retryInterval time.Dura // Suspend suspends the device mapper device for the NVMe initiator func (i *Initiator) Suspend(noflush, nolockfs bool) error { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return errors.Wrapf(err, "failed to get file lock for initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return err } defer lock.Unlock() } @@ -188,9 +200,9 @@ func (i *Initiator) Suspend(noflush, nolockfs bool) error { // Resume resumes the device mapper device for the NVMe initiator func (i *Initiator) Resume() error { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return errors.Wrapf(err, "failed to get file lock for initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return err } defer lock.Unlock() } @@ -251,9 +263,9 @@ func (i *Initiator) Start(transportAddress, transportServiceID string, dmDeviceA } if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return false, errors.Wrapf(err, "failed to get file lock for initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return false, err } defer lock.Unlock() } @@ -358,9 +370,9 @@ func (i *Initiator) Start(transportAddress, transportServiceID string, dmDeviceA func (i *Initiator) Stop(dmDeviceAndEndpointCleanupRequired, deferDmDeviceCleanup, errOnBusyDmDevice bool) (bool, error) { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return false, errors.Wrapf(err, "failed to get file lock for NVMe initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return false, err } defer lock.Unlock() } @@ -431,9 +443,9 @@ func (i *Initiator) GetEndpoint() string { func (i *Initiator) LoadNVMeDeviceInfo(transportAddress, transportServiceID, subsystemNQN string) (err error) { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return errors.Wrapf(err, "failed to get file lock for NVMe initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return err } defer lock.Unlock() } @@ -609,9 +621,9 @@ func (i *Initiator) suspendLinearDmDevice(noflush, nolockfs bool) error { // ReloadDmDevice reloads the linear dm device func (i *Initiator) ReloadDmDevice() (err error) { if i.hostProc != "" { - lock := nsfilelock.NewLockWithTimeout(util.GetHostNamespacePath(i.hostProc), LockFile, LockTimeout) - if err := lock.Lock(); err != nil { - return errors.Wrapf(err, "failed to get file lock for NVMe initiator %s", i.Name) + lock, err := i.newLock() + if err != nil { + return err } defer lock.Unlock() } diff --git a/vendor/github.com/longhorn/nsfilelock/.gitignore b/vendor/github.com/longhorn/nsfilelock/.gitignore deleted file mode 100644 index daf913b1b..000000000 --- a/vendor/github.com/longhorn/nsfilelock/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/vendor/github.com/longhorn/nsfilelock/Dockerfile.dapper b/vendor/github.com/longhorn/nsfilelock/Dockerfile.dapper deleted file mode 100644 index d8826eceb..000000000 --- a/vendor/github.com/longhorn/nsfilelock/Dockerfile.dapper +++ /dev/null @@ -1,42 +0,0 @@ -FROM ubuntu:16.04 - -# Setup environment -ENV PATH /go/bin:$PATH -ENV DAPPER_DOCKER_SOCKET true -ENV DAPPER_ENV TAG REPO -ENV DAPPER_OUTPUT bin -ENV DAPPER_RUN_ARGS --privileged -v /proc:/host/proc -ENV DAPPER_SOURCE /go/src/github.com/longhorn/nsfilelock -ENV TRASH_CACHE ${DAPPER_SOURCE}/.trash-cache -WORKDIR ${DAPPER_SOURCE} - -# Install packages -RUN sed -i "s/http:\/\/archive.ubuntu.com\/ubuntu\//mirror:\/\/mirrors.ubuntu.com\/mirrors.txt/g" /etc/apt/sources.list && \ - apt-get update && \ - apt-get install -y cmake curl git - # \ - # libglib2.0-dev libkmod-dev libnl-genl-3-dev linux-libc-dev pkg-config psmisc python-tox qemu-utils fuse python-dev \ - # devscripts debhelper bash-completion librdmacm-dev libibverbs-dev xsltproc docbook-xsl \ - # libconfig-general-perl libaio-dev libc6-dev - -# Install Go -RUN curl -Lo go.tar.gz https://golang.org/dl/go1.14.6.linux-amd64.tar.gz -RUN echo '5c566ddc2e0bcfc25c26a5dc44a440fcc0177f7350c1f01952b34d5989a0d287 go.tar.gz' | sha256sum -c && \ - tar xzf go.tar.gz -C /usr/local && \ - rm go.tar.gz -RUN mkdir -p /go -ENV PATH $PATH:/usr/local/go/bin -ENV GOPATH=/go - -# Go tools -RUN go get github.com/rancher/trash -RUN go get golang.org/x/lint/golint - -# Docker -RUN curl -sL https://get.docker.com/builds/Linux/x86_64/docker-1.9.1 > /usr/bin/docker && \ - chmod +x /usr/bin/docker - -VOLUME /tmp -ENV TMPDIR /tmp -ENTRYPOINT ["./scripts/entry"] -CMD ["ci"] diff --git a/vendor/github.com/longhorn/nsfilelock/LICENSE b/vendor/github.com/longhorn/nsfilelock/LICENSE deleted file mode 100644 index 8dada3eda..000000000 --- a/vendor/github.com/longhorn/nsfilelock/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/longhorn/nsfilelock/Makefile b/vendor/github.com/longhorn/nsfilelock/Makefile deleted file mode 100644 index d7d72a16d..000000000 --- a/vendor/github.com/longhorn/nsfilelock/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -TARGETS := $(shell ls scripts) - -.dapper: - @echo Downloading dapper - @curl -sL https://releases.rancher.com/dapper/latest/dapper-`uname -s`-`uname -m` > .dapper.tmp - @@chmod +x .dapper.tmp - @./.dapper.tmp -v - @mv .dapper.tmp .dapper - -$(TARGETS): .dapper - ./.dapper $@ - -trash: .dapper - ./.dapper -m bind trash - -trash-keep: .dapper - ./.dapper -m bind trash -k - -deps: trash - -.DEFAULT_GOAL := ci - -.PHONY: $(TARGETS) diff --git a/vendor/github.com/longhorn/nsfilelock/README.md b/vendor/github.com/longhorn/nsfilelock/README.md deleted file mode 100644 index f92a1024b..000000000 --- a/vendor/github.com/longhorn/nsfilelock/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# NSFileLock -File lock (flock) in another namespace. - -# Motivation: - -I am working on various projects rely on a privileged container(Docker), in -which case the process running inside the container will have the ability to -switch namespace to the host. Sometimes, we want to make sure certain thing -won't happen simultaneously on the host in the case of multiple instances of the -container is running. But bind-mount an additional directory just for this -purpose seems unnecessarily cumbersome, and especially we already have the -ability to switch to the host namespace (especially mount namespace) for certain -operations. - -But as a Go program, it's hard to hold a file descriptor in another namespace to -perform flock operation, since `nsenter`, which is the easiest way to switch -namespace, is a bash program. Of course, you can call `setns` syscall used by -`nsenter` to get the process into the new namespace, though that means you got -to rewrite the `nsenter` just for grabbing a lock. - -This library provides a reliable way to do so without rewrite `nsenter`. - -# Target - -The target is simply: simulate the behavior of `flock` in another namespace. - -The most import behavior of `flock` is: - -The lock will expire immediately when the process holding file descriptor exits. - -It's the key reason why we don't want to create a file in the other -namespace to simulate the lock. In that case, the crash of process holding the -lock will result in infinitely blocking all the following processes. - -For `flock`, since it's only related to opened file descriptor, as soon as the -file descriptor is closed (e.g. unlock, or process crashed so OS release all its -resources), the lock will expire. diff --git a/vendor/github.com/longhorn/nsfilelock/nsfilelock.go b/vendor/github.com/longhorn/nsfilelock/nsfilelock.go deleted file mode 100644 index 070c15e75..000000000 --- a/vendor/github.com/longhorn/nsfilelock/nsfilelock.go +++ /dev/null @@ -1,142 +0,0 @@ -package nsfilelock - -import ( - "fmt" - "os" - "os/exec" - "path/filepath" - "strings" - "syscall" - "time" -) - -const ( - MountNamespaceFD = "mnt" - MaximumMessageSize = 255 - - SuccessResponse = "NSFileLock LOCKED" -) - -var ( - DefaultTimeout = 15 * time.Second -) - -type NSFileLock struct { - Namespace string - FilePath string - Timeout time.Duration - - done chan struct{} -} - -func NewLock(ns string, filepath string) *NSFileLock { - return &NSFileLock{ - Namespace: ns, - FilePath: filepath, - Timeout: DefaultTimeout, - } -} - -func NewLockWithTimeout(ns string, filepath string, timeout time.Duration) *NSFileLock { - if timeout == 0 { - timeout = DefaultTimeout - } - return &NSFileLock{ - Namespace: ns, - FilePath: filepath, - Timeout: timeout, - } -} - -func (l *NSFileLock) Lock() error { - resp := "" - - l.done = make(chan struct{}) - result := make(chan string) - timeout := make(chan struct{}) - - cmdline := []string{} - if l.Namespace != "" { - nsFD := filepath.Join(l.Namespace, MountNamespaceFD) - if _, err := os.Stat(nsFD); err != nil { - return fmt.Errorf("Invalid namespace fd %s: %v", nsFD, err) - } - cmdline = []string{"nsenter", "--mount=" + nsFD} - } - - lockCmd := fmt.Sprintf("\"\"exec 314>%s && flock 314 && echo %s && exec sleep 65535\"\"", - l.FilePath, SuccessResponse) - - cmdline = append(cmdline, "bash", "-c", lockCmd) - cmd := exec.Command(cmdline[0], cmdline[1:]...) - cmd.SysProcAttr = &syscall.SysProcAttr{Pdeathsig: syscall.SIGTERM} - stdout, err := cmd.StdoutPipe() - if err != nil { - return err - } - stderr, err := cmd.StderrPipe() - if err != nil { - return err - } - - err = cmd.Start() - if err != nil { - return err - } - - go func() { - var err error - buf := make([]byte, MaximumMessageSize) - n := 0 - for n == 0 { - n, err = stdout.Read(buf) - if err != nil { - result <- err.Error() - } - } - result <- strings.Trim(string(buf), "\n\x00") - }() - - go func() { - var err error - buf := make([]byte, MaximumMessageSize) - n := 0 - for n == 0 { - n, err = stderr.Read(buf) - if err != nil { - result <- err.Error() - } - } - result <- strings.Trim(string(buf), "\n\x00") - }() - - go func() { - time.Sleep(l.Timeout) - timeout <- struct{}{} - }() - - select { - case resp = <-result: - if resp != SuccessResponse { - return fmt.Errorf("Failed to lock, response: %s, expected %s", resp, SuccessResponse) - } - case <-timeout: - syscall.Kill(cmd.Process.Pid, syscall.SIGTERM) - return fmt.Errorf("Timeout waiting for lock") - } - - // Wait for unlock - go func() { - select { - case <-l.done: - syscall.Kill(cmd.Process.Pid, syscall.SIGTERM) - cmd.Wait() - return - } - }() - return nil -} - -func (l *NSFileLock) Unlock() { - l.done <- struct{}{} -} diff --git a/vendor/github.com/longhorn/nsfilelock/vendor.conf b/vendor/github.com/longhorn/nsfilelock/vendor.conf deleted file mode 100644 index 64fd97551..000000000 --- a/vendor/github.com/longhorn/nsfilelock/vendor.conf +++ /dev/null @@ -1,6 +0,0 @@ -# trash.conf - -# package -github.com/longhorn/nsfilelock - -gopkg.in/check.v1 20d25e2 diff --git a/vendor/modules.txt b/vendor/modules.txt index 2183cfe5a..91e0fbd41 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -245,7 +245,7 @@ github.com/longhorn/go-iscsi-helper/iscsidev github.com/longhorn/go-iscsi-helper/longhorndev github.com/longhorn/go-iscsi-helper/types github.com/longhorn/go-iscsi-helper/util -# github.com/longhorn/go-spdk-helper v0.0.0-20240827171022-9fe38fff5b51 +# github.com/longhorn/go-spdk-helper v0.0.0-20240902084253-ba8761258885 ## explicit; go 1.22.0 github.com/longhorn/go-spdk-helper/pkg/jsonrpc github.com/longhorn/go-spdk-helper/pkg/nvme @@ -267,7 +267,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-20240828022045-4ced424e8651 +# github.com/longhorn/longhorn-spdk-engine v0.0.0-20240903022243-ca0b8f4dae1f ## explicit; go 1.22.0 github.com/longhorn/longhorn-spdk-engine/pkg/api github.com/longhorn/longhorn-spdk-engine/pkg/client @@ -280,9 +280,6 @@ github.com/longhorn/longhorn-spdk-engine/pkg/spdk/disk/virtio-scsi github.com/longhorn/longhorn-spdk-engine/pkg/types github.com/longhorn/longhorn-spdk-engine/pkg/util github.com/longhorn/longhorn-spdk-engine/pkg/util/broadcaster -# github.com/longhorn/nsfilelock v0.0.0-20200723175406-fa7c83ad0003 -## explicit -github.com/longhorn/nsfilelock # github.com/longhorn/sparse-tools v0.0.0-20240729132735-18b207e459ff ## explicit; go 1.22.0 github.com/longhorn/sparse-tools/sparse