From 5f49101566676941a9cc1dcddf86567ef7db7f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Kripalani?= Date: Wed, 4 Aug 2021 19:19:49 +0100 Subject: [PATCH 1/5] add JSON-RPC operations and cli for dagstore. --- api/api_storage.go | 34 +++++- api/docgen/docgen.go | 12 ++- api/proxy_gen.go | 39 +++++++ build/openrpc/full.json.gz | Bin 25253 -> 25246 bytes build/openrpc/miner.json.gz | Bin 9605 -> 9922 bytes build/openrpc/worker.json.gz | Bin 2710 -> 2710 bytes cmd/lotus-miner/dagstore.go | 130 +++++++++++++++++++++++ cmd/lotus-miner/main.go | 5 +- documentation/en/api-v0-methods-miner.md | 44 ++++++++ documentation/en/cli-lotus-miner.md | 60 +++++++++++ node/impl/storminer.go | 93 +++++++++++++++- 11 files changed, 408 insertions(+), 9 deletions(-) create mode 100644 cmd/lotus-miner/dagstore.go diff --git a/api/api_storage.go b/api/api_storage.go index c39114929..3e2eac3ca 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -13,13 +13,14 @@ import ( "github.com/filecoin-project/go-address" datatransfer "github.com/filecoin-project/go-data-transfer" - "github.com/filecoin-project/go-fil-markets/piecestore" - "github.com/filecoin-project/go-fil-markets/retrievalmarket" - "github.com/filecoin-project/go-fil-markets/storagemarket" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" "github.com/filecoin-project/specs-storage/storage" + "github.com/filecoin-project/go-fil-markets/piecestore" + "github.com/filecoin-project/go-fil-markets/retrievalmarket" + "github.com/filecoin-project/go-fil-markets/storagemarket" + "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/extern/sector-storage/fsutil" "github.com/filecoin-project/lotus/extern/sector-storage/stores" @@ -166,6 +167,17 @@ type StorageMiner interface { MarketPendingDeals(ctx context.Context) (PendingDealInfo, error) //perm:write MarketPublishPendingDeals(ctx context.Context) error //perm:admin + // DagstoreListShards returns information about all shards known to the + // DAG store. Only available on nodes running the markets subsystem. + DagstoreListShards(ctx context.Context) ([]DagstoreShardInfo, error) //perm:read + + // DagstoreInitializeShard initializes an uninitialized shard by acquiring + // it and releasing it as soon as it's ready. + DagstoreInitializeShard(ctx context.Context, key string) error //perm:write + + // DagstoreGC runs garbage collection on the DAG store. + DagstoreGC(ctx context.Context) ([]DagstoreGCResult, error) //perm:admin + // RuntimeSubsystems returns the subsystems that are enabled // in this instance. RuntimeSubsystems(ctx context.Context) (MinerSubsystems, error) //perm:read @@ -336,3 +348,19 @@ type DealSchedule struct { StartEpoch abi.ChainEpoch EndEpoch abi.ChainEpoch } + +// DagstoreShardInfo is the serialized form of dagstore.DagstoreShardInfo that +// we expose through JSON-RPC to avoid clients having to depend on the +// dagstore lib. +type DagstoreShardInfo struct { + Key string + State string + Error error +} + +// DagstoreGCResult is the serialized form of dagstore.GCResult that we expose +// through JSON-RPC to avoid clients having to depend on the dagstore lib. +type DagstoreGCResult struct { + Key string + Error error +} diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index e0e07f758..41968ef4a 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -14,7 +14,6 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-multistore" - "github.com/filecoin-project/lotus/node/repo/importmgr" "github.com/google/uuid" "github.com/ipfs/go-cid" "github.com/ipfs/go-filestore" @@ -25,6 +24,8 @@ import ( pubsub "github.com/libp2p/go-libp2p-pubsub" "github.com/multiformats/go-multiaddr" + "github.com/filecoin-project/lotus/node/repo/importmgr" + datatransfer "github.com/filecoin-project/go-data-transfer" filestore2 "github.com/filecoin-project/go-fil-markets/filestore" "github.com/filecoin-project/go-fil-markets/retrievalmarket" @@ -275,6 +276,15 @@ func init() { api.SubsystemSectorStorage, api.SubsystemMarkets, }) + addExample(api.DagstoreGCResult{ + Key: "baga6ea4seaqecmtz7iak33dsfshi627abz4i4665dfuzr3qfs4bmad6dx3iigdq", + Error: nil, + }) + addExample(api.DagstoreShardInfo{ + Key: "baga6ea4seaqecmtz7iak33dsfshi627abz4i4665dfuzr3qfs4bmad6dx3iigdq", + State: "ShardStateAvailable", + Error: nil, + }) } func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) { diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 69003c3fe..416ea6a29 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -603,6 +603,12 @@ type StorageMinerStruct struct { CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"` + DagstoreGC func(p0 context.Context) ([]DagstoreGCResult, error) `perm:"admin"` + + DagstoreInitializeShard func(p0 context.Context, p1 string) error `perm:"write"` + + DagstoreListShards func(p0 context.Context) ([]DagstoreShardInfo, error) `perm:"read"` + DealsConsiderOfflineRetrievalDeals func(p0 context.Context) (bool, error) `perm:"admin"` DealsConsiderOfflineStorageDeals func(p0 context.Context) (bool, error) `perm:"admin"` @@ -3569,6 +3575,39 @@ func (s *StorageMinerStub) CreateBackup(p0 context.Context, p1 string) error { return ErrNotSupported } +func (s *StorageMinerStruct) DagstoreGC(p0 context.Context) ([]DagstoreGCResult, error) { + if s.Internal.DagstoreGC == nil { + return *new([]DagstoreGCResult), ErrNotSupported + } + return s.Internal.DagstoreGC(p0) +} + +func (s *StorageMinerStub) DagstoreGC(p0 context.Context) ([]DagstoreGCResult, error) { + return *new([]DagstoreGCResult), ErrNotSupported +} + +func (s *StorageMinerStruct) DagstoreInitializeShard(p0 context.Context, p1 string) error { + if s.Internal.DagstoreInitializeShard == nil { + return ErrNotSupported + } + return s.Internal.DagstoreInitializeShard(p0, p1) +} + +func (s *StorageMinerStub) DagstoreInitializeShard(p0 context.Context, p1 string) error { + return ErrNotSupported +} + +func (s *StorageMinerStruct) DagstoreListShards(p0 context.Context) ([]DagstoreShardInfo, error) { + if s.Internal.DagstoreListShards == nil { + return *new([]DagstoreShardInfo), ErrNotSupported + } + return s.Internal.DagstoreListShards(p0) +} + +func (s *StorageMinerStub) DagstoreListShards(p0 context.Context) ([]DagstoreShardInfo, error) { + return *new([]DagstoreShardInfo), ErrNotSupported +} + func (s *StorageMinerStruct) DealsConsiderOfflineRetrievalDeals(p0 context.Context) (bool, error) { if s.Internal.DealsConsiderOfflineRetrievalDeals == nil { return false, ErrNotSupported diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index f8b4b33f03d553c21182b352fd5ae08ffe4bdd36..3e87a8914799c528882d39fc0ed9b80210993ad9 100644 GIT binary patch delta 23016 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 VsANC>UjP6A|NqUg-n0Vj1ONoSW{m&< delta 22965 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�LmI`vquv7fMCkkZRKr~SE& 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 ASpWb4 literal 9605 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 8a39acec0e409a8e57bf321cf6587ecd3ca8073b..430601c0348dc3f1ace7b797e26db6b363b8dc5f 100644 GIT binary patch delta 2697 zcmV;43U>9D6_yo$ABzY8000000RQY=-EZSI68~2S-b+#_{?3E#iYgayAAja5km%<60)4u^!WMo4At`4eMZ4X9Xdel?ji(m&K#jR0asT@( zX2jE^KT{WMPFdrV<6Kj)0bAGsX$$JBsELP%hY`PH!+_c7K%yUh=i(8>trCH)4$+M4 zz;7X&GX*cIaS{D*A-|2J;)0BzaSOKM;s%Bm@;m7JJsHr(H|7(^fvAC7`WINp@1n9h zy?I-gM3F;(bf7Qkkl4_;Ag+6LX(14Ti$nB!$Ls&c0U zs6a6E1B2&WbB7lCNr=Qw}Xm|smr)V%a^0}mc;dI2eGgIidb90s(^-SOT!XAT1 zv<|@w@q8De7OyUK(HF`<;C{Q+YFYSe;0^TE`P9PKg7e{T6CZH@YuJK`>blc;2_O6cw!&GV3>x@8YvF!s zVF7=C22_B9`$`0$C&L$D6QxT+;igtHTbG{^ zT}cM6(rw4QE&8iMP8TXv@d1&~Sn3C~G2_;MY4q=?;Ai#^ujM6TWqz%sx+}edM_#U? z2HPhV_9#nT#g!u+pIRx|ch6I;?RxTM+ESvxb;<35k^Y6MaWFsvJgxw_ls#e#2g1dD zJXXq={bq9%R%zJWYYt-wapViG`D(fvjx+}@A2dB86^JJBY10?{W%AzSNjHI9pWsp3y| zIP71z1BReBWOZAJb~X;x;B1XsKOk;@Ez|q$fw~PKx;!w=TWBS%!xD%~*$AhYl1hXn zn}L}*|4@xDk3YfMOw~xUMw6 z{}<((0f8C-?1Yi-0svUh&!A&(*+3(dXBiS;t_s{YtDUMj?qOQl^Mt? zU1Y|#B0)4WwVUdlw%f&S>I;8@+X$l=daD%WX0m~XC_mNzwjh31#2Vl46p+{jeE)tD zd^Pm0q4&PUv`(iurd<;?mWI(Rq$vj9(IOsXBMt?+>axHTHnk)q6}4x76qaVZZUuf9 zaaWSp$W_{Ia^r%qTZqwO4&v&Ynx*2qkyprJ($Cx`ZpeGl-QR(Z#+8yO8%&Yxs;zaq zCAKEG4N~5Ml#y~78C{0B*!qHiI*o7NmSe$eLrZLL-kO=gE%I4xc@d!wE`l(Jdq{VL z_z*pZQX?7BTWACfgr4DlxS~5j&tqV5y*uVd{UND{P-dGRi%fbhbZ&amcPczMs}!)e zve|BR2;L7f>-CDw>;_yQ6237B#C-410`=edEM}qWZLQSu64tA=ox+~Guv)91#?(u~ zdP%s~OTy#hviKQp`Y{cgny4&Vk^znV{?+AS6ak9^pl+l%?wQ1Yx0n^(b#X|Wk(Tfk(g~w~6hp7JXLKhd*k%k~Q zCC0V@Zg!*=_Z(|~F>0W@6A^V6fNtJ8_VB1&shz)TS@Rp67d+P1S1n;r7jeck9+c1_ zGli}kV2TcDT9cE6>HlF3lN!0>6;4b0^@?6=o@VL4;-+?(WH{*z{vtMz?z42pCzCGe zo~S`rK7!}}!C(ILg9-QiKL*|qCc|!TNV~!0BnY6_dFn-fYk*C*XXq-E&dugCJq#w4 zn*>?)g0x|BYUUCpU6A{;0Fek+8t(lW>yxy`o>Hlv54fW!A=S+1M07IcR zzdy`SN4`4p?OEhIYnL1&UvFdm+jrD&Yb*V#J@lXHBP^T?u+Sh-Xui3g#e1z%JLa_& zI8=sj6|8s5f0*6!XPuHm&9|V|dr4+OSOyaZoV!bZcKam_ymiN4hLt6|{*n$oA|54D zW0+Y5kqDxD&6#yH&{wXI8Wa6PC6b^NWurUhkqJ`d5fDK`ct#Rz&K!vpN7}uU5mBHo z6p@cetGg4p8{A{~_q?66-o*F0ch)UAG#PIn{p2{|sW?-^$x@duvIJ$LW%iS8=gmfx zW2@YMk~X#?3Ufl$UXYl6|Hvj^NciEjx>s^M@i!tLFC*V)sL?6PQf&s}YKJJpZlYIM zlxlXWy|-$0mbL9`bWY6bum5a5wVHOg)NFQY4S$PLcfHf36BHWmMN6l?Q zz2}V8+WjH4`=sRD&TLLhU*|BVD_#P7#Q&aupZI$jQol}@EsW9-*@V@x@VjC#M9n>scO&m&*Trl#NKoD%oJ{N$+mSt9VB%3 z5}4AWNN|ToQJn#0qbN!+g^1$_kP;k3=dCr+mC^$+UkX0#{L6-#zk){Rqw?ycZR&MhJ5dL0@#OF_Gg&R&h3S*rxtaME#Vq zeo7fZ&9jpa3M*ZluN_BsR3Xnxww?b@sQPz6K^dy#oUTwQOOs!7vbW~G()|~!U((gU z<@TdQ0aMgPY77Dp5rA0qlujZMFcv=Bd!xpFv}DwI>l{y~_tXCc00960%li9%S$Y5f DQVBJj delta 2697 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 Date: Wed, 4 Aug 2021 19:36:56 +0100 Subject: [PATCH 2/5] get rid of unserializable error type. --- api/api_storage.go | 4 ++-- api/api_test.go | 2 +- api/docgen/docgen.go | 4 ++-- build/openrpc/miner.json.gz | Bin 9922 -> 9920 bytes cmd/lotus-miner/dagstore.go | 2 +- node/impl/storminer.go | 16 +++++++++++++--- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/api/api_storage.go b/api/api_storage.go index 3e2eac3ca..e39acd034 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -355,12 +355,12 @@ type DealSchedule struct { type DagstoreShardInfo struct { Key string State string - Error error + Error string } // DagstoreGCResult is the serialized form of dagstore.GCResult that we expose // through JSON-RPC to avoid clients having to depend on the dagstore lib. type DagstoreGCResult struct { Key string - Error error + Error string } diff --git a/api/api_test.go b/api/api_test.go index 738e1b067..e65d50ca3 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -76,7 +76,7 @@ func TestReturnTypes(t *testing.T) { seen[typ] = struct{}{} if typ.Kind() == reflect.Interface && typ != bareIface && !typ.Implements(jmarsh) { - t.Error("methods can't return interfaces", m.Name) + t.Error("methods can't return interfaces or struct types not implementing json.Marshaller", m.Name) } switch typ.Kind() { diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 41968ef4a..8e16e2d42 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -278,12 +278,12 @@ func init() { }) addExample(api.DagstoreGCResult{ Key: "baga6ea4seaqecmtz7iak33dsfshi627abz4i4665dfuzr3qfs4bmad6dx3iigdq", - Error: nil, + Error: "", }) addExample(api.DagstoreShardInfo{ Key: "baga6ea4seaqecmtz7iak33dsfshi627abz4i4665dfuzr3qfs4bmad6dx3iigdq", State: "ShardStateAvailable", - Error: nil, + Error: "", }) } diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 2c0dbb082759185e7dafb1138d16776ec53d5f41..266112d071d0e0914bab315f1872ab59cac972c0 100644 GIT binary patch delta 8442 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

pnNGnG~ik`@0^Sl?PLF7DRk3pKyP(1r4HQiE7wQ z`1L(Q=fpvGqF=PGwe&dH*+cgV5{Iq{^8Fsz9Dp#zp)?W9Z}9jnFx29vgj_6!PP%UlbdnAAFD;>iS%)6H4KNwwIVvaI#AhVonNqdo4ACQY=`&Nr_9 zE<1vcH7>8DSoy9`!ajfKa=;qQ0qYV=FUF(e!r}}6!^YVy=R1H<$)lf&)0ZlK0lz7o zA0qoG$8CP+4*9B?0FmwAF>HN?9rtx*8j=N19p{4DFux{7ESrX*H~#rYD`L$woSm67 zht?w;0_Vwqi~(7vLK_`z??BrFU6n&X0E|JqW_d#rLeZuc`Qd-tWGHzv1Pg!5u)F_O zgmn$5Uc93znhy~!R!AY{K{V1qca24j^NUhpBWfKTE(XVw$$SqjM*Y39bA2&_Kd(qgto4M6gs2+ZeLy zZs6a~#bFZInrwf1<*XCV>Kw#uh$Z$Nf0JEqiW5u^eTExoV|FhB-lw+^yKv4iKkiv? zXX)Qp$Vc8S$K_Zorug%NFD_IK%*KF?;<6EvCZkh$8=XJR=VCH2UI8Qe@y$kdM_}%t zlZLvA9LedgkOC$RJnT1~Lb_THGVQ5as9eHGbf4dU4xxceSz|OOrus$dAUOgX5#oWOO)b#q*da zT|+B8Xc5t*0j?rzRcFq6CekjoSwEif^1QO-$0J>lnEVE3$abNJBtP$>T2g>YHa_QP z8GRxyjEaA>&p1fGE!z~O&}e9Hl$}~OMAy2~5KCqzos9NDwTqd})PnI*_L|^fH4FUF zsz)2tINy=}&&RsHU4HZrw>f- zKdOxG1mwkde4wiVmEzznCeH2xGKNwfT@GYqfhB)C%KK45<2K>m2tuA!{3kJ*Mh=wh z8|t`GQY-VQW^pIU%rnKFx+E)25c}@DO;5>a)^mJ;he-Ow#8pAz^5;wUA}_&coHKg4b`R7C&FqO(tOD&yfl~L$+%m%}Tne6#%az)(YFJHPTl`iK?c#jBc!n@Gz1a z+FgU_MUyeBPll~@pLw*}mS^2iW_+wGXbT8?*Hl(r9&3)lrR+7~Y<)(ng0+KG**ZKO zVEzb99VNRKadU-?SW`B(UOAA#R~yJyRtbNL>e>-J4>maH>#8s!TDaMf3vQb6k=2hW za2y(nCIr)Yv^YZN)cQf3THnt!x+ufN_+U_63Uh_HK=}nhm+e$Ekc49viVc3rN95z> z0y6oUh6H5>^G7LadrGd4Qkj+cNTxm97-Z6u&`fH3&rLK9_myfi@~Ok4=dR7r7Og0Z1w`Ye|W!iw!o+>KYC6g z^qFkdN5vIE*WUfE`}F`s+gtV*b4pE|*#SCg0Vuyqb&(g(vD?RY`}l4jA1lEiC*@lt zsytPZJJwXo{6W1Nc!3uE z#iW0T5K1(K3{tLj?I8#Kevsp09Ub;3gE{Q)9S-Ks-uM6>?9J`|WDhR-2aAC{JVXah z-0r#r;x+VdxU@jfeRbP^#d%7!{(i;nkE<>D17c>K^o6g=W7df^><{~UgTdZlc-=of z84geSM}Jy9>lf;?VA)sHXI6hJasBuu3TIm74w&+RW}8v3;oZ3eI5_NCYfKWqvUx-C z_jxkrYTl2QNOp**!MxY{)0|vH%wMeq_12J+wF4R2V|a~JE$ty@Do*!Ib1HxCt0fXtQ}SCX ziJo=7B-BG!$fsM+PRNDCm9N%&w7y*3``CuAbuv5}PmYd``-jKlagX1ceSsV6WH6je z#>f4^WHRZC%dxv`I2a#|C!@phq-RYpKls+k;kakL6My??!FQJ*z+f~wvOaTmeM8{f zjalb zc{cb$jVa^ocU8SKb-T)vh)-v-An$^a=E=M%S~K$BCP~fk0ZFn=>E$F*8X^$U^kc@@ co~lwiI<_7jK0o~b00030|0GA<<0H=j0Au`n{5P7dpy%wwVi{Pq z6{!Z^t~ynZre3}3P{Gk}A3y@OB);GPUksVw2itW_mY)b_Lfd)BMbPIOgJ1B0PbuMl zV)j42*wx=xq_49!408b2)8zcl^QES@H=tu0lbCS6*eg)!dQ+? zTdp(L(7Qp*2mW^M-}?-$o7A1rk`*Y=d zNRx=B_(ly2+Z@csh_-c6t3tga*vBE*u_iey^@To=TjYNUPkpmQtA^VE;i>_*LA=^2 zbOii31bm=L3rT&Yf3`xtDyR(*uL^7%q^m){BizR!+(S)(TYQJ}HUE}pkiq(78pF_e z=WXolPq8BsnaVx&X_z~E=yNDONQ|=1naHK zu+8u8ZJ>RFoail_Jzk2)0|f8+s1@{A`{@kYuhuJ(SF*St&i{rsf}=0KvpT#V!O469mXB7tKoIxmTtA^?!O*>ZZCM>o`m zZpEDQsf!U|)oab!38a}zpa?Kd@ScL@(SoYGxHo8P!^klWShW4W%VMS@As=6SGB2^&63+S^C z8;48IDsz-ITUA%ah5pKTe13*MKs0Qk%QE5eR5BcPUc1!3ad%Q5IZ!%X5?Qe&iX;cH zP^$z`tE&_h-Yw~u*qF^Kmr^s=Bh+q)JjjeKyffp<|Wj!zu?wSvLt{Xf|)51aL!aVxGQGpGh?6cP#RJ zSmdxMuV;o>gPvv;G<_qO&@o)j5rz)u>TICGwsqR?oXTxEl{WTK;`{88YM3aOiS@a!Zr~b_j@=gL!htGcsdSA*q==~X9lE|z+^>2!T>Pg^gNk*_+ zC48R2ww0iH$$WFGTt42UuOlBR^02VYk?31-_Du5HdrT5}M}z)o*t6clyZklT3^Z(& z+_SFn8u<*aH+;mPKj>L+?lymzBNhCdq5u9yt&{Qap=a?qK)G^XE!pXF*t0~g@rm^> z;`aZXyjHb#W3A$OWkwLm0^`V${UT3HWnVk(HQ!-!Qvrs8~Ain5l8moy*c)v!3i50ko zE*I;$i|54l5cH9d`PC$N4!ltUtnT$@*|W)6SCyct1*$3Ko{5MUX#)6?M}le_1l`(& zMJhmzR2QiLH?uv?A=`h|8Fh6=U7gV*OQx|VZ$k3u1@>9e2URb~rGceynidb5t{@?( zuoy`Ly`*X^1fUjp>U!!RtlFVw4^aCJuGL?z)%WTOpSHf?K0o$!R~j!AgOO)|Ztazl zYM+1o(&Rvsrj(GiwbLvzFm|hc%>Zko1~!jxR|(ry!YZEZDq*`y*xkLa&rFjXYO?rZ zsd`Rq%EcDjA$5OG3r(k8(h(~G%UsoD-chJ@G%u>Df%3C!Nf&9*)}ITg7}>6tI(3}4 zTjKar>{OT6r(whEx73SV;_AIktk!Z+4;?t8GAWTW!9T0R)jqbP5XC=!kzTp+} zk#{RC^J>_flR4cIXL@?2{6a+=)Axu$2QqjG*-AYiI!=F5sqVGUb@o$dKRpfmDWt?& zGBP}2zRt5(Xi<^+!*t!&Y3B-l5h=kHo}iRfM=NwVM3P$LL`bDMR68lLssWljpupH+ z68J99%Z0P*^xpFKs2q<;Lh?5><9O6B;SXR>A8AtlV;ix7l4Bh(oi&|}<%d$1KO{)b z%&s;mJPv=%>e4sXG_W71DYyat3QODMnRadNP!?1@nEPAEf}SakdD}J#n_@(Ande=DAOq_;i8ib+@ zy0g%oP&&Nfq^)OW2~7%%p)L{OpMF;xC<#Vw{Uk<|9V(XxSzzO2;MTBbGPt*5$z-t1 zt#tmrNrq=2y}79p?L#k-hp8j>-qwlL@An6L;=k*D|3v)vr{XOCC|*1b(Cn2;Wa9-fu2bQ^l@P+U9?WkD9}7K zr5-IwdRBmGCi7X1Un{!uN6TkD?rXXr%ay-EK4-#)>eUs{9;IMi@!n<#Q#~Qml64hY zkTJC0Fdr}qJbAyXU+?PIyZZG<5r%`p%EW)!uJ!9PUH!Tcd3+uH{nvPTPMDB$nF}KT z=Xig*f|v+1uLm|`ap@8|4ss$hw+A){s_Ug9LPDCEe4hQz;fi-?u zuM*$xpx$S4rovNY!ilEFDW*pGw;fqf{;d%Plz(fH{UTgD=IfZRRpvX^q}5-#$XOz3 zchqCN1OPSD!8zU!4Vyx~OF(}r;JGBYYHXLrRLyeNXuSb&gE`FshJ1#}vQko%iV>42 zD`T~Zn%J2f(XnzV_H%Mm`;r-aTuo;1$(&OGpCesFO)9>CjTAQ0mc{+b%jP4)QyFs1= z(OC9jcGV2|Y8Dl#X*f()f?E9}`R|_Mf8oDYMRt^%v}ogMkb_aqw`+KJE&&b>d)6A0 z#INjDaaN~5uU#3kd$01Me5w=^nG#6iB$B2bA5}yBwVleQj_U?iJ)a+@5>%$4285cx{6giUrDRh(xKut%_z_i z<40-I-)YEBLzZdCPF8oaI*`>vO_@U=xiEn){(BcUf(pk7f0gA);qO7eS7saroN5xuh+F`k@4d03(ookAa6Vzm=+lO@;?U`$|L0?lk ztPs_^ZpC6iwKSTPL{see4XLvRcV(%mb?U5BXHQO@#oS{^B~d)MvDQzsM&VT?y!hqS z>M4`U@F-1|I=$WLZ3DeMDC}JjwBFt^LoflQ{alX3%bL;4Y3#ckj!q#z35DFr@J@yY zGJL43k>7t3hSzAeo%{E`V4YerJPSqLz)3z64Jzv4l!I8%$SDK1QZFYJ=4!c}$4El+ z#d&yse3`8v1JFYN5jc1G+c5!bg?)gD&mghU{?3h{GE>fdwEX>YrvGTk;|(lnK8Jtf zGBd8>k_W2z*5{|=eR`rCH_}u(2Wxver(XVm2NQp0O9C*pl?qIvB)DCzp$uxRw~6kI zpw0;DG`y5I2bxOUfG2163OQ#OE_abR5fGi+k!Rw*z+513zWn-7q~xo5214p>cmq8wJ~dj=9!F9Rh?^|m%ol+g|~ z<&u9=vWDFYujwhdugPmUI68KNbG-k7Y;uRN#*vIO$e@T}h})tyJz3C~;DvmP>?vQ& zqd9B}Oz|YtN_Mz<(&gceQ^x_~&;h_GfCSJDBET2G_QClA5E}gQ<=NGU(Cu;s{0+2` zFw*%0y-x&Tadb5V1bqpf0AH}{f;j@Vhd6%?_5k&y9dAR|4eq+sz5#q^;DR;v&?geU z&4wiLY&DC&NMa~Id5dRq4#%w=h@GU*CS=U+4(}9$n4Vd&ox9jyO|cW6sTLmoa4;SX zTo5dE=Gh|C)T1r7>>qP&${&JEq1t_7GHn6 zfOF(#{X9Ku#-PXKA-pHzwA`NchB)a9ffx(Va13tBgDQhJO{wcbhCGgyxFM0sTnu#(2nd^t>Om@zC_jYE%S?26+*mbM(2`9TFCj} zb~%G8L8@j4f`%kob*d_os|q7Ybw+;&t|&R6>RZ#y8?An5?J19H$?{7DYOF>R)s{qs zYMM*))9a-K>f;1KRkm@`iplAT%*`tPhU54UA1N+>$QZ~L$i6DpWey+iEH-3Hl=3u)+{Z9N!}MqTdJKveTF!)vr34k>424eSDjPQ8Di20!a(Q^eUi zJeP>cs5=Vo0*;@sDq!fmV^lcrcjn&I%yZu}d$%1g++jcZr?xZhX|mO@uc>m22ta&z zqJtZYO?bhh{xGwc}*%BAy;ZT#)ETDcQ4E5R)E| zr?K0Rd?IrM97=xzdqBSDI(%p!h*xsnhQtAc#sK*>7vG{p2AJyt8*Y6BVs7E00lJ(u znoZK`HUUqbpAWSu)1v65ai6XRqK@O!?xQkx*8p#Z|Mi%c2?QNleoH>wBDVZ)984W| zUW|uFg?ZMqW?aLwV%KmzJ}mJK*I>RRjs_eTBj7&;S8#vFlh1`GCxzKnB115)9j(oi z2{4UW!%3hGv1J;~QnpMY5LO33*F_GXBr;Jk0dLkDb`Pir{(zXB2`&^xNB$?mC}195 zE|C{iCL!p#_nqPTW3l0JVFFRKH`;**BN&Y_U<9!l?n@$A#(MFqqrGNoYZ`7k!3(}E zBulRD7zKYY-bqptID{71^V!QDf0}$EaLec#GR*n-KHBtRmfGxg%=tqx=cr$pDHPG- zuA!wgAhnP8CmTEaQ|y#`chk@sD#TTyX~d}dC{gS!Dvc5)xc8CbMB#epJMqLfN?2AI zl}Q7eVh4Df^f}JH*e<(^JvnABtcw5!bQ}-)K5~Bmj-UzG8y0r{8aZHo4P9z$ObQ@^9>UR+d^1Eu->{1+x+g{2HH2siQd9l_oZ;YLGYfBT0wucpOz?rw>sqV zAiVT_^ZB4Kbtxj{-Qzh~P|d`1vQXQM=O|`iBnHakIiaU0X7w(j(?xWQd3acuG38%i zzixkzp6K~#t+%>E!gQTf!GT3fClNrQeYX4oY}? zHqc|(-n!6>ygUtU7gLK^^HhPXy;hUtJC=Wcnk+vqOiA*u&|)W6=g+Iv-x_W{N}~GA z$rQTCxk3vArsg0Em{|?C4nqgH@0=^FB7HTMxs}!qGpRX0p7i_uMD_XknP_vDtUw=6 z4vr4{Ju7S(plWR>tk4&P;b3?4>X98UKOs za>atiPst`XsT=16GYs8J7dfKgIKTEgxyEZ0!-t-GA5Obk`;;WMCYmMqyj6em=r$Epp70&;9Ow?F!9Cd;0rAd~SKqN%z75!EZ|B?RHuGkAW*#8KB^XxrO! zaj-@{gX@ji%&$FY7xu~5nmRFCnKj}ZzJk zd2Tz2qrx<4e-@ZhyKE&S2)(Z$;mP`pi9y5K5M+t3AOpA71|q^;zjFwF0ZbN@?;VdR(XvD} z>?ZvBo}qK%pgYkoTGv{79PI3&dj*L@*97@~4{Q!VnBq{H2g|KC=1y4+Boig!c0?6s+tl^|uY))C$dRjyIE%wnK_eYZ^T50DS zSAUls!N(exS5mBe*C&5rA9Oij4d#G#iKQ3g(Q#q%h5upW?3VK#K&a%=PsQm=6~BPr zl+F*4eU#%izjKFt)l7iM_U{7cvDqQ?0}sjv~Xjt&=tw?@8{w$32c8&HobDz31@W;xwUDQ$pr2ObzDdIU6*Y_KFEMI@TjR@SSqr~`2$X3^4BmLsz zXO)602zq3YD{cds16?idkza`NbNU)T@Hf4zk+rHbXFU^Xm)fi!&vwicL5ngDUU7(GO~Zbk{#v!D4}tiaBl=5&no_t7)>Jw zO7;zP+$gD)c~rBwlVs+ZVozO?l_rRNciyI_WHjqJzQDtz82Y{WnJzsn@l`$3IhA%& zyN9~+>;mGdpm6!~rF)T=;6<%410PnPAe)IV1T%Pq^pU5t^H2#N1Gjb;_kT97^Y2-t zO>}>CVsgRjH&ctBFX|=}u<_?e1)m|?HIQZ{UDXPJ*AZ)l?bRCTE2BhJ(_BV3)t~eAWp6CXBu6U;bMF+C@zJ$LR_Hyf}qQGDjG<_F$={8zvLtG z@p1u~d`&}wGK2Y}6tz7i*GH+$%6uf#9&QXW=}BlNwY_I4dZbm<6}o;?A+BBS{EmOQ z^E-Fq=|uL$_+VIE;T6=C)E3qJc@qzHs*uHC)5nJu?D^6aVl_5<0p35nUpiZ0)RiAS zClUHgHtVC}ilA%ne%Jka0HWmH{s%8G5-VO4mln~AUbtHdo3PSCM7bz&aZr-yf>8--_YZ-D~c?2n;4g!qw zxyU;dd=W!^aCJFtur)x}B;)aU;XqS-Ac^50bYAZOhWK%PxNN({&i;oFQEXSr*yzb3 zQz8am5<4q-N2T3WYEG>M(n>H^#?{K7F|kh2V&WVh!{OfH|kM`Zru!An3lj?Z4tYC0c*K;`YbYmiz%RvrhWLSLHG5#2WU8{k_3pZ!o;> zAD;||C;g*8t)BG@^;xj&E9!qUtChHZ{1SyTt#SuU`9QPHsMqlBTml>%_N+A~iC@{g zq4@he8FMx7M@u9-MATs3YyD|XE+Xcy)`EI#$jRD)4DB(zMyi(fl1Xax-G6So>qAZH zh?I>p2H7t9O+0U+;IcwlJXo&a#4uwGr+i5b4HwSp5mcNKpfauuI_zoL)SVP9*rkQN5}oc*R3Uv)+lneYD`a%MV~M8XZ}mIlI0g zaPG#e`5vu5_{e#WiBNQc;ZJxce!kmmrJpUpdMbWfC;f*K Date: Thu, 5 Aug 2021 11:38:39 +0100 Subject: [PATCH 3/5] improve docs; add DagstoreRecoverShard. --- api/api_storage.go | 26 +++++++++++++-- api/proxy_gen.go | 13 ++++++++ build/openrpc/full.json.gz | Bin 25246 -> 25246 bytes build/openrpc/miner.json.gz | Bin 9920 -> 10367 bytes build/openrpc/worker.json.gz | Bin 2710 -> 2711 bytes documentation/en/api-v0-methods-miner.md | 39 +++++++++++++++++++++-- node/impl/storminer.go | 30 +++++++++++++++++ 7 files changed, 104 insertions(+), 4 deletions(-) diff --git a/api/api_storage.go b/api/api_storage.go index e39acd034..55ed033aa 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -171,10 +171,32 @@ type StorageMiner interface { // DAG store. Only available on nodes running the markets subsystem. DagstoreListShards(ctx context.Context) ([]DagstoreShardInfo, error) //perm:read - // DagstoreInitializeShard initializes an uninitialized shard by acquiring - // it and releasing it as soon as it's ready. + // DagstoreInitializeShard initializes an uninitialized shard. + // + // Initialization consists of fetching the shard's data (deal payload) from + // the storage subsystem, generating an index, and persisting the index + // to facilitate later retrievals, and/or to publish to external sources. + // + // This operation is intended to complement the initial migration. The + // migration registers a shard for every unique piece CID, with lazy + // initialization. Thus, shards are not initialized immediately to avoid + // IO activity competing with proving. Instead, shard are initialized + // when first accessed. This method forces the initialization of a shard by + // accessing it and immediately releasing it. This is useful to warm up the + // cache to facilitate subsequent retrievals, and to generate the indexes + // to publish them externally. + // + // This operation fails if the shard is not in ShardStateNew state. + // It blocks until initialization finishes. DagstoreInitializeShard(ctx context.Context, key string) error //perm:write + // DagstoreRecoverShard attempts to recover a failed shard. + // + // This operation fails if the shard is not in ShardStateErrored state. + // It blocks until recovery finishes. If recovery failed, it returns the + // error. + DagstoreRecoverShard(ctx context.Context, key string) error //perm:write + // DagstoreGC runs garbage collection on the DAG store. DagstoreGC(ctx context.Context) ([]DagstoreGCResult, error) //perm:admin diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 416ea6a29..d32874890 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -609,6 +609,8 @@ type StorageMinerStruct struct { DagstoreListShards func(p0 context.Context) ([]DagstoreShardInfo, error) `perm:"read"` + DagstoreRecoverShard func(p0 context.Context, p1 string) error `perm:"write"` + DealsConsiderOfflineRetrievalDeals func(p0 context.Context) (bool, error) `perm:"admin"` DealsConsiderOfflineStorageDeals func(p0 context.Context) (bool, error) `perm:"admin"` @@ -3608,6 +3610,17 @@ func (s *StorageMinerStub) DagstoreListShards(p0 context.Context) ([]DagstoreSha return *new([]DagstoreShardInfo), ErrNotSupported } +func (s *StorageMinerStruct) DagstoreRecoverShard(p0 context.Context, p1 string) error { + if s.Internal.DagstoreRecoverShard == nil { + return ErrNotSupported + } + return s.Internal.DagstoreRecoverShard(p0, p1) +} + +func (s *StorageMinerStub) DagstoreRecoverShard(p0 context.Context, p1 string) error { + return ErrNotSupported +} + func (s *StorageMinerStruct) DealsConsiderOfflineRetrievalDeals(p0 context.Context) (bool, error) { if s.Internal.DealsConsiderOfflineRetrievalDeals == nil { return false, ErrNotSupported diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 3e87a8914799c528882d39fc0ed9b80210993ad9..725fc80f9712c473dbc57b5b00ef3495d49f8cb6 100644 GIT binary patch delta 19295 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 WK&WIt{$Bt90RR8ZvEH-->;wSp#3RoD diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 266112d071d0e0914bab315f1872ab59cac972c0..93de3a98e6f711e75cc1c88c4f4d07ccab6daa33 100644 GIT binary patch literal 10367 zcmV-_D1g@=iwFP!00000|LlEhbK5r7@L$33{qQ6mS<%h5?3sRW>?HNpY5iEv_Suay zTZn`ttSLYxAjfLP|NR{Ryc6I}lw&*G?X(sN9vlGYhJ$kszFBmIh_|w>W2@gCbPueK zg~^Os$KNcDxr?l0>w@w%16P-);NR5NkW0(^8MZe$e?|F9Ldgxe7#23_I*74_W z7J*Cg>3i%Vn_|*Eu{rfl9LGb9Sslwk%=Yk#D=>fl`RAP8klC8p;1vTuO*r-79DT$D zc@yrfZT=d>0lZrEfK3TU_q=l-=uMAzhTJ>JvkcS)c z=bwLC9gD4(OXzK^W6SDTE9k+c8syp&Q#Re~tti8CYW&w?O22e053#k&#me}zo5C+M zui5vBu9>|+ODN!>d$?S=Nc3aPdi}w0WPRy~&m|hrz4Yh`c^r!tGw3qZvG`_%L~}a* zFS5DyR4;fwT`U?=PP#n=FMC->DqMpX6Dn|-pZo_uQ#rs-8WO0PTwpcHoVJ?)OL5!$T*ZYELPd;rZ6ItH9_fIMJjm{i@bERGes6n}$QYcS6be zbDVx#OvT@4u+Xer;6;LU(FAHoOF^WaAO){Uz< z;M%GA7POmE>LN&DEz=XFYnolo#_-K9enX%iUYL{|?B__y36lTDf1~;$GJ>Izj~%e; zgS18luizASqwflZX4EuK?mLEdgeS`Ap7>xqjy5m)?&>B z1S4ZkarX+%vA_>Gmvq7}JxXUCuo{5RUzh^xFYy%;&xb&W_t)Un60SZ+>#vsZ3*#Op zxi(M&tsG{~0bhx;)6*b^ErutCvRnSvPwmc_q&{mzqZnj*)eu1`NhQp!FP%Uke=g9- zN%QIatWbp~Kag~vtwq>>k{lU;WwroiLhXZI!e1V6c16*p~S^~iphq>Oupxnwm(CGtd${)eyRQ+qrO^AlZn{%E?R7966^-BnQpq;u8+e z9Yi>u;rOQkhlx)kPXB)LGON*(u@g04A0oix_4Kn}^3Fi0ArxTvR66epX$ z-Ej5s5;<5RGsOgYn|H*fj-an&YYG`U7{#{ld9uAO9X(NTzdtsJdk;a5-a`9!y{aef zV*pIz-Z#RP%+`wR7!bY4t{|6_2$^@~iB4_#g8@Pv1g7d4B@XfcUm(C%$QDw|0b=@r zn8Yr)UZ5MIjzWM>7!2?Qtkqm zYr?=BdQ&(@z^1N?Y%x24D(*Nt`2b|oZYB26E86t1GbWSkG(8YhF$pU)LR&14mRaCYuqM$12Qbm3 zdqZwW_!*RZXj8&4;|$Olm?3U2gu0OGSbXt63^l$0G4>J z+6T5q@Edr(mr(2!5lAig+wDeY;F+>O8#-cjt_kn`UGv^l=Rd?S%ZJhW|A9=*e4-Ua7`aReP7x&$5r zd_$y>GQ%F@0NOTU3^@WH%z$rG&8V2Z_>2UEL1*E(r<)t1J{K5ZE>|;-w1->-{g*y` z%)pwV+1eE&`U<@zSg({#WgWP9E(xSws8tqBk)bDBDQ{h|r5AxMW$}fuYngnBG30Bf7+wmVkj69WEfw>? zDP3~_T{n=6w}gHrg4v~vh|EIpJ8?Gv-a+ijT^c2F`xtHZ1V1mKcZ)cSv`~}QWH@Cx z=48Ch)3PT!mXvEhq@{V#8|1V06|(6a^0qfK9;3C{=30w5+FcB}EH32DR&VxQP@lIG@FyN-R3UEC~dS6d`h&TiyJ;8Mr?*Fff8H zI~7|O2YJ8GW-cb^Dli=7%X;iw2v)DVr|(v1Ucj&S2pcSyD=!cvniQFMi9ym8kw0gJ=5Uw8Z zE{NASgqDCGhky?Z;Vy|)`sYr_R|mBL;?;rO1?d{lZwdEt2=~ww$|2U_d@0uQ402eX zOd}X3XP}Lp?kRR;JZ`aLFbQ*OpI`>XM~SQThg_U#p^alr!aBtc@C0o!M7TVlMeb}* zwV7fvS94Bykm80MfJ10qaLxf{U`D+qa=>&0Ao!=s!tVeGPN{=z@apRV+Y5k+gKZhK z2ElUea%_vYdn;()A}8!cu*Yk8S_#2N(P{zNqMJ+v`DVS5;gPe=VEQ+-5gdMH&f;J* zgu??q9kN@rT>Y2c|Fv3g=yLVn>2iiPv*BolhwIJ3dW}YdyOH%!*PECddfWOozlRh$ zGKIki_PoF>8@^Op{)n$lr;H!vS(#{7s1^m7+*8E}R<+~A7>+y9d2!4%r*?^#JC3sU z=!!DvR!p5bbul8mddjr=?v%PRj;2Jn83^x)^KM1$MY*W(3phot_SEqbBOBF9P>^5B z#MQEa>371Wsy@`<%WbA>!lB12OqkEImmap!CGx^AtMwY#kCKEn8UDH?x$qdc0vTRF z#y_nbAvvpzQKcSNof#LhMd|k05x)H6?8BZZQbov9#cr(sH-Aa9AK$&z&XvG#N zk_^CHt>Qziu2OV(??}Hy#%x--6q>nZl9yhP37jzyUl>#NO)(~dA}5IN=#;t$vT5U~ z$^_(ZHH%<3vH>kIfSnin_^kC($9 z!@O9LI3+ZC@?HSADF!Kh0KWx?=+SRko_1R;m>O+Tm%Nj3- zHTLsjUt)yNbTmOB=!RINN>D+4HZcyNWtEr1DhGK{H!)&pHg2H+a6@cTK764*lNiu% zS>)xg$YEYw&jj%XJhY_8?(14b_xkcM~uZw>ywS?zia%jnB_yz|;yMuPgr^7O6;6x7*5toZ%Fg zvNa-Q%SVDIWYvve{9!>WFvoX@M9k~@3$fo|_ zZ1^jse|-4+{_kJ^{jWRp%m4A!hl3O5efq~+`;Yry-oBpDV7l_KkanAS}hA9}qubw_C_N1wem%{*zxjM-?yVPVk(BX7vfX%{x?&1J_G3 zg54^|=P7J=a%f&K-pni)w=YwkShSRJSlAXw^sFd)CjRUrCb77qes4JFSRdhi_L-__ z9aQ}9Sl4)o7>CQ1XwmQWJJ!4V6&6VOKPTv~->7vw8a#9?F$Sn+?wh3wRu4Lsj5R*C z{zcs0zb9`OHu=W_{qN5|TMrfQH}QvBrI>_|YMJ<))gR9FjqA zgcY)U$yiod#6dT!HBw0LMtx|8oz)roM&+)!QX!ddH#|@Zp9qs>xg#}k2{%hbxSWAI z=nAo(d3a824?%{c%&#WFGvG@Fz?!-*7d;yvbyW$Pn4p?c?uCemk>LPe@ra*ogP>bG zu}BA~k?bNJ;AXbR8D!f$qc+c|%`6s8|@ghw_|F5b<+& zvTr{k#^796y0ByY&KJnLL`Yu>al+vo72i0Sx`HMAsN8*(sf;ao1Arqoiq-9?v-m1& z#&bdEwGq3Zb1h6iucr>ex*clz9?;+5QonLL?bnp}v}Psu`H`o)QhTWwN_ht8+Fod> z_T}dlW4r9v6tG?7z-IAnGhy3ISk0GhCTyDtyS?}Ig=vyQLlj>m zRnLjK@PTg;x@UxD(k{spD+#N-s!8>ct8@$<)zm=Q(d|eV8PGOgZ>wp!TP=0sIPcfQ zVW-%sF0W65D)sNF7rMmtdz(nDWuT~6&+Npfqc%X8lDaz}=$19Q-$TX=rdO`v6=KM{ zQ6;r2ZgWcjvTo1;5IW;0j+*%B!OlI2=MrZEzwa!W^ny_*>Ngjo&a*+F|1R zF3*dFv+ff5;(m0F$2cLe6-_xF%~SXT*wbS}$bV!bHjr{`0%o$N(`WgClocOIk}GFd zmq|SK&FaD)YZ};(Qxv=e{u)cW%s0EWxdT~n_6%e}$2whmUga1K-yXFQu4j*y9O(s` zLwj@SQBG}YFpcw!*GqN5V?AT*@ncuEGYsW*T@^Q1Quft6h^ey0xj@5wY~!+CXtIdg~|FqUa{bEXW)iCk3~LJ(I$HCzebK%gjt?-LsBFr*4z1+f!18^Y zzuxArxB2UjA`FMQnTeBa^VcV){B$;p7PDjCC}#)YB4SYWr)gr)ebm1FguRkZJ{XIbXSqNj*u zR`etZZfD|N=Jq!r@<-YMq}X7GqZkev7{vaw9Ym`_E`~=VLuK|*EH;$fJ}FFYmr6yK z!d*rY6lb^B&+?>>y})B|qWRLtX!)Jc>?t&_bY^ytb$LbDR(UT>_ ztN_xsDJ6!~`B@W#_RrO%FuS0(OjhuPT17Lb{-IvF^Li)26(f!7A4Fauw|sO_h3xDX zq7n`b`OKkQjN;6;QVJoMYHA_;tdwF1TQ{p3;<&fU;YU^uW@a$8Dz)v63AbjnL@Z3` zF~fV>@X(hV8ZkDcD=R5^ff+x=jv)GaF%elXTU^+i1=jdwy;^+Ri+W$koeEEt36Bgp zP7yV#zqVvS^;aVdsQ%g^`-Ql+%-1sC4w-M%>lwo8FJ0u!k+M7LF}467+b?0z@AY~e zD@ZIps%R`nbr1^8((<{>FUxQo^#+ER+AB$2CyqK_uf;e?5GK!p*p%TJv{CmIx~?D2 zD3A9e=fY|TeoD4`r9*i9r&J3gu&_1AVPmvvk>Fzea)FrA<(dlW$(WF7Zn8Pv%l)m0A>B)C$y zq8Kx_+aQE3bnDQNN1$}Ud&Fh@U|q#3zptcKYw1wgO*0BK!1z&$^tT$a)sRIRvX#}X ztoCK~$dKmXOD;^Hi~runji3Yc2+}*zUqfO%J%(1ExAMG|=dC<{O7eW)kaM6!*hhMY zd?CGsFpojmy(Euy){GcWV&BT}R))7Syp`ckNroR7k~oz7x^I3_*kM9h;+LrY4ukL{dHtW+DZ%Q zESJ>LUxQlu>(Zli)`aRBG_AS@t?Fu3*Hctol4V-0)oQI5skQn&LzZJCpD#Vs%*HDM zR8x1MrnX-ZsOHpIVsx!0Yc<&u)MTjLhqW5*rE9dlA$3?Is<+*WMSyB)G$n~nvBMft zXASPk5<_d%S*y;ToH~oRrzDkx=fRDYews82uOi_^omb1Jj8DU(6j^HZcB{8b=&w&eK0Q&6+c#u7 z`*V9TrC#=ehce6-2T;~l$}x%J;I_4fQmE~`Omu4mwMI~@;g!5OFl6HTJUOu!$T`Ds zzKzTYftciux)b*m76L)=<+q1CC7*`cNWppys%ANq!N6HBS3*%MV1TLjKv0acc991d zha5FlU+()|uo_#U3|7f^B_yg@1}c>5ZEche=&7;H6nC9UjVj(Hj+lV_@Hw`5SCY0LqO11{|oRHyDpd_ zV0%c=U#2*`;uJfZS!Ql{=uZ2pdmhy?sDt<73C92+UnVqbv5TZFNbuWpcg^Ukwn>(mtq+0Gm(11j%4pm2TRbj-buGEDq zS`Mh%Ym#}x*$=Ee?Nu#leyKo>)o7yHl;}`Ra%pyWorFMroI_BZZ5+2^GI}EQvWmaq zD7wT)2s`~vumDcHnSm$Fy0=gfRAR}kqyK7djBy0wX>3R^kaa5iu+4wEw_TmcV z`n)s1b1w`r^-#m?PL9X4Q%)m?mrLYe$dS7N3=xOPn>56GuvCXQ%H$3#VmP0BXfEhQ z-ie@^c5ld)??x8}6u`6SW5~$=Z~>Zc?JqY^m*z^7oTfD*GpopBc|fPry6+)&k)zf? zHeEq3mhdw1efOulW3!kb{>bLl^>?iIX5E)b7o|=hy|AN!BSS)UoX0K^anupac2dfR zW0F&4?^Mx%%#}{HFIUmyUM!OWq=G{^2wcoKpfj-Y-}tgA5J#Mf{kf1XK%UPbK+rvp zq*Ne>8jwA?*S2I{?^eb<+HEZ_i)RNtLlUW4xDSZGyI&!j3n2~Nv$Y3((x}V528en- z=6H#^L6c%OHo(qd=tKuK_}M&~JkB=ZIY(Tbx+DKB5co-}0tU`IPNnmHYwk^qJhPtZ zx4ZGe9rVKg)po``QMT$EvfM%fkPDAoxQ#D84yGvv3IXnxYvOnpuu6nc$RCm|R6GhG z=&QTg^Zn62m)wxA5OaAio^)RW2SJyCDVm8NLRpGEKMRh*T4s9M%rr10*eDYD2)*0) z)cdrWd(f#DtE&T)cQ&Qks};!&LCJ#MJ`_cZ>dr$_(!<^v9Us-D-Zom|Vl)^TV%pWx zg*jH+dWw>Oik(Ga`||#xWEUk}MwxzUXs68B^7K;*OP%j1Y@&A`O$DaD?{9SHBn}`n0w|uj z_zuM)z+4yDaLo{ixJ8Ht=nB?oHb|@81Uz|uJ~W0*%cPgaeYysSCXP?KkBZpc0K6Ig zH)CET5KL&X9rPEbtB2V7@qxB{(iZfIS6Q zaLbb~g(r`4qpM_uV3a#rn?k1r%l!&WEvlOG6Pl+OLQQ;|3 zjC&vHoG6&@Y$cxPMFGodPi2z8PO$?#LHYt`Cb!G(Y)`eBO6$Uh0UgIfj3Ec$5Snzo zVQJ?tkpre10Kq?z$7I|K1gF$NHh86+ZbX-{-Y^YAb?Vv1d0R<}k^_I9`rg^P(DQdevm|-lU^D|0q!()y=*Oxvh^f%S+KcSJo~f21DVF3e}w=NpvKupK#HEEG{G6Ij3~FJPYbR zi62+N4|Ox)vGp(F_WnJ2yRgYW7U+L}{@GI1T3FET8r!!@EdEm#Tk;>LY8y?Es+N-1 zCJbwpG2RhMi3eARdr}~e1|92~28lra{9ZuD-+5lP0MrEyA*lOj%`{xPMzC_ zm6`5W*h@YVBmM*7`GWg}pW;Ps5--jP<`}w{E^=hSaq;YTa*dZLf)71+6AZgr`II=e zWi*SwyjA1neL|@7nZH<7KaJ00)q+DlIqo*LKU}sl(;lawGVN1DQ*{DDs@LR8NW!mY z@cfF2qtC%GmbVw;V2K!q%T>9NUwhEbt&?vwbt1MZSBML3L7l$1_-4tY9P!5#6X}POXhvU$BCDL`7)qxd7@EEmu9AsUzP6Sx+aD>%CRyiI}ON+=L!UqQ^1^#zj>1#1J41-^n5+*%um5O?#= z!T$v?nNhKKXv%G_8G_b}kZn_{x~XsK9`^^m0;fO&tozcq<|sFOnQeP*Ru)X&T@cZ= zeA3P47l>9VszEj3w;PVmiG%KCy=YTu>5;#)hwc?54qXz&SO={3K@j3l7zoB1ynahN z3-PMa0%L*R&aa_J%y3BtQ?`fk4hm_@TuYu9*Sclm$s8aji?arU+F^0ZqSDg_%HLrf z?NM(yZlaWSws7^ctO!0bxV++GiDt-ySDV-l6`zY6KK68hB)kuKQ_HP+>3x@5R(litco;c10wPAKnO0jGbhS~TR zij}#3AHuY7q;1Q%A|G z0hqBh$8Pt%Jk~8i^|FtqXg)wVUm*pU`=^l(x^L{%I6Em7Hlo(y!K{BY9#8ksY}nfy zIfrO(Iz;x~5j+?i&PG$X564!=`gC;>9$*Ik(b1q|eT4VHHKFqNDI}Bl9W;=L*QnO* zEFmnN!#0Afd+Yo6Gv_cdY|CtV)u?06>I}s65liGd{w}-R1Sgce^ck+8jrm3%c%R%s z?82$Q{HSBSpCo@@A%?s=fy#%m1DOF`?c5_f5ykiPHGbi5a&mX)?%K(AEJ+4CLw-0K?jIcv z$HRm1PCSoU(k*F)`z0cpG{ALat*gvg&qUfLH|xhUUS3v|{AgrK5>sn%hHMvlNb&PF zswDxaVB>RsmeMEk!7xwzjQsH1qD@f(jfVC{>7k{M=yt9&qDF;frhdOSQ#LPUZS=>sp@{wXsU6K_Bh&?-R(^E2<%^aWOVbU~xZhodq4=a3i z-?UDpt<>(=l%AbKTon|q_`Yy2@*2FVb<7}|RYP$Z zQ`<7aqm)B_Isv;HlMJ!4P`aOv1S-t$=))YZH{Qw zu(ls6TZgB8%pZZN!(i7uZmtj!Tb7NjHxA_R%?k2`RluUAas)4g4f>`mjF1*?x8#D` zW_)Dz&lCg>4V@ z=eLZV-?|b{E3z*}`@{SUFF&uOwx|~0m+??15?M-Y`b4vwJzp|Itj1=~$NPu(OQ#cz z+VrEBBtl=vW_^^O5p?Zsw%xD$Aa=cFe>J7Fj5FIuM=t=?x>Of=(HPr(e7lct_wkVu z^kY)KN1)166}kI{Y?(i(cZ9IubVlp?1NG1e9$z?`f3GR$;PRj$Bt=K}x8D z0HJ0^7Wm5*OE>9aQ4bT?Jczj+sG$bD=V)zH0*1Lcq`rLe6wq9eW`{`47wyR`p z_+_3c5rHo_J1gj;((WoTrkx$66=1AAS1bOejCF!$W9R4y4)zYl2m5=Y{`hEbJe$G2 zqZyj@X5-!gLMT=g(hs>dm51#2dVY+Hb$HMl_ouM8chH|Yd!v20zc;me<2^X*?a%u5 z-~jDAQMu~^h}V$a3Tc6$`{u6qM(~s@{ryJRA6IMg2gKYu?nz&j$E{;)&>Qsj`u)BB z;JSBoJQy7J4*zX+tY0YO{@e=7u+AAihQFs5P?XJg$ z)Da~cCmix^^qc&?jDkxGW%*&Tf|JckYdCEuH8fl>sz*?9T9gY^oavk9RNOa92B;?F zw^9-v>wHeAhprH#YtN3!h1ipC)F}{6LXxQ+hd0lqC@eY5FnG d*q*9VI~rII4__Yse*gdg|NmAohRp)j0RS&jD>VQB literal 9920 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 430601c0348dc3f1ace7b797e26db6b363b8dc5f..c1f825ab3657e738607ad1f641ba577749fdc36c 100644 GIT binary patch delta 1581 zcmV+|2GaSK6_*vT`vQNgrDe(kk)IeDxZoJ#keI3fh8&`U0q5>AbPy94gM(1R;(*iex|8Z$JTINGRO_pbp( z2xpU<*F=ru;$EuwlN}EG7w&)|s0~@&7NVVvLp3;C&OZ4YNyY4$PYA zuR37!5ccp0baRE0Vc_8dr`q{#%f>-Vk{wZ!-Gpm+&v`+^2@#Bw_eHK=j9k(^ii3CtkOkhY%3B(GgG^%-f5>-?54i(C%BC;ilMhkQEnz1Xo&Jt{cj86 zXGN^>{Z0XiUBLJ6C&5=k?;3jVTTJU77ss?~qQ=rNnuRpQ;5%BxgKWg1Kv!KBn8K!( zgruVOjKY7?jMuHe?;`F>@*25H+f8m<5OxbOTFgOQeN(ekd^hq6IZXPQ+r$ldFS`3X z(9yV3GG&7)l3lg6-bsnA32uXww;*MtTt-HhAuhJQAfQg;+qdOdFx$`)+ncv$W^jvq z7F%9KsDq0j%;6r=9U(qM&!N;vM)VdM0Ry3DIIb?}PSEohSX}Rp`B8sJDk7BGrpF?a zo(r9up7fmx56&tD?5%9JTOES;!_1CPi<6`UF9MUZlhp-Q0`$C-Ee7EMUXu?8Fn`bD z+*zySgt>O;*87F_k?u7mBLM+_-G*6xSs8K|X zB0dm`XqOyB&qTy^7R(9pdTZt+9Iv-*PWt~_KtsKF-Z@j<1;9|K&F>F0)RC`_eESyp zIwi-**V|bC_8s-x+DgA_5B+EQ2!9Lb0xUEL6q;|YXYpRE)Q)*=1rC+rTLtUg@*ifm z{8_i;Q1dOQ^VNJ8?gsZ5 z{ylH!tT*v}?w$2Y4o$|}M?X1Ecq-1+aI)0pi!4FeXqo+F+j+AQ<=85>q>ZhJ!kkdG z7bK?NKeEXe5`H+XJ}x<)_#2Urmyz!?)aVptsWt;~wL_F)H_q}QPyD?Msb8nd7RK|Imn@A}G;g$EPD@g32(udK=q_lrx`3h= z7rc2Pyh4iHjI6F-CE+%+E3Kt7)9Sy5TV8#l^q^d4@=c8&Rwk(SJb!g`R&p#S+P=Ha zH>*;V>%Q7+_92^pP83`*2VPcux~g!y#xb&~)3~6H;S-k>|J!=pk{zP@JWl=GrP6D{ za%Qo`?>qHc-Lp-6;%RTcRJCXOXYvPNV(+t2moEY*T+IqJBzQKcx(z=6S2+G)rvD zhA=axDqf<^-9tIdi>oYwcySFQWS4NYmG|qF4OLRUr6}5McV0W^Ysb+YRmgV9w)5W! zRsRksC_|N;(-kUZY4U4M_SW22y8mMJOS&4k+WN fZ`9b2mW(>@bntX~KmA_-00960WVEVsS$Y5f(ybYQ delta 1580 zcmV+{2GjYM6_ypS`vQODRLhhHB0n)QaKSOeAu&|}3^_yx1J2!L=pZI81_#lI8DN2g zmEzEE5aWyNUJH{OoVakceQPaA`9)0!guQcBIz1~^rJq6BV?#v>Y0S`U;%K9C-M

^I7`|EHhK~)>uFuSzoz^s}6 zs$*vzJNGPhp04Y^^&)Fj3EnZ<`8y5_P7sP9*bdr5Ofu`lLyE9sje=9V~x zOrYcXR#ct{ge}dZxqZoRt6y;{JfrcnQ)&I62 zepbX9-|rNV*adw5eiD2&^sb@zzQwdor#Plv6E&8G(JZ7X2H(*l9%Lg91-k08z!WyM zBqSBJXB2;yX1s0%eiw09lGn&p+HP{=g0NeN(P9qb>YJLS;=7So$YIjY+$L_wd(qwB zfsV$Nk|`TZk?g9ib-N|DCb$h!-hz~oav2$2hPc@Jf`B@WZ{L<^w8PQv41Pp|p;kYiMJ3-H5U~#=W=12V@sfbW!n;wfy zdMRlaij$-TF9PG^lhp-Q0_3EVEe7EMT9Xe4Fn{0T z+*!#9bM4Tt1+1SQN{Ba-AzD~Xtq}nehPD|5Gh(OHJ#{SH3H#lJSh)9To;vkWqlg+s zd>|BYUUCpU6A{;0Fek+8t(lW>yxy`o>Hlv54fW!A=S+1M07IcRzdy`SN4`4p?OEhI zYnL1&UvFdm+jrD&Yb*V#J@lXHBY!NM3$V~2P-wonp2d5uQak3g6*yFeZxyU}%YT^N z@@JirL(R9K)_X~2LRbb92b{Z0cKam_ymiN4hLt6|{*n$oA|54DW0+Y5kqDxD&6#yH z&{wXI8Wa6PC6b^NWurUhkqJ`d5fDK`ct#Rz&K!vpN7}uU5mBHo6p@cetAD!_xEtJK z`1ib>v);t_xp&qrIW!q>AN}Mw;i))N!^u*YFR}z>qhs^M@i!tLFC*V)sL?6PQf&s}YKJJpZlYIMlxlXWy|-$0mbL9` zbWY6bum5a5wVHOg)NFQY4S#=&h98%l4AgTHA%Ha$JR;nfen-u1LcQmV)!O|bwELvw z+|F!HOkd|Prz>6pd&K{qpZI$jQol}@EsW9_ayHoG7?r4!o@RbXDPYjbmg}r*T0Y!zV5&{-*@V@x@VjC#M9n>scO&m&*Trl#NKoD%oJ{N$+mSt9VB%35}4AWNN|ToQJn#0 zqbN!+g^1$_kP;k3=YOp=(3R2yFyz7m2Ms2Op#MbQV6+fH7u*3G9XyYzJw}u{REwzl z@B&v+Ti-qMiTw!9ycZR&MhJ5dL0@#OF_Gg&R&h3S*rxtaME#Vqeo7fZ&9jozEU_&c z!pxYec!@T559Kf~uCfH;#WjqOUBcB?-mh0SR7v@kqG-3>?OmL&9Y=RmA Date: Thu, 5 Aug 2021 13:27:43 +0100 Subject: [PATCH 4/5] implement DagstoreInitializeAll. --- api/api_storage.go | 25 ++++-- api/docgen/docgen.go | 2 +- api/proxy_gen.go | 23 +++-- build/openrpc/full.json.gz | Bin 25246 -> 25245 bytes build/openrpc/miner.json.gz | Bin 10367 -> 10375 bytes build/openrpc/worker.json.gz | Bin 2711 -> 2712 bytes documentation/en/api-v0-methods-miner.md | 31 +++++++ node/impl/storminer.go | 103 ++++++++++++++++++++--- 8 files changed, 161 insertions(+), 23 deletions(-) diff --git a/api/api_storage.go b/api/api_storage.go index 55ed033aa..c783af106 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -197,8 +197,17 @@ type StorageMiner interface { // error. DagstoreRecoverShard(ctx context.Context, key string) error //perm:write + // DagstoreInitializeAll initializes all uninitialized shards in bulk, + // according to the policy passed in the parameters. + // + // It is recommended to set a maximum concurrency to avoid extreme + // IO pressure if the storage subsystem has a large amount of deals. + // + // It returns the result for each shard it attempted to initialize. + DagstoreInitializeAll(ctx context.Context, params DagstoreInitializeAllParams) (<-chan DagstoreShardResult, error) //perm:write + // DagstoreGC runs garbage collection on the DAG store. - DagstoreGC(ctx context.Context) ([]DagstoreGCResult, error) //perm:admin + DagstoreGC(ctx context.Context) ([]DagstoreShardResult, error) //perm:admin // RuntimeSubsystems returns the subsystems that are enabled // in this instance. @@ -380,9 +389,13 @@ type DagstoreShardInfo struct { Error string } -// DagstoreGCResult is the serialized form of dagstore.GCResult that we expose -// through JSON-RPC to avoid clients having to depend on the dagstore lib. -type DagstoreGCResult struct { - Key string - Error string +// DagstoreShardResult enumerates results per shard. +type DagstoreShardResult struct { + Key string + Success bool + Error string +} + +type DagstoreInitializeAllParams struct { + MaxConcurrency int } diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 8e16e2d42..725ea2bed 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -276,7 +276,7 @@ func init() { api.SubsystemSectorStorage, api.SubsystemMarkets, }) - addExample(api.DagstoreGCResult{ + addExample(api.DagstoreShardResult{ Key: "baga6ea4seaqecmtz7iak33dsfshi627abz4i4665dfuzr3qfs4bmad6dx3iigdq", Error: "", }) diff --git a/api/proxy_gen.go b/api/proxy_gen.go index d32874890..f5df79d0e 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -603,7 +603,9 @@ type StorageMinerStruct struct { CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"` - DagstoreGC func(p0 context.Context) ([]DagstoreGCResult, error) `perm:"admin"` + DagstoreGC func(p0 context.Context) ([]DagstoreShardResult, error) `perm:"admin"` + + DagstoreInitializeAll func(p0 context.Context, p1 DagstoreInitializeAllParams) (<-chan DagstoreShardResult, error) `perm:"write"` DagstoreInitializeShard func(p0 context.Context, p1 string) error `perm:"write"` @@ -3577,15 +3579,26 @@ func (s *StorageMinerStub) CreateBackup(p0 context.Context, p1 string) error { return ErrNotSupported } -func (s *StorageMinerStruct) DagstoreGC(p0 context.Context) ([]DagstoreGCResult, error) { +func (s *StorageMinerStruct) DagstoreGC(p0 context.Context) ([]DagstoreShardResult, error) { if s.Internal.DagstoreGC == nil { - return *new([]DagstoreGCResult), ErrNotSupported + return *new([]DagstoreShardResult), ErrNotSupported } return s.Internal.DagstoreGC(p0) } -func (s *StorageMinerStub) DagstoreGC(p0 context.Context) ([]DagstoreGCResult, error) { - return *new([]DagstoreGCResult), ErrNotSupported +func (s *StorageMinerStub) DagstoreGC(p0 context.Context) ([]DagstoreShardResult, error) { + return *new([]DagstoreShardResult), ErrNotSupported +} + +func (s *StorageMinerStruct) DagstoreInitializeAll(p0 context.Context, p1 DagstoreInitializeAllParams) (<-chan DagstoreShardResult, error) { + if s.Internal.DagstoreInitializeAll == nil { + return nil, ErrNotSupported + } + return s.Internal.DagstoreInitializeAll(p0, p1) +} + +func (s *StorageMinerStub) DagstoreInitializeAll(p0 context.Context, p1 DagstoreInitializeAllParams) (<-chan DagstoreShardResult, error) { + return nil, ErrNotSupported } func (s *StorageMinerStruct) DagstoreInitializeShard(p0 context.Context, p1 string) error { diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 725fc80f9712c473dbc57b5b00ef3495d49f8cb6..38b71652ac975428c1eee570fe2fab413fc52ae1 100644 GIT binary patch delta 22048 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 Af&c&j delta 22177 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 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 93de3a98e6f711e75cc1c88c4f4d07ccab6daa33..89341da7db1de82d442bac0ef551ebcf82f77a0e 100644 GIT binary patch delta 9234 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 delta 9199 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 F0RWhF&$s{p diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index c1f825ab3657e738607ad1f641ba577749fdc36c..cb039b1ea4bc677f6663173ec1e0a9a79d450d4c 100644 GIT binary patch delta 1421 zcmV;81#_5Dh5FKNyw_QjlTC4E!G+!CjdsZ_-={EJI9?@9xI z^hDf1`{t_=;{t9#@<7XHFX3O>xlawfNy6~!%$VX8%YU?h=Xsr3=4!eifkDp^_fY#v77qBpWrsaD2CoDMY)-5pdrdn^}j8MpB1sj_d5k7b^+hN zp9EhGy=&;bZ!xWRRvgo=i5g48Xcp2GgYRe&53&)50$p`kU<#XB5|WDAGk*$8GhVj> zzl*pl$!p{)Z8y1bLD((CXfX$I^-axE@!iNPi5eyag#EbBz~Xv$%#Zp*QW2rdHa!-Z^jzrN^rY`pcyLxJ zU~gr!-Rcm$A7*yiDmJqlaDhnp#v~B)y*~@of9JE9g|4@?Qp-zNuhw=7d+x$&t$rF) zFA3`<;a)EZ&)Q}2Gu-rJ8a6diS+pbr8vFgL%fl!F76(AxNO9aVi8*gEE4u6AkT%PO zHqozYtWo5KVq99ziq>9Y<7Q^NT?;VO_aa~UHE{F$jN`&o!f%ddUH6?E*LkOtEe76y zW6XTkDmlcN;JJMGu8NsE=KF4RX$&KO4b<8&x3hhi+o^N7yJnla0B!S1{Qlrx9p~ye zw{LN-U2?))JM?P->!*hj;*Dg87FJVhM8JfhZ3e-N*y(gn9Se8Des>`j?tPl4PJPrU zqDB!P2t{;C4x(ow;yMfFgm}F*a}th!*IPCx{r@eXpwNG8UzZ>H`lXxuT^TtytV>|%J8j%^=|nO zvs?bGS8}NN7Swt#$xH~#VB&ytcgb$Qq=C2Y_{*@eWY=HPp-04{L~0B(s~{3aL3FP< zvyKM($`w*$qJOAF5|pBBbjLh0L5e&AB4`NDNP^9oBaz}ryLU1o3iO2{@)2oucLH~V zdkp`cw{zB;_&)c}j!TnI2sHsIlZ6O60nd}b2pj=klidhie>-(_-YPkk6K&sJ=bKe2 z%5`7uHT#gwKPL*Vm;)~>K3!F~UE>(p)M;E$$MA_uivMjrZpjW&eIBQN?o#PBVL7wd z;`g0;t?t<-KJm1-U#i-({WJLkFtPVsJu`)yT(WIlPzMR!y#%JTC=%S^QB-F@*(iz< zOd;Yp0;B{7f6;ks4RodS01UbCz(IovBIrNSHyABM&;@tEMhDMhYL5|R4%H&+KD@wH z)Yf;8d}2R>Gw(%(s}aH+M9>#qYfR+0kyV_{9JZ-H6j48=te;XwP_tcfnkBYnLzo#; z6)(}|?x7s!#Z{I-ytsxDvP-zy%KP=ohAJuFQWWjBU%Q?2wd3fHDrBc*+xhQ=s(%L* zl%Yz_=?ayyH2F0rdu#41-G8zAC0z|%Za+#CFhyOY#vlL@0fXW8t&CH)`xh bOGce{kMVSRKmA_-00960!w23lS$Y5fatXa& delta 1421 zcmV;81#owtis>1R;(*iex|8Z$JTINGRO_pbp(2xpU< z*F=ru;$EuwlN}EG7w&)|s0~@&7NVVvLp3;C#zjk zQZ~XVrlb;K$!1_?&OcP+%i~Y5Hd8gytdZuPA7!5ccp

0baRE0Vc_8dr`q{#%f>-Vk{w zZ!-Gpm+&v`+^2@#Bw_eHK=j9k(^ii3C ztkOkhY%3B(GgG^%-f5>-?54i(C%BC;ilMhkQEnz1Xo&Jt{cj86XGN^>{Z0XiUBLJ6 zC&5=k?;3jVTTJU77ss?~qQ=rNnuRpQ;5%BxgKWg1Kv!KBn8K!(gruVOjDNz?jMuHe z?;`F>@*25H+f8m<5OxbOTFgOQeN(ekd^hq6IZXPQ+r$ldFS`3X(9yV3GG&7)l3lg6 z-bsnA32uXww;*MtTt-HhAuhJQAfQg;+qdOdFx$`)+ncv$W^jvq7F%9KsDq0j%;6r= z9U(qM&!N;vM)VdM0Ry3DIDf9_PSEohSX}Rp`B8sJDk7BGrpF?ao(r9up7fmx56&tD z?5%9JTOES;!_1CPi_Po?Tp$v@F$u(c@6Q7D-}x+Nq3dm})bbM6tF@iNp1ZJGtDnZy zOTv0dxYtX-4;nE(YFz zXUu$Fa)>j*bNTRH6*G6t_uc5y7)JgYsI_5kXZtX>Q|EAZ%{F%d+UAw`{lUFD&ed^l z&*I!!tK@{acIejv)=v*5#2d*FEv%;2h=2)0+YEvkvD4|EIu`DP{q906-1{_7o%*Oz zM2#Xo5Q=D*97NAV#B~)rAn zX1DxVx8zXsEvWTgl9>>e!NdXQ?vmYpNds@)@t0v`$*#YoLyw3@iPRWoRzW02g6Ljz zW*rUml`EviME_8UBq&AM=#F`0f)sfKM9>hPkp!DFM?Z|AHx@qO-{^-7aa2sHsNlZFU70Z)^`2pj=glimnje>`<`R&p#S+P=HaH>*;V z>%Q7+_92^pP83`*2VPcux~g!y#xb&~)3~6H;S-k>|J!=pk{zP@JWl=GrP6D{a%Qo` z?>qHc-Lp-6;%RTcRJCXOXYvPNV(+t2moEY*T+IqJBzQKcx(z=6S2+G)rvDhA=ax zDqf<^-9tIdi>oYwcySFQWS4NYmG|qF4OLRUr6}5MUw1p_Ysb+YRmgV9w)5W!RsRks zC_|N;(-kUZY4U4M_SW22y8mMJOS&4k+WNZ`9b2 bmW(>@bntX~KmA_-00960WVEVsS$Y5fMSIkM diff --git a/documentation/en/api-v0-methods-miner.md b/documentation/en/api-v0-methods-miner.md index 0bd212a3d..6b42ec53a 100644 --- a/documentation/en/api-v0-methods-miner.md +++ b/documentation/en/api-v0-methods-miner.md @@ -20,6 +20,7 @@ * [CreateBackup](#CreateBackup) * [Dagstore](#Dagstore) * [DagstoreGC](#DagstoreGC) + * [DagstoreInitializeAll](#DagstoreInitializeAll) * [DagstoreInitializeShard](#DagstoreInitializeShard) * [DagstoreListShards](#DagstoreListShards) * [DagstoreRecoverShard](#DagstoreRecoverShard) @@ -363,6 +364,36 @@ Inputs: `null` Response: `null` +### DagstoreInitializeAll +DagstoreInitializeAll initializes all uninitialized shards in bulk, +according to the policy passed in the parameters. + +It is recommended to set a maximum concurrency to avoid extreme +IO pressure if the storage subsystem has a large amount of deals. + +It returns the result for each shard it attempted to initialize. + + +Perms: write + +Inputs: +```json +[ + { + "MaxConcurrency": 123 + } +] +``` + +Response: +```json +{ + "Key": "baga6ea4seaqecmtz7iak33dsfshi627abz4i4665dfuzr3qfs4bmad6dx3iigdq", + "Success": false, + "Error": "\u003cerror\u003e" +} +``` + ### DagstoreInitializeShard DagstoreInitializeShard initializes an uninitialized shard. diff --git a/node/impl/storminer.go b/node/impl/storminer.go index 4b766b6f6..fbfb0cff7 100644 --- a/node/impl/storminer.go +++ b/node/impl/storminer.go @@ -7,6 +7,7 @@ import ( "net/http" "os" "strconv" + "sync" "time" "github.com/filecoin-project/dagstore" @@ -616,6 +617,87 @@ func (sm *StorageMinerAPI) DagstoreInitializeShard(ctx context.Context, key stri return nil } +func (sm *StorageMinerAPI) DagstoreInitializeAll(ctx context.Context, params api.DagstoreInitializeAllParams) (<-chan api.DagstoreShardResult, error) { + if sm.DAGStore == nil { + return nil, fmt.Errorf("dagstore not available on this node") + } + + // prepare the thottler tokens. + var throttle chan struct{} + if c := params.MaxConcurrency; c > 0 { + throttle = make(chan struct{}, c) + for i := 0; i < c; i++ { + throttle <- struct{}{} + } + } + + info := sm.DAGStore.AllShardsInfo() + var uninit []string + for k, i := range info { + if i.ShardState != dagstore.ShardStateNew { + continue + } + uninit = append(uninit, k.String()) + } + + if len(uninit) == 0 { + out := make(chan api.DagstoreShardResult) + close(out) + return out, nil + } + + var wg sync.WaitGroup + wg.Add(len(uninit)) + + // response channel must be closed when we're done, or the context is cancelled. + // this buffering is necessary to prevent inflight children goroutines from + // publishing to a closed channel (res) when the context is cancelled. + out := make(chan api.DagstoreShardResult, 32) // internal buffer. + res := make(chan api.DagstoreShardResult, 32) // returned to caller. + + go func() { + close(res) // close the caller channel. + + pending := len(uninit) + for pending > 0 { + select { + case res <- <-out: + pending-- + continue + case <-throttle: + // acquired a throttle token, proceed. + case <-ctx.Done(): + return + } + + next := uninit[0] + uninit = uninit[1:] + + go func() { + err := sm.DagstoreInitializeShard(ctx, next) + throttle <- struct{}{} + + r := api.DagstoreShardResult{Key: next} + if err == nil { + r.Success = true + } else { + r.Success = false + r.Error = err.Error() + } + + select { + case out <- r: + case <-ctx.Done(): + } + }() + } + + }() + + return res, nil + +} + func (sm *StorageMinerAPI) DagstoreRecoverShard(ctx context.Context, key string) error { if sm.DAGStore == nil { return fmt.Errorf("dagstore not available on this node") @@ -646,7 +728,7 @@ func (sm *StorageMinerAPI) DagstoreRecoverShard(ctx context.Context, key string) return res.Error } -func (sm *StorageMinerAPI) DagstoreGC(ctx context.Context) ([]api.DagstoreGCResult, error) { +func (sm *StorageMinerAPI) DagstoreGC(ctx context.Context) ([]api.DagstoreShardResult, error) { if sm.DAGStore == nil { return nil, fmt.Errorf("dagstore not available on this node") } @@ -656,17 +738,16 @@ func (sm *StorageMinerAPI) DagstoreGC(ctx context.Context) ([]api.DagstoreGCResu return nil, fmt.Errorf("failed to gc: %w", err) } - ret := make([]api.DagstoreGCResult, 0, len(res.Shards)) + ret := make([]api.DagstoreShardResult, 0, len(res.Shards)) for k, err := range res.Shards { - ret = append(ret, api.DagstoreGCResult{ - Key: k.String(), - Error: func() string { - if err == nil { - return "" - } - return err.Error() - }(), - }) + r := api.DagstoreShardResult{Key: k.String()} + if err == nil { + r.Success = true + } else { + r.Success = false + r.Error = err.Error() + } + ret = append(ret, r) } return ret, nil From 28c550bbaefcb2120ec48f98892c24540b053cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Kripalani?= Date: Thu, 5 Aug 2021 14:23:06 +0100 Subject: [PATCH 5/5] add lotus-miner dagstore initialize-all command. --- cmd/lotus-miner/dagstore.go | 51 +++++++++++++++++++++++++++++ documentation/en/cli-lotus-miner.md | 15 +++++++++ 2 files changed, 66 insertions(+) diff --git a/cmd/lotus-miner/dagstore.go b/cmd/lotus-miner/dagstore.go index 52a52f2cb..ab0f0cee7 100644 --- a/cmd/lotus-miner/dagstore.go +++ b/cmd/lotus-miner/dagstore.go @@ -7,6 +7,7 @@ import ( "github.com/fatih/color" "github.com/urfave/cli/v2" + "github.com/filecoin-project/lotus/api" lcli "github.com/filecoin-project/lotus/cli" "github.com/filecoin-project/lotus/lib/tablewriter" ) @@ -17,6 +18,7 @@ var dagstoreCmd = &cli.Command{ Subcommands: []*cli.Command{ dagstoreListShardsCmd, dagstoreInitializeShardCmd, + dagstoreInitializeAllCmd, dagstoreGcCmd, }, } @@ -94,6 +96,55 @@ var dagstoreInitializeShardCmd = &cli.Command{ }, } +var dagstoreInitializeAllCmd = &cli.Command{ + Name: "initialize-all", + Usage: "Initialize all uninitialized shards, streaming results as they're produced", + Flags: []cli.Flag{ + &cli.UintFlag{ + Name: "concurrency", + Usage: "maximum shards to initialize concurrently at a time; use 0 for unlimited", + Required: true, + }, + }, + Action: func(cctx *cli.Context) error { + concurrency := cctx.Uint("concurrency") + + marketsApi, closer, err := lcli.GetMarketsAPI(cctx) + if err != nil { + return err + } + defer closer() + + ctx := lcli.ReqContext(cctx) + + params := api.DagstoreInitializeAllParams{ + MaxConcurrency: int(concurrency), + } + + ch, err := marketsApi.DagstoreInitializeAll(ctx, params) + if err != nil { + return err + } + + for { + select { + case res, ok := <-ch: + if !ok { + return nil + } + if res.Success { + _, _ = fmt.Fprintln(os.Stdout, res.Key, color.New(color.FgGreen).Sprint("SUCCESS")) + } else { + _, _ = fmt.Fprintln(os.Stdout, res.Key, color.New(color.FgRed).Sprint("ERROR"), res.Error) + } + + case <-ctx.Done(): + return fmt.Errorf("aborted") + } + } + }, +} + var dagstoreGcCmd = &cli.Command{ Name: "gc", Usage: "Garbage collect the dagstore", diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 66c3faff1..15bff5f6d 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -1012,6 +1012,7 @@ USAGE: COMMANDS: list-shards List all shards known to the dagstore, with their current status initialize-shard Initialize the specified shard + initialize-all Initialize all uninitialized shards, streaming results as they're produced gc Garbage collect the dagstore help, h Shows a list of commands or help for one command @@ -1047,6 +1048,20 @@ OPTIONS: ``` +### lotus-miner dagstore initialize-all +``` +NAME: + lotus-miner dagstore initialize-all - Initialize all uninitialized shards, streaming results as they're produced + +USAGE: + lotus-miner dagstore initialize-all [command options] [arguments...] + +OPTIONS: + --concurrency value maximum shards to initialize concurrently at a time; use 0 for unlimited (default: 0) + --help, -h show help (default: false) + +``` + ### lotus-miner dagstore gc ``` NAME: