Browse Source

增加storage相关model;调整cdssdk目录结构

gitlink
Sydonian 1 year ago
parent
commit
f2ab64f1ab
28 changed files with 265 additions and 400 deletions
  1. +3
    -25
      go.mod
  2. +23
    -55
      go.sum
  3. +5
    -6
      main.go
  4. +52
    -0
      pkgs/ioswitch/exec/context.go
  5. +3
    -3
      pkgs/ioswitch/exec/driver.go
  6. +1
    -3
      pkgs/ioswitch/exec/exec.go
  7. +5
    -3
      pkgs/ioswitch/exec/executor.go
  8. +4
    -2
      pkgs/ioswitch/exec/plan_builder.go
  9. +2
    -3
      pkgs/ioswitch/plan/ops/drop.go
  10. +11
    -12
      pkgs/ioswitch/plan/ops/send.go
  11. +2
    -3
      pkgs/ioswitch/plan/ops/store.go
  12. +12
    -13
      pkgs/ioswitch/plan/ops/sync.go
  13. +1
    -3
      pkgs/ioswitch/plan/ops/var.go
  14. +0
    -5
      pkgs/ipfs/config.go
  15. +0
    -129
      pkgs/ipfs/ipfs.go
  16. +0
    -34
      pkgs/ipfs/pool.go
  17. +12
    -11
      sdks/storage/cdsapi/bucket.go
  18. +5
    -4
      sdks/storage/cdsapi/cache.go
  19. +1
    -1
      sdks/storage/cdsapi/client.go
  20. +1
    -1
      sdks/storage/cdsapi/config.go
  21. +6
    -5
      sdks/storage/cdsapi/hub_io.go
  22. +4
    -3
      sdks/storage/cdsapi/node.go
  23. +28
    -27
      sdks/storage/cdsapi/object.go
  24. +24
    -23
      sdks/storage/cdsapi/package.go
  25. +15
    -14
      sdks/storage/cdsapi/storage.go
  26. +3
    -2
      sdks/storage/cdsapi/storage_test.go
  27. +1
    -1
      sdks/storage/cdsapi/utils.go
  28. +41
    -9
      sdks/storage/models.go

+ 3
- 25
go.mod View File

@@ -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
)

+ 23
- 55
go.sum View File

@@ -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=

+ 5
- 6
main.go View File

@@ -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)
}


+ 52
- 0
pkgs/ioswitch/exec/context.go View 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
}

+ 3
- 3
pkgs/ioswitch/exec/driver.go View File

@@ -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
- 3
pkgs/ioswitch/exec/exec.go View File

@@ -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
}



+ 5
- 3
pkgs/ioswitch/exec/executor.go View File

@@ -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()


+ 4
- 2
pkgs/ioswitch/exec/plan_builder.go View File

@@ -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{


+ 2
- 3
pkgs/ioswitch/plan/ops/drop.go View File

@@ -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
}


+ 11
- 12
pkgs/ioswitch/plan/ops/send.go View File

@@ -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)
}


+ 2
- 3
pkgs/ioswitch/plan/ops/store.go View File

@@ -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
}


+ 12
- 13
pkgs/ioswitch/plan/ops/sync.go View File

@@ -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
- 3
pkgs/ioswitch/plan/ops/var.go View File

@@ -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
}


+ 0
- 5
pkgs/ipfs/config.go View File

@@ -1,5 +0,0 @@
package ipfs

type Config struct {
Address string `json:"address"`
}

+ 0
- 129
pkgs/ipfs/ipfs.go View File

@@ -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
}

+ 0
- 34
pkgs/ipfs/pool.go View File

@@ -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) {
}

sdks/storage/bucket.go → sdks/storage/cdsapi/bucket.go View File

@@ -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) {

sdks/storage/cache.go → sdks/storage/cdsapi/cache.go View File

@@ -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{}


sdks/storage/client.go → sdks/storage/cdsapi/client.go View File

@@ -1,4 +1,4 @@
package cdssdk
package cdsapi

import (
"gitlink.org.cn/cloudream/common/sdks"

sdks/storage/config.go → sdks/storage/cdsapi/config.go View File

@@ -1,4 +1,4 @@
package cdssdk
package cdsapi

type Config struct {
URL string `json:"url"`

sdks/storage/hub_io.go → sdks/storage/cdsapi/hub_io.go View File

@@ -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"

sdks/storage/node.go → sdks/storage/cdsapi/node.go View File

@@ -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) {

sdks/storage/object.go → sdks/storage/cdsapi/object.go View File

@@ -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) {

sdks/storage/package.go → sdks/storage/cdsapi/package.go View File

@@ -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) {

sdks/storage/storage.go → sdks/storage/cdsapi/storage.go View File

@@ -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) {

sdks/storage/storage_test.go → sdks/storage/cdsapi/storage_test.go View File

@@ -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{

sdks/storage/utils.go → sdks/storage/cdsapi/utils.go View File

@@ -1,4 +1,4 @@
package cdssdk
package cdsapi

import (
"fmt"

+ 41
- 9
sdks/storage/models.go View File

@@ -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"`
}

Loading…
Cancel
Save