diff --git a/go.mod b/go.mod index 7d1acf5..16bebdb 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/google/uuid v1.3.0 github.com/hashicorp/go-multierror v1.1.1 github.com/imdario/mergo v0.3.15 - github.com/ipfs/go-ipfs-api v0.6.0 github.com/json-iterator/go v1.1.12 github.com/magefile/mage v1.15.0 github.com/mitchellh/mapstructure v1.5.0 @@ -26,46 +25,25 @@ require ( github.com/benbjohnson/clock v1.3.0 // indirect github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/ipfs/boxo v0.8.0 // indirect - github.com/ipfs/go-cid v0.4.0 // indirect github.com/jtolds/gls v4.20.0+incompatible // indirect - github.com/klauspost/cpuid/v2 v2.2.3 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-flow-metrics v0.1.0 // indirect - github.com/libp2p/go-libp2p v0.26.3 // indirect - github.com/minio/sha256-simd v1.0.0 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect - github.com/multiformats/go-base32 v0.1.0 // indirect - github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.8.0 // indirect - github.com/multiformats/go-multibase v0.1.1 // indirect - github.com/multiformats/go-multicodec v0.8.1 // indirect - github.com/multiformats/go-multihash v0.2.1 // indirect - github.com/multiformats/go-multistream v0.4.1 // indirect - github.com/multiformats/go-varint v0.0.7 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/smartystreets/assertions v1.13.1 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c // indirect + github.com/stretchr/testify v1.8.2 // indirect go.etcd.io/etcd/api/v3 v3.5.9 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect go.uber.org/atomic v1.10.0 // indirect + go.uber.org/goleak v1.1.12 // indirect go.uber.org/multierr v1.9.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.6.0 // indirect golang.org/x/net v0.8.0 // indirect - golang.org/x/sync v0.1.0 golang.org/x/sys v0.6.0 // indirect golang.org/x/text v0.8.0 // indirect google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd // indirect google.golang.org/grpc v1.54.0 // indirect google.golang.org/protobuf v1.30.0 // indirect - lukechampine.com/blake3 v1.1.7 // indirect ) diff --git a/go.sum b/go.sum index 68dc7ef..60a4de8 100644 --- a/go.sum +++ b/go.sum @@ -2,19 +2,13 @@ github.com/antonfisher/nested-logrus-formatter v1.3.1 h1:NFJIr+pzwv5QLHTPyKz9UME github.com/antonfisher/nested-logrus-formatter v1.3.1/go.mod h1:6WTfyWFkBc9+zyBaKIqRrg/KwMqBbodBjgbHjDz7zjA= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927 h1:SKI1/fuSdodxmNNyVBR8d7X/HuLnRpvvFO0AgyQk764= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 h1:HVTnpeuvF6Owjd5mniCL8DEXo7uYXdQEmOP4FJbV5tg= -github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -35,62 +29,28 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/ipfs/boxo v0.8.0 h1:UdjAJmHzQHo/j3g3b1bAcAXCj/GM6iTwvSlBDvPBNBs= -github.com/ipfs/boxo v0.8.0/go.mod h1:RIsi4CnTyQ7AUsNn5gXljJYZlQrHBMnJp94p73liFiA= -github.com/ipfs/go-cid v0.4.0 h1:a4pdZq0sx6ZSxbCizebnKiMCx/xI/aBBFlB73IgH4rA= -github.com/ipfs/go-cid v0.4.0/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= -github.com/ipfs/go-ipfs-api v0.6.0 h1:JARgG0VTbjyVhO5ZfesnbXv9wTcMvoKRBLF1SzJqzmg= -github.com/ipfs/go-ipfs-api v0.6.0/go.mod h1:iDC2VMwN9LUpQV/GzEeZ2zNqd8NUdRmWcFM+K/6odf0= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= -github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= -github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= -github.com/libp2p/go-libp2p v0.26.3 h1:6g/psubqwdaBqNNoidbRKSTBEYgaOuKBhHl8Q5tO+PM= -github.com/libp2p/go-libp2p v0.26.3/go.mod h1:x75BN32YbwuY0Awm2Uix4d4KOz+/4piInkp4Wr3yOo8= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg= github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= -github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= -github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= -github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= -github.com/multiformats/go-multiaddr v0.8.0 h1:aqjksEcqK+iD/Foe1RRFsGZh8+XFiGo7FgUCZlpv3LU= -github.com/multiformats/go-multiaddr v0.8.0/go.mod h1:Fs50eBDWvZu+l3/9S6xAE7ZYj6yhxlvaVZjakWN7xRs= -github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= -github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= -github.com/multiformats/go-multicodec v0.8.1 h1:ycepHwavHafh3grIbR1jIXnKCsFm0fqsfEOsJ8NtKE8= -github.com/multiformats/go-multicodec v0.8.1/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= -github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= -github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= -github.com/multiformats/go-multistream v0.4.1 h1:rFy0Iiyn3YT0asivDUIR05leAdwZq3de4741sbiSdfo= -github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqdtyNUEhKSM0Lwar2p77Q= -github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= -github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/otiai10/copy v1.12.0 h1:cLMgSQnXBs1eehF0Wy/FAGsgDTDmAqFR7rQylBb1nDY= github.com/otiai10/copy v1.12.0/go.mod h1:rSaLseMUsZFFbsFGc7wCJnnkTAvdc5L6VWxPE4308Ww= github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/samber/lo v1.36.0 h1:4LaOxH1mHnbDGhTVE0i1z8v/lWaQW8AIfOD3HU4mSaw= @@ -101,19 +61,21 @@ github.com/smartystreets/assertions v1.13.1 h1:Ef7KhSmjZcK6AVf9YbJdvPYG9avaF0Zxu github.com/smartystreets/assertions v1.13.1/go.mod h1:cXr/IwVfSo/RbCSPhoAPv73p3hlSdrBH/b3SdnW/LMY= github.com/smartystreets/goconvey v1.8.0 h1:Oi49ha/2MURE0WexF052Z0m+BNSGirfjg5RL+JXWq3w= github.com/smartystreets/goconvey v1.8.0/go.mod h1:EdX8jtrTIj26jmjCOVNMVSIYAtgexqXKHOXW2Dx9JLg= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/streadway/amqp v1.1.0 h1:py12iX8XSyI7aN/3dUT8DFIDJazNJsVJdxNVEpnQTZM= github.com/streadway/amqp v1.1.0/go.mod h1:WYSrTEYHOXHd0nwFeUXAe2G2hRnQT+deZJJf88uS9Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= -github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c h1:GGsyl0dZ2jJgVT+VvWBf/cNijrHRhkrTjkmp5wg7li0= -github.com/whyrusleeping/tar-utils v0.0.0-20180509141711-8c6c8ba81d5c/go.mod h1:xxcJeBb7SIUl/Wzkz1eVKJE/CB34YNrqX2TQI6jY9zs= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zyedidia/generic v1.2.1 h1:Zv5KS/N2m0XZZiuLS82qheRG4X1o5gsWreGb0hR7XDc= github.com/zyedidia/generic v1.2.1/go.mod h1:ly2RBz4mnz1yeuVbQA/VFwGjK3mnHGRj1JuoG336Bis= go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= @@ -125,6 +87,7 @@ go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQa go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= @@ -132,38 +95,44 @@ go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/exp v0.0.0-20230519143937-03e91628a987 h1:3xJIFvzUFbu4ls0BTBYcgbCGhA63eAOEMxIHugyXJqA= golang.org/x/exp v0.0.0-20230519143937-03e91628a987/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -177,9 +146,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= -lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= diff --git a/main.go b/main.go index b27a0c6..c509ea1 100644 --- a/main.go +++ b/main.go @@ -7,7 +7,7 @@ import ( "strconv" "time" - cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" + "gitlink.org.cn/cloudream/common/sdks/storage/cdsapi" ) func main() { @@ -16,7 +16,7 @@ func main() { } func test1(url string) { - cli := cdssdk.NewClient(&cdssdk.Config{ + cli := cdsapi.NewClient(&cdsapi.Config{ URL: url, }) @@ -39,7 +39,7 @@ func test1(url string) { } startTime := time.Now() - obj, err := cli.Object().Download(cdssdk.ObjectDownload{ + obj, err := cli.Object().Download(cdsapi.ObjectDownload{ UserID: 1, ObjectID: 470790, Offset: 0, @@ -67,11 +67,11 @@ func test1(url string) { } func test2(url string) { - cli := cdssdk.NewClient(&cdssdk.Config{ + cli := cdsapi.NewClient(&cdsapi.Config{ URL: url, }) - obj, err := cli.Object().Download(cdssdk.ObjectDownload{ + obj, err := cli.Object().Download(cdsapi.ObjectDownload{ UserID: 1, ObjectID: 27151, Offset: 0, @@ -92,4 +92,3 @@ func test2(url string) { io.Copy(f, obj.File) } - diff --git a/pkgs/ioswitch/exec/context.go b/pkgs/ioswitch/exec/context.go new file mode 100644 index 0000000..6280049 --- /dev/null +++ b/pkgs/ioswitch/exec/context.go @@ -0,0 +1,52 @@ +package exec + +import ( + "context" + "fmt" + + "gitlink.org.cn/cloudream/common/utils/reflect2" +) + +var ErrValueNotFound = fmt.Errorf("value not found") + +type ExecContext struct { + Context context.Context + Values map[any]any +} + +func NewExecContext() *ExecContext { + return NewWithContext(context.Background()) +} + +func NewWithContext(ctx context.Context) *ExecContext { + return &ExecContext{Context: ctx, Values: make(map[any]any)} +} + +// error只会是ErrValueNotFound +func (c *ExecContext) Value(key any) (any, error) { + value, ok := c.Values[key] + if !ok { + return nil, ErrValueNotFound + } + return value, nil +} + +func (c *ExecContext) SetValue(key any, value any) { + c.Values[key] = value +} + +func ValueByType[T any](ctx *ExecContext) (T, error) { + var ret T + + value, err := ctx.Value(reflect2.TypeOf[T]()) + if err != nil { + return ret, err + } + + ret, ok := value.(T) + if !ok { + return ret, fmt.Errorf("value is %T, not %T", value, ret) + } + + return ret, nil +} diff --git a/pkgs/ioswitch/exec/driver.go b/pkgs/ioswitch/exec/driver.go index 927b2f2..088334e 100644 --- a/pkgs/ioswitch/exec/driver.go +++ b/pkgs/ioswitch/exec/driver.go @@ -14,7 +14,7 @@ type Driver struct { planID PlanID planBlder *PlanBuilder callback *future.SetValueFuture[map[string]any] - ctx context.Context + ctx *ExecContext cancel context.CancelFunc driverExec *Executor } @@ -32,7 +32,7 @@ func (e *Driver) BeginWriteRanged(str io.ReadCloser, handle *DriverWriteStream) } func (e *Driver) BeginRead(handle *DriverReadStream) (io.ReadCloser, error) { - err := e.driverExec.BindVars(e.ctx, handle.Var) + err := e.driverExec.BindVars(e.ctx.Context, handle.Var) if err != nil { return nil, fmt.Errorf("bind vars: %w", err) } @@ -74,7 +74,7 @@ func (e *Driver) execute() { } defer cli.Close() - err = cli.ExecutePlan(e.ctx, plan) + err = cli.ExecutePlan(e.ctx.Context, plan) if err != nil { e.stopWith(fmt.Errorf("execute plan at worker %v: %w", p.Worker, err)) return diff --git a/pkgs/ioswitch/exec/exec.go b/pkgs/ioswitch/exec/exec.go index 873ad59..51de4ea 100644 --- a/pkgs/ioswitch/exec/exec.go +++ b/pkgs/ioswitch/exec/exec.go @@ -1,8 +1,6 @@ package exec import ( - "context" - "gitlink.org.cn/cloudream/common/pkgs/types" "gitlink.org.cn/cloudream/common/utils/reflect2" "gitlink.org.cn/cloudream/common/utils/serder" @@ -18,7 +16,7 @@ type Plan struct { var opUnion = serder.UseTypeUnionExternallyTagged(types.Ref(types.NewTypeUnion[Op]())) type Op interface { - Execute(ctx context.Context, e *Executor) error + Execute(ctx *ExecContext, e *Executor) error String() string } diff --git a/pkgs/ioswitch/exec/executor.go b/pkgs/ioswitch/exec/executor.go index dcd087e..c4c36aa 100644 --- a/pkgs/ioswitch/exec/executor.go +++ b/pkgs/ioswitch/exec/executor.go @@ -38,12 +38,14 @@ func (s *Executor) Plan() *Plan { return &s.plan } -func (s *Executor) Run(ctx context.Context) (map[string]any, error) { - ctx2, cancel := context.WithCancel(ctx) +func (s *Executor) Run(ctx *ExecContext) (map[string]any, error) { + c, cancel := context.WithCancel(ctx.Context) + ctx.Context = c + defer cancel() err := sync2.ParallelDo(s.plan.Ops, func(o Op, idx int) error { - err := o.Execute(ctx2, s) + err := o.Execute(ctx, s) s.lock.Lock() defer s.lock.Unlock() diff --git a/pkgs/ioswitch/exec/plan_builder.go b/pkgs/ioswitch/exec/plan_builder.go index 0e1e44a..6a7202d 100644 --- a/pkgs/ioswitch/exec/plan_builder.go +++ b/pkgs/ioswitch/exec/plan_builder.go @@ -76,8 +76,10 @@ func (b *PlanBuilder) NewSignalVar() *SignalVar { return v } -func (b *PlanBuilder) Execute() *Driver { - ctx, cancel := context.WithCancel(context.Background()) +func (b *PlanBuilder) Execute(ctx *ExecContext) *Driver { + c, cancel := context.WithCancel(ctx.Context) + ctx.Context = c + planID := genRandomPlanID() execPlan := Plan{ diff --git a/pkgs/ioswitch/plan/ops/drop.go b/pkgs/ioswitch/plan/ops/drop.go index 384ceea..b303f0b 100644 --- a/pkgs/ioswitch/plan/ops/drop.go +++ b/pkgs/ioswitch/plan/ops/drop.go @@ -1,7 +1,6 @@ package ops import ( - "context" "fmt" "io" @@ -17,8 +16,8 @@ type DropStream struct { Input *exec.StreamVar `json:"input"` } -func (o *DropStream) Execute(ctx context.Context, e *exec.Executor) error { - err := e.BindVars(ctx, o.Input) +func (o *DropStream) Execute(ctx *exec.ExecContext, e *exec.Executor) error { + err := e.BindVars(ctx.Context, o.Input) if err != nil { return err } diff --git a/pkgs/ioswitch/plan/ops/send.go b/pkgs/ioswitch/plan/ops/send.go index 5297488..be60082 100644 --- a/pkgs/ioswitch/plan/ops/send.go +++ b/pkgs/ioswitch/plan/ops/send.go @@ -1,7 +1,6 @@ package ops import ( - "context" "fmt" "io" @@ -24,8 +23,8 @@ type SendStream struct { Worker exec.WorkerInfo `json:"worker"` } -func (o *SendStream) Execute(ctx context.Context, e *exec.Executor) error { - err := e.BindVars(ctx, o.Input) +func (o *SendStream) Execute(ctx *exec.ExecContext, e *exec.Executor) error { + err := e.BindVars(ctx.Context, o.Input) if err != nil { return err } @@ -38,7 +37,7 @@ func (o *SendStream) Execute(ctx context.Context, e *exec.Executor) error { defer cli.Close() // 发送后流的ID不同 - err = cli.SendStream(ctx, e.Plan().ID, o.Send, o.Input.Stream) + err = cli.SendStream(ctx.Context, e.Plan().ID, o.Send, o.Input.Stream) if err != nil { return fmt.Errorf("sending stream: %w", err) } @@ -57,14 +56,14 @@ type GetStream struct { Worker exec.WorkerInfo `json:"worker"` } -func (o *GetStream) Execute(ctx context.Context, e *exec.Executor) error { +func (o *GetStream) Execute(ctx *exec.ExecContext, e *exec.Executor) error { cli, err := o.Worker.NewClient() if err != nil { return fmt.Errorf("new worker %v client: %w", o.Worker, err) } defer cli.Close() - str, err := cli.GetStream(ctx, e.Plan().ID, o.Target, o.Signal) + str, err := cli.GetStream(ctx.Context, e.Plan().ID, o.Target, o.Signal) if err != nil { return fmt.Errorf("getting stream: %w", err) } @@ -76,7 +75,7 @@ func (o *GetStream) Execute(ctx context.Context, e *exec.Executor) error { }) e.PutVars(o.Output) - return fut.Wait(ctx) + return fut.Wait(ctx.Context) } func (o *GetStream) String() string { @@ -89,8 +88,8 @@ type SendVar struct { Worker exec.WorkerInfo `json:"worker"` } -func (o *SendVar) Execute(ctx context.Context, e *exec.Executor) error { - err := e.BindVars(ctx, o.Input) +func (o *SendVar) Execute(ctx *exec.ExecContext, e *exec.Executor) error { + err := e.BindVars(ctx.Context, o.Input) if err != nil { return err } @@ -102,7 +101,7 @@ func (o *SendVar) Execute(ctx context.Context, e *exec.Executor) error { defer cli.Close() exec.AssignVar(o.Input, o.Send) - err = cli.SendVar(ctx, e.Plan().ID, o.Send) + err = cli.SendVar(ctx.Context, e.Plan().ID, o.Send) if err != nil { return fmt.Errorf("sending var: %w", err) } @@ -121,14 +120,14 @@ type GetVar struct { Worker exec.WorkerInfo `json:"worker"` } -func (o *GetVar) Execute(ctx context.Context, e *exec.Executor) error { +func (o *GetVar) Execute(ctx *exec.ExecContext, e *exec.Executor) error { cli, err := o.Worker.NewClient() if err != nil { return fmt.Errorf("new worker %v client: %w", o.Worker, err) } defer cli.Close() - err = cli.GetVar(ctx, e.Plan().ID, o.Target, o.Signal) + err = cli.GetVar(ctx.Context, e.Plan().ID, o.Target, o.Signal) if err != nil { return fmt.Errorf("getting var: %w", err) } diff --git a/pkgs/ioswitch/plan/ops/store.go b/pkgs/ioswitch/plan/ops/store.go index c04dfdf..0b175f5 100644 --- a/pkgs/ioswitch/plan/ops/store.go +++ b/pkgs/ioswitch/plan/ops/store.go @@ -1,7 +1,6 @@ package ops import ( - "context" "fmt" "gitlink.org.cn/cloudream/common/pkgs/ioswitch/dag" @@ -13,8 +12,8 @@ type Store struct { Key string } -func (o *Store) Execute(ctx context.Context, e *exec.Executor) error { - err := e.BindVars(ctx, o.Var) +func (o *Store) Execute(ctx *exec.ExecContext, e *exec.Executor) error { + err := e.BindVars(ctx.Context, o.Var) if err != nil { return err } diff --git a/pkgs/ioswitch/plan/ops/sync.go b/pkgs/ioswitch/plan/ops/sync.go index 746c8e4..07149ce 100644 --- a/pkgs/ioswitch/plan/ops/sync.go +++ b/pkgs/ioswitch/plan/ops/sync.go @@ -1,7 +1,6 @@ package ops import ( - "context" "fmt" "io" @@ -25,8 +24,8 @@ type OnStreamBegin struct { Signal *exec.SignalVar `json:"signal"` } -func (o *OnStreamBegin) Execute(ctx context.Context, e *exec.Executor) error { - err := e.BindVars(ctx, o.Raw) +func (o *OnStreamBegin) Execute(ctx *exec.ExecContext, e *exec.Executor) error { + err := e.BindVars(ctx.Context, o.Raw) if err != nil { return err } @@ -67,8 +66,8 @@ func (o *onStreamEnd) Close() error { return o.inner.Close() } -func (o *OnStreamEnd) Execute(ctx context.Context, e *exec.Executor) error { - err := e.BindVars(ctx, o.Raw) +func (o *OnStreamEnd) Execute(ctx *exec.ExecContext, e *exec.Executor) error { + err := e.BindVars(ctx.Context, o.Raw) if err != nil { return err } @@ -81,7 +80,7 @@ func (o *OnStreamEnd) Execute(ctx context.Context, e *exec.Executor) error { } e.PutVars(o.New) - err = cb.Wait(ctx) + err = cb.Wait(ctx.Context) if err != nil { return err } @@ -100,13 +99,13 @@ type HoldUntil struct { Emits []exec.Var `json:"emits"` } -func (w *HoldUntil) Execute(ctx context.Context, e *exec.Executor) error { - err := e.BindVars(ctx, w.Holds...) +func (w *HoldUntil) Execute(ctx *exec.ExecContext, e *exec.Executor) error { + err := e.BindVars(ctx.Context, w.Holds...) if err != nil { return err } - err = exec.BindArrayVars(e, ctx, w.Waits) + err = exec.BindArrayVars(e, ctx.Context, w.Waits) if err != nil { return err } @@ -131,8 +130,8 @@ type HangUntil struct { Op exec.Op `json:"op"` } -func (h *HangUntil) Execute(ctx context.Context, e *exec.Executor) error { - err := exec.BindArrayVars(e, ctx, h.Waits) +func (h *HangUntil) Execute(ctx *exec.ExecContext, e *exec.Executor) error { + err := exec.BindArrayVars(e, ctx.Context, h.Waits) if err != nil { return err } @@ -149,8 +148,8 @@ type Broadcast struct { Targets []*exec.SignalVar `json:"targets"` } -func (b *Broadcast) Execute(ctx context.Context, e *exec.Executor) error { - err := e.BindVars(ctx, b.Source) +func (b *Broadcast) Execute(ctx *exec.ExecContext, e *exec.Executor) error { + err := e.BindVars(ctx.Context, b.Source) if err != nil { return err } diff --git a/pkgs/ioswitch/plan/ops/var.go b/pkgs/ioswitch/plan/ops/var.go index cb6aec0..86c8b79 100644 --- a/pkgs/ioswitch/plan/ops/var.go +++ b/pkgs/ioswitch/plan/ops/var.go @@ -1,8 +1,6 @@ package ops import ( - "context" - "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec" ) @@ -14,7 +12,7 @@ type ConstVar struct { Var *exec.StringVar `json:"var"` } -func (o *ConstVar) Execute(ctx context.Context, e *exec.Executor) error { +func (o *ConstVar) Execute(ctx *exec.ExecContext, e *exec.Executor) error { e.PutVars(o.Var) return nil } diff --git a/pkgs/ipfs/config.go b/pkgs/ipfs/config.go deleted file mode 100644 index 8a61bd9..0000000 --- a/pkgs/ipfs/config.go +++ /dev/null @@ -1,5 +0,0 @@ -package ipfs - -type Config struct { - Address string `json:"address"` -} diff --git a/pkgs/ipfs/ipfs.go b/pkgs/ipfs/ipfs.go deleted file mode 100644 index 3f4e09e..0000000 --- a/pkgs/ipfs/ipfs.go +++ /dev/null @@ -1,129 +0,0 @@ -package ipfs - -import ( - "context" - "fmt" - "io" - - shell "github.com/ipfs/go-ipfs-api" - "gitlink.org.cn/cloudream/common/utils/io2" -) - -type ReadOption struct { - Offset int64 `json:"offset,string"` // 从指定位置开始读取,为-1时代表不设置,从头开始读 - Length int64 `json:"length,string"` // 读取长度,为-1时代表不设置,读取Offset之后的所有内容 -} - -type Client struct { - shell *shell.Shell -} - -func NewClient(cfg *Config) (*Client, error) { - sh := shell.NewShell(cfg.Address) - - // 检测连通性 - if !sh.IsUp() { - return nil, fmt.Errorf("cannot connect to %s", cfg.Address) - } - - return &Client{ - shell: sh, - }, nil -} - -func (fs *Client) IsUp() bool { - return fs.shell.IsUp() -} - -func (fs *Client) CreateFileStream() (io2.PromiseWriteCloser[string], error) { - pr, pw := io.Pipe() - - ipfsWriter := ipfsWriter{ - writer: pw, - finished: make(chan any, 1), - } - - go func() { - hash, err := fs.shell.Add(pr) - ipfsWriter.finishErr = err - ipfsWriter.fileHash = hash - close(ipfsWriter.finished) - pr.CloseWithError(err) - }() - - return &ipfsWriter, nil -} - -func (fs *Client) CreateFile(file io.Reader) (string, error) { - return fs.shell.Add(file) -} - -func (fs *Client) OpenRead(hash string, opts ...ReadOption) (io.ReadCloser, error) { - opt := ReadOption{ - Offset: 0, - Length: -1, - } - if len(opts) > 0 { - opt = opts[0] - } - - req := fs.shell.Request("cat", hash) - if opt.Offset >= 0 { - req.Option("offset", opt.Offset) - } - - if opt.Length >= 0 { - req.Option("length", opt.Length) - } - - resp, err := req.Send(context.Background()) - if err != nil { - return nil, err - } - if resp.Error != nil { - return nil, resp.Error - } - - return resp.Output, nil -} - -func (fs *Client) Pin(hash string) error { - return fs.shell.Pin(hash) -} - -func (fs *Client) Unpin(hash string) error { - return fs.shell.Unpin(hash) -} - -func (fs *Client) GetPinnedFiles() (map[string]shell.PinInfo, error) { - return fs.shell.PinsOfType(context.Background(), shell.RecursivePin) -} - -func (fs *Client) List(hash string) ([]*shell.LsLink, error) { - return fs.shell.List(hash) -} - -type ipfsWriter struct { - writer *io.PipeWriter - finished chan any - finishErr error - fileHash string -} - -func (p *ipfsWriter) Write(data []byte) (n int, err error) { - return p.writer.Write(data) -} - -// 设置一个error中断写入 -func (w *ipfsWriter) Abort(err error) { - w.writer.CloseWithError(err) -} - -// Finish 结束写入,并获得返回值(文件哈希值) -func (w *ipfsWriter) Finish() (string, error) { - w.writer.CloseWithError(io.EOF) - - <-w.finished - - return w.fileHash, w.finishErr -} diff --git a/pkgs/ipfs/pool.go b/pkgs/ipfs/pool.go deleted file mode 100644 index 7c9f4e5..0000000 --- a/pkgs/ipfs/pool.go +++ /dev/null @@ -1,34 +0,0 @@ -package ipfs - -type PoolClient struct { - *Client - owner *Pool -} - -func (c *PoolClient) Close() { - c.owner.Release(c) -} - -type Pool struct { - cfg *Config -} - -func NewPool(cfg *Config) *Pool { - return &Pool{ - cfg: cfg, - } -} -func (p *Pool) Acquire() (*PoolClient, error) { - cli, err := NewClient(p.cfg) - if err != nil { - return nil, err - } - - return &PoolClient{ - Client: cli, - owner: p, - }, nil -} - -func (p *Pool) Release(cli *PoolClient) { -} diff --git a/sdks/storage/bucket.go b/sdks/storage/cdsapi/bucket.go similarity index 80% rename from sdks/storage/bucket.go rename to sdks/storage/cdsapi/bucket.go index b95dbd8..2cb2e9c 100644 --- a/sdks/storage/bucket.go +++ b/sdks/storage/cdsapi/bucket.go @@ -1,9 +1,10 @@ -package cdssdk +package cdsapi import ( "net/url" "gitlink.org.cn/cloudream/common/consts/errorcode" + cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" "gitlink.org.cn/cloudream/common/utils/http2" ) @@ -18,11 +19,11 @@ func (c *Client) Bucket() *BucketService { const BucketGetByNamePath = "/bucket/getByName" type BucketGetByName struct { - UserID UserID `json:"userID" form:"userID" binding:"required"` - Name string `json:"name" form:"name" binding:"required"` + UserID cdssdk.UserID `json:"userID" form:"userID" binding:"required"` + Name string `json:"name" form:"name" binding:"required"` } type BucketGetByNameResp struct { - Bucket Bucket `json:"bucket"` + Bucket cdssdk.Bucket `json:"bucket"` } func (c *BucketService) GetByName(req BucketGetByName) (*BucketGetByNameResp, error) { @@ -53,12 +54,12 @@ func (c *BucketService) GetByName(req BucketGetByName) (*BucketGetByNameResp, er const BucketCreatePath = "/bucket/create" type BucketCreate struct { - UserID UserID `json:"userID" binding:"required"` - Name string `json:"name" binding:"required"` + UserID cdssdk.UserID `json:"userID" binding:"required"` + Name string `json:"name" binding:"required"` } type BucketCreateResp struct { - Bucket Bucket `json:"bucket"` + Bucket cdssdk.Bucket `json:"bucket"` } func (c *BucketService) Create(req BucketCreate) (*BucketCreateResp, error) { @@ -89,8 +90,8 @@ func (c *BucketService) Create(req BucketCreate) (*BucketCreateResp, error) { const BucketDeletePath = "/bucket/delete" type BucketDelete struct { - UserID UserID `json:"userID" binding:"required"` - BucketID BucketID `json:"bucketID" binding:"required"` + UserID cdssdk.UserID `json:"userID" binding:"required"` + BucketID cdssdk.BucketID `json:"bucketID" binding:"required"` } type BucketDeleteResp struct{} @@ -123,11 +124,11 @@ func (c *BucketService) Delete(req BucketDelete) error { const BucketListUserBucketsPath = "/bucket/listUserBuckets" type BucketListUserBucketsReq struct { - UserID UserID `form:"userID" json:"userID" binding:"required"` + UserID cdssdk.UserID `form:"userID" json:"userID" binding:"required"` } type BucketListUserBucketsResp struct { - Buckets []Bucket `json:"buckets"` + Buckets []cdssdk.Bucket `json:"buckets"` } func (c *BucketService) ListUserBuckets(req BucketListUserBucketsReq) (*BucketListUserBucketsResp, error) { diff --git a/sdks/storage/cache.go b/sdks/storage/cdsapi/cache.go similarity index 78% rename from sdks/storage/cache.go rename to sdks/storage/cdsapi/cache.go index f78eb70..028f066 100644 --- a/sdks/storage/cache.go +++ b/sdks/storage/cdsapi/cache.go @@ -1,18 +1,19 @@ -package cdssdk +package cdsapi import ( "net/url" "gitlink.org.cn/cloudream/common/consts/errorcode" + cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" "gitlink.org.cn/cloudream/common/utils/http2" ) const CacheMovePackagePath = "/cache/movePackage" type CacheMovePackageReq struct { - UserID UserID `json:"userID"` - PackageID PackageID `json:"packageID"` - NodeID NodeID `json:"nodeID"` + UserID cdssdk.UserID `json:"userID"` + PackageID cdssdk.PackageID `json:"packageID"` + NodeID cdssdk.NodeID `json:"nodeID"` } type CacheMovePackageResp struct{} diff --git a/sdks/storage/client.go b/sdks/storage/cdsapi/client.go similarity index 98% rename from sdks/storage/client.go rename to sdks/storage/cdsapi/client.go index 96c96b7..40af4dd 100644 --- a/sdks/storage/client.go +++ b/sdks/storage/cdsapi/client.go @@ -1,4 +1,4 @@ -package cdssdk +package cdsapi import ( "gitlink.org.cn/cloudream/common/sdks" diff --git a/sdks/storage/config.go b/sdks/storage/cdsapi/config.go similarity index 76% rename from sdks/storage/config.go rename to sdks/storage/cdsapi/config.go index 9900c08..484808c 100644 --- a/sdks/storage/config.go +++ b/sdks/storage/cdsapi/config.go @@ -1,4 +1,4 @@ -package cdssdk +package cdsapi type Config struct { URL string `json:"url"` diff --git a/sdks/storage/hub_io.go b/sdks/storage/cdsapi/hub_io.go similarity index 99% rename from sdks/storage/hub_io.go rename to sdks/storage/cdsapi/hub_io.go index fca355f..7711db7 100644 --- a/sdks/storage/hub_io.go +++ b/sdks/storage/cdsapi/hub_io.go @@ -1,17 +1,18 @@ -package cdssdk +package cdsapi import ( "bytes" "fmt" - "gitlink.org.cn/cloudream/common/consts/errorcode" - "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec" - "gitlink.org.cn/cloudream/common/utils/http2" - "gitlink.org.cn/cloudream/common/utils/serder" "io" "mime/multipart" "net/http" "net/url" "strings" + + "gitlink.org.cn/cloudream/common/consts/errorcode" + "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec" + "gitlink.org.cn/cloudream/common/utils/http2" + "gitlink.org.cn/cloudream/common/utils/serder" ) const GetStreamPath = "/hubIO/getStream" diff --git a/sdks/storage/node.go b/sdks/storage/cdsapi/node.go similarity index 83% rename from sdks/storage/node.go rename to sdks/storage/cdsapi/node.go index 148b7b1..d32c262 100644 --- a/sdks/storage/node.go +++ b/sdks/storage/cdsapi/node.go @@ -1,20 +1,21 @@ -package cdssdk +package cdsapi import ( "net/url" "gitlink.org.cn/cloudream/common/consts/errorcode" + cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" "gitlink.org.cn/cloudream/common/utils/http2" ) var NodeGetNodesPath = "/node/getNodes" type NodeGetNodesReq struct { - NodeIDs []NodeID `json:"nodeIDs"` + NodeIDs []cdssdk.NodeID `json:"nodeIDs"` } type NodeGetNodesResp struct { - Nodes []Node `json:"nodes"` + Nodes []cdssdk.Node `json:"nodes"` } func (c *Client) NodeGetNodes(req NodeGetNodesReq) (*NodeGetNodesResp, error) { diff --git a/sdks/storage/object.go b/sdks/storage/cdsapi/object.go similarity index 77% rename from sdks/storage/object.go rename to sdks/storage/cdsapi/object.go index 2940829..0ea01ac 100644 --- a/sdks/storage/object.go +++ b/sdks/storage/cdsapi/object.go @@ -1,4 +1,4 @@ -package cdssdk +package cdsapi import ( "fmt" @@ -10,6 +10,7 @@ import ( "gitlink.org.cn/cloudream/common/consts/errorcode" "gitlink.org.cn/cloudream/common/pkgs/iterator" + cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" "gitlink.org.cn/cloudream/common/utils/http2" "gitlink.org.cn/cloudream/common/utils/serder" ) @@ -32,9 +33,9 @@ type ObjectUpload struct { } type ObjectUploadInfo struct { - UserID UserID `json:"userID" binding:"required"` - PackageID PackageID `json:"packageID" binding:"required"` - NodeAffinity *NodeID `json:"nodeAffinity"` + UserID cdssdk.UserID `json:"userID" binding:"required"` + PackageID cdssdk.PackageID `json:"packageID" binding:"required"` + NodeAffinity *cdssdk.NodeID `json:"nodeAffinity"` } type UploadingObject struct { @@ -48,8 +49,8 @@ type ObjectUploadResp struct { Uploadeds []UploadedObject `json:"uploadeds"` } type UploadedObject struct { - Object *Object `json:"object"` - Error string `json:"error"` + Object *cdssdk.Object `json:"object"` + Error string `json:"error"` } func (c *ObjectService) Upload(req ObjectUpload) (*ObjectUploadResp, error) { @@ -99,11 +100,11 @@ func (c *ObjectService) Upload(req ObjectUpload) (*ObjectUploadResp, error) { const ObjectDownloadPath = "/object/download" type ObjectDownload struct { - UserID UserID `form:"userID" json:"userID" binding:"required"` - ObjectID ObjectID `form:"objectID" json:"objectID" binding:"required"` - Offset int64 `form:"offset" json:"offset,omitempty"` - Length *int64 `form:"length" json:"length,omitempty"` - PartSize int64 `form:"partSize" json:"partSize,omitempty"` + UserID cdssdk.UserID `form:"userID" json:"userID" binding:"required"` + ObjectID cdssdk.ObjectID `form:"objectID" json:"objectID" binding:"required"` + Offset int64 `form:"offset" json:"offset,omitempty"` + Length *int64 `form:"length" json:"length,omitempty"` + PartSize int64 `form:"partSize" json:"partSize,omitempty"` } type DownloadingObject struct { Path string @@ -148,21 +149,21 @@ func (c *ObjectService) Download(req ObjectDownload) (*DownloadingObject, error) const ObjectUpdateInfoPath = "/object/updateInfo" type UpdatingObject struct { - ObjectID ObjectID `json:"objectID" binding:"required"` - UpdateTime time.Time `json:"updateTime" binding:"required"` + ObjectID cdssdk.ObjectID `json:"objectID" binding:"required"` + UpdateTime time.Time `json:"updateTime" binding:"required"` } -func (u *UpdatingObject) ApplyTo(obj *Object) { +func (u *UpdatingObject) ApplyTo(obj *cdssdk.Object) { obj.UpdateTime = u.UpdateTime } type ObjectUpdateInfo struct { - UserID UserID `json:"userID" binding:"required"` + UserID cdssdk.UserID `json:"userID" binding:"required"` Updatings []UpdatingObject `json:"updatings" binding:"required"` } type ObjectUpdateInfoResp struct { - Successes []ObjectID `json:"successes"` + Successes []cdssdk.ObjectID `json:"successes"` } func (c *ObjectService) UpdateInfo(req ObjectUpdateInfo) (*ObjectUpdateInfoResp, error) { @@ -193,23 +194,23 @@ func (c *ObjectService) UpdateInfo(req ObjectUpdateInfo) (*ObjectUpdateInfoResp, const ObjectMovePath = "/object/move" type MovingObject struct { - ObjectID ObjectID `json:"objectID" binding:"required"` - PackageID PackageID `json:"packageID" binding:"required"` - Path string `json:"path" binding:"required"` + ObjectID cdssdk.ObjectID `json:"objectID" binding:"required"` + PackageID cdssdk.PackageID `json:"packageID" binding:"required"` + Path string `json:"path" binding:"required"` } -func (m *MovingObject) ApplyTo(obj *Object) { +func (m *MovingObject) ApplyTo(obj *cdssdk.Object) { obj.PackageID = m.PackageID obj.Path = m.Path } type ObjectMove struct { - UserID UserID `json:"userID" binding:"required"` + UserID cdssdk.UserID `json:"userID" binding:"required"` Movings []MovingObject `json:"movings" binding:"required"` } type ObjectMoveResp struct { - Successes []ObjectID `json:"successes"` + Successes []cdssdk.ObjectID `json:"successes"` } func (c *ObjectService) Move(req ObjectMove) (*ObjectMoveResp, error) { @@ -240,8 +241,8 @@ func (c *ObjectService) Move(req ObjectMove) (*ObjectMoveResp, error) { const ObjectDeletePath = "/object/delete" type ObjectDelete struct { - UserID UserID `json:"userID" binding:"required"` - ObjectIDs []ObjectID `json:"objectIDs" binding:"required"` + UserID cdssdk.UserID `json:"userID" binding:"required"` + ObjectIDs []cdssdk.ObjectID `json:"objectIDs" binding:"required"` } type ObjectDeleteResp struct{} @@ -274,11 +275,11 @@ func (c *ObjectService) Delete(req ObjectDelete) error { const ObjectGetPackageObjectsPath = "/object/getPackageObjects" type ObjectGetPackageObjects struct { - UserID UserID `form:"userID" json:"userID" binding:"required"` - PackageID PackageID `form:"packageID" json:"packageID" binding:"required"` + UserID cdssdk.UserID `form:"userID" json:"userID" binding:"required"` + PackageID cdssdk.PackageID `form:"packageID" json:"packageID" binding:"required"` } type ObjectGetPackageObjectsResp struct { - Objects []Object `json:"objects"` + Objects []cdssdk.Object `json:"objects"` } func (c *ObjectService) GetPackageObjects(req ObjectGetPackageObjects) (*ObjectGetPackageObjectsResp, error) { diff --git a/sdks/storage/package.go b/sdks/storage/cdsapi/package.go similarity index 78% rename from sdks/storage/package.go rename to sdks/storage/cdsapi/package.go index 19bb5f2..1b619de 100644 --- a/sdks/storage/package.go +++ b/sdks/storage/cdsapi/package.go @@ -1,4 +1,4 @@ -package cdssdk +package cdsapi import ( "fmt" @@ -6,6 +6,7 @@ import ( "strings" "gitlink.org.cn/cloudream/common/consts/errorcode" + cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" "gitlink.org.cn/cloudream/common/utils/http2" "gitlink.org.cn/cloudream/common/utils/serder" ) @@ -21,11 +22,11 @@ func (c *Client) Package() *PackageService { const PackageGetPath = "/package/get" type PackageGetReq struct { - UserID UserID `form:"userID" json:"userID" binding:"required"` - PackageID PackageID `form:"packageID" json:"packageID" binding:"required"` + UserID cdssdk.UserID `form:"userID" json:"userID" binding:"required"` + PackageID cdssdk.PackageID `form:"packageID" json:"packageID" binding:"required"` } type PackageGetResp struct { - Package + cdssdk.Package } func (c *PackageService) Get(req PackageGetReq) (*PackageGetResp, error) { @@ -56,12 +57,12 @@ func (c *PackageService) Get(req PackageGetReq) (*PackageGetResp, error) { const PackageGetByNamePath = "/package/getByName" type PackageGetByName struct { - UserID UserID `form:"userID" json:"userID" binding:"required"` - BucketName string `form:"bucketName" json:"bucketName" binding:"required"` - PackageName string `form:"packageName" json:"packageName" binding:"required"` + UserID cdssdk.UserID `form:"userID" json:"userID" binding:"required"` + BucketName string `form:"bucketName" json:"bucketName" binding:"required"` + PackageName string `form:"packageName" json:"packageName" binding:"required"` } type PackageGetByNameResp struct { - Package Package `json:"package"` + Package cdssdk.Package `json:"package"` } func (c *PackageService) GetByName(req PackageGetByName) (*PackageGetByNameResp, error) { @@ -92,13 +93,13 @@ func (c *PackageService) GetByName(req PackageGetByName) (*PackageGetByNameResp, const PackageCreatePath = "/package/create" type PackageCreate struct { - UserID UserID `json:"userID"` - BucketID BucketID `json:"bucketID"` - Name string `json:"name"` + UserID cdssdk.UserID `json:"userID"` + BucketID cdssdk.BucketID `json:"bucketID"` + Name string `json:"name"` } type PackageCreateResp struct { - Package Package `json:"package"` + Package cdssdk.Package `json:"package"` } func (s *PackageService) Create(req PackageCreate) (*PackageCreateResp, error) { @@ -129,8 +130,8 @@ func (s *PackageService) Create(req PackageCreate) (*PackageCreateResp, error) { const PackageDeletePath = "/package/delete" type PackageDelete struct { - UserID UserID `json:"userID" binding:"required"` - PackageID PackageID `json:"packageID" binding:"required"` + UserID cdssdk.UserID `json:"userID" binding:"required"` + PackageID cdssdk.PackageID `json:"packageID" binding:"required"` } func (c *PackageService) Delete(req PackageDelete) error { @@ -167,12 +168,12 @@ func (c *PackageService) Delete(req PackageDelete) error { const PackageListBucketPackagesPath = "/package/listBucketPackages" type PackageListBucketPackages struct { - UserID UserID `form:"userID" json:"userID" binding:"required"` - BucketID BucketID `form:"bucketID" json:"bucketID" binding:"required"` + UserID cdssdk.UserID `form:"userID" json:"userID" binding:"required"` + BucketID cdssdk.BucketID `form:"bucketID" json:"bucketID" binding:"required"` } type PackageListBucketPackagesResp struct { - Packages []Package `json:"packages"` + Packages []cdssdk.Package `json:"packages"` } func (c *PackageService) ListBucketPackages(req PackageListBucketPackages) (*PackageListBucketPackagesResp, error) { @@ -203,12 +204,12 @@ func (c *PackageService) ListBucketPackages(req PackageListBucketPackages) (*Pac const PackageGetCachedNodesPath = "/package/getCachedNodes" type PackageGetCachedNodesReq struct { - PackageID PackageID `form:"packageID" json:"packageID" binding:"required"` - UserID UserID `form:"userID" json:"userID" binding:"required"` + PackageID cdssdk.PackageID `form:"packageID" json:"packageID" binding:"required"` + UserID cdssdk.UserID `form:"userID" json:"userID" binding:"required"` } type PackageGetCachedNodesResp struct { - PackageCachingInfo + cdssdk.PackageCachingInfo } func (c *PackageService) GetCachedNodes(req PackageGetCachedNodesReq) (*PackageGetCachedNodesResp, error) { @@ -238,12 +239,12 @@ func (c *PackageService) GetCachedNodes(req PackageGetCachedNodesReq) (*PackageG const PackageGetLoadedNodesPath = "/package/getLoadedNodes" type PackageGetLoadedNodesReq struct { - PackageID PackageID `form:"packageID" json:"packageID" binding:"required"` - UserID UserID `form:"userID" json:"userID" binding:"required"` + PackageID cdssdk.PackageID `form:"packageID" json:"packageID" binding:"required"` + UserID cdssdk.UserID `form:"userID" json:"userID" binding:"required"` } type PackageGetLoadedNodesResp struct { - NodeIDs []NodeID `json:"nodeIDs"` + NodeIDs []cdssdk.NodeID `json:"nodeIDs"` } func (c *PackageService) GetLoadedNodes(req PackageGetLoadedNodesReq) (*PackageGetLoadedNodesResp, error) { diff --git a/sdks/storage/storage.go b/sdks/storage/cdsapi/storage.go similarity index 74% rename from sdks/storage/storage.go rename to sdks/storage/cdsapi/storage.go index 7efe061..ee7ab7a 100644 --- a/sdks/storage/storage.go +++ b/sdks/storage/cdsapi/storage.go @@ -1,4 +1,4 @@ -package cdssdk +package cdsapi import ( "fmt" @@ -6,6 +6,7 @@ import ( "strings" "gitlink.org.cn/cloudream/common/consts/errorcode" + cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" "gitlink.org.cn/cloudream/common/utils/http2" "gitlink.org.cn/cloudream/common/utils/serder" ) @@ -13,9 +14,9 @@ import ( const StorageLoadPackagePath = "/storage/loadPackage" type StorageLoadPackageReq struct { - UserID UserID `json:"userID" binding:"required"` - PackageID PackageID `json:"packageID" binding:"required"` - StorageID StorageID `json:"storageID" binding:"required"` + UserID cdssdk.UserID `json:"userID" binding:"required"` + PackageID cdssdk.PackageID `json:"packageID" binding:"required"` + StorageID cdssdk.StorageID `json:"storageID" binding:"required"` } type StorageLoadPackageResp struct { FullPath string `json:"fullPath"` // TODO 临时保留给中期测试的前端使用,后续会删除 @@ -52,16 +53,16 @@ func (c *Client) StorageLoadPackage(req StorageLoadPackageReq) (*StorageLoadPack const StorageCreatePackagePath = "/storage/createPackage" type StorageCreatePackageReq struct { - UserID UserID `json:"userID" binding:"required"` - StorageID StorageID `json:"storageID" binding:"required"` - Path string `json:"path" binding:"required"` - BucketID BucketID `json:"bucketID" binding:"required"` - Name string `json:"name" binding:"required"` - NodeAffinity *NodeID `json:"nodeAffinity"` + UserID cdssdk.UserID `json:"userID" binding:"required"` + StorageID cdssdk.StorageID `json:"storageID" binding:"required"` + Path string `json:"path" binding:"required"` + BucketID cdssdk.BucketID `json:"bucketID" binding:"required"` + Name string `json:"name" binding:"required"` + NodeAffinity *cdssdk.NodeID `json:"nodeAffinity"` } type StorageCreatePackageResp struct { - PackageID PackageID `json:"packageID"` + PackageID cdssdk.PackageID `json:"packageID"` } func (c *Client) StorageCreatePackage(req StorageCreatePackageReq) (*StorageCreatePackageResp, error) { @@ -97,11 +98,11 @@ func (c *Client) StorageCreatePackage(req StorageCreatePackageReq) (*StorageCrea const StorageGetPath = "/storage/get" type StorageGet struct { - UserID UserID `form:"userID" json:"userID" binding:"required"` - StorageID StorageID `form:"storageID" json:"storageID" binding:"required"` + UserID cdssdk.UserID `form:"userID" json:"userID" binding:"required"` + StorageID cdssdk.StorageID `form:"storageID" json:"storageID" binding:"required"` } type StorageGetResp struct { - Storage + cdssdk.Storage } func (c *Client) StorageGet(req StorageGet) (*StorageGetResp, error) { diff --git a/sdks/storage/storage_test.go b/sdks/storage/cdsapi/storage_test.go similarity index 98% rename from sdks/storage/storage_test.go rename to sdks/storage/cdsapi/storage_test.go index a5a7d6c..3f4233c 100644 --- a/sdks/storage/storage_test.go +++ b/sdks/storage/cdsapi/storage_test.go @@ -1,4 +1,4 @@ -package cdssdk +package cdsapi import ( "bytes" @@ -9,6 +9,7 @@ import ( "github.com/google/uuid" . "github.com/smartystreets/goconvey/convey" "gitlink.org.cn/cloudream/common/pkgs/iterator" + cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" ) func Test_PackageGet(t *testing.T) { @@ -76,7 +77,7 @@ func Test_Object(t *testing.T) { fileData[i] = byte(i) } - nodeAff := NodeID(2) + nodeAff := cdssdk.NodeID(2) pkgName := uuid.NewString() createResp, err := cli.Package().Create(PackageCreate{ diff --git a/sdks/storage/utils.go b/sdks/storage/cdsapi/utils.go similarity index 98% rename from sdks/storage/utils.go rename to sdks/storage/cdsapi/utils.go index d169e78..2ef1bc8 100644 --- a/sdks/storage/utils.go +++ b/sdks/storage/cdsapi/utils.go @@ -1,4 +1,4 @@ -package cdssdk +package cdsapi import ( "fmt" diff --git a/sdks/storage/models.go b/sdks/storage/models.go index 758c08c..3090d9f 100644 --- a/sdks/storage/models.go +++ b/sdks/storage/models.go @@ -245,15 +245,6 @@ type NodeConnectivity struct { TestTime time.Time `db:"TestTime" json:"testTime"` } -type Storage struct { - StorageID StorageID `db:"StorageID" json:"storageID"` - Name string `db:"Name" json:"name"` - NodeID NodeID `db:"NodeID" json:"nodeID"` - LocalBase string `db:"LocalBase" json:"localBase"` // 存储服务挂载在代理节点的目录 - RemoteBase string `db:"RemoteBase" json:"remoteBase"` // 挂载在本地的目录对应存储服务的哪个路径 - State string `db:"State" json:"state"` -} - type NodePackageCachingInfo struct { NodeID NodeID `json:"nodeID"` FileSize int64 `json:"fileSize"` @@ -280,3 +271,44 @@ type CodeError struct { func (e *CodeError) Error() string { return fmt.Sprintf("code: %s, message: %s", e.Code, e.Message) } + +type StorageAddress interface { + GetType() string + // 输出调试用的字符串,不要包含敏感信息 + String() string +} + +type Feature interface { + GetType() string +} + +type Storage struct { + StorageID StorageID `json:"storageID" gorm:"column:StorageID; primaryKey; autoIncrement;"` + Name string `json:"name" gorm:"column:Name; not null"` + // 存储服务的地址,包含鉴权所需数据 + Address StorageAddress `json:"address" gorm:"column:Address; type:json; not null; serializer:union"` + // 存储服务拥有的特别功能 + Features []Feature `json:"features" gorm:"column:Features; type:json; serializer:union"` +} + +type ShardStoreConfig interface { + GetType() string +} + +type ShardStorage struct { + StorageID StorageID `json:"storageID" gorm:"column:StorageID; primaryKey"` + // 完全管理此存储服务的Hub的ID + MasterHub NodeID `json:"masterHub" gorm:"column:MasterHub; not null"` + // Shard存储空间在存储服务的目录 + Root string `json:"root" gorm:"column:Root; not null"` + // ShardStore配置数据 + Config ShardStoreConfig `json:"config" gorm:"column:Config; type:json; not null; serializer:union"` +} + +type SharedStorage struct { + StorageID StorageID `json:"storageID" gorm:"column:StorageID; primaryKey"` + // 调度文件时保存文件的根路径 + LoadBase string `json:"loadBase" gorm:"column:LoadBase; not null"` + // 回源数据时数据存放位置的根路径 + DataReturnBase string `json:"dataReturnBase" gorm:"column:DataReturnBase; not null"` +}