| @@ -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 | |||
| ) | |||
| @@ -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= | |||
| @@ -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) | |||
| } | |||
| @@ -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 | |||
| } | |||
| @@ -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 | |||
| @@ -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 | |||
| } | |||
| @@ -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() | |||
| @@ -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{ | |||
| @@ -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 | |||
| } | |||
| @@ -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) | |||
| } | |||
| @@ -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 | |||
| } | |||
| @@ -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 | |||
| } | |||
| @@ -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 | |||
| } | |||
| @@ -1,5 +0,0 @@ | |||
| package ipfs | |||
| type Config struct { | |||
| Address string `json:"address"` | |||
| } | |||
| @@ -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 | |||
| } | |||
| @@ -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) { | |||
| } | |||
| @@ -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) { | |||
| @@ -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{} | |||
| @@ -1,4 +1,4 @@ | |||
| package cdssdk | |||
| package cdsapi | |||
| import ( | |||
| "gitlink.org.cn/cloudream/common/sdks" | |||
| @@ -1,4 +1,4 @@ | |||
| package cdssdk | |||
| package cdsapi | |||
| type Config struct { | |||
| URL string `json:"url"` | |||
| @@ -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" | |||
| @@ -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) { | |||
| @@ -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) { | |||
| @@ -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) { | |||
| @@ -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) { | |||
| @@ -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{ | |||
| @@ -1,4 +1,4 @@ | |||
| package cdssdk | |||
| package cdsapi | |||
| import ( | |||
| "fmt" | |||
| @@ -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"` | |||
| } | |||