From c8de9d42b8ad42def8217127a9d29ecfb6488f09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Fri, 16 Sep 2022 23:45:23 +0200 Subject: [PATCH] sealing: Address review --- api/api_storage.go | 6 ++--- api/api_worker.go | 2 +- api/docgen/docgen.go | 2 +- api/proxy_gen.go | 6 ++--- build/openrpc/full.json.gz | Bin 28281 -> 28424 bytes build/openrpc/gateway.json.gz | Bin 4943 -> 5080 bytes build/openrpc/miner.json.gz | Bin 15968 -> 16025 bytes build/openrpc/worker.json.gz | Bin 5256 -> 5260 bytes gen/main.go | 2 +- itests/sector_import_full_test.go | 8 +++---- itests/sector_import_simple_test.go | 8 +++---- node/config/doc_gen.go | 2 +- storage/paths/fetch.go | 1 + storage/pipeline/cbor_gen.go | 20 ++++++++-------- storage/pipeline/receive.go | 29 +++++++++++++++++++----- storage/pipeline/types.go | 6 ++--- storage/sealer/ffiwrapper/sealer_cgo.go | 2 +- storage/sealer/manager.go | 6 ++--- storage/sealer/mock/mock.go | 2 +- storage/sealer/sched_test.go | 2 +- storage/sealer/storiface/cbor_gen.go | 8 +++---- storage/sealer/storiface/storage.go | 6 ++--- storage/sealer/storiface/worker.go | 2 +- storage/sealer/teststorage_test.go | 2 +- storage/sealer/worker_local.go | 2 +- 25 files changed, 71 insertions(+), 53 deletions(-) diff --git a/api/api_storage.go b/api/api_storage.go index 5d7455340be..0cccbeb7a17 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -563,11 +563,11 @@ type RemoteSectorMeta struct { // Sector urls - lotus will use those for fetching files into local storage // Required in all states - DataUnsealed *storiface.SectorData + DataUnsealed *storiface.SectorLocation // Required in PreCommitting and later - DataSealed *storiface.SectorData - DataCache *storiface.SectorData + DataSealed *storiface.SectorLocation + DataCache *storiface.SectorLocation //////// // SEALING SERVICE HOOKS diff --git a/api/api_worker.go b/api/api_worker.go index 4b56d11547e..cca929d39c9 100644 --- a/api/api_worker.go +++ b/api/api_worker.go @@ -49,7 +49,7 @@ type Worker interface { MoveStorage(ctx context.Context, sector storiface.SectorRef, types storiface.SectorFileType) (storiface.CallID, error) //perm:admin UnsealPiece(context.Context, storiface.SectorRef, storiface.UnpaddedByteIndex, abi.UnpaddedPieceSize, abi.SealRandomness, cid.Cid) (storiface.CallID, error) //perm:admin Fetch(context.Context, storiface.SectorRef, storiface.SectorFileType, storiface.PathType, storiface.AcquireMode) (storiface.CallID, error) //perm:admin - DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorData) (storiface.CallID, error) //perm:admin + DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorLocation) (storiface.CallID, error) //perm:admin GenerateWinningPoSt(ctx context.Context, ppt abi.RegisteredPoStProof, mid abi.ActorID, sectors []storiface.PostSectorChallenge, randomness abi.PoStRandomness) ([]proof.PoStProof, error) //perm:admin GenerateWindowPoSt(ctx context.Context, ppt abi.RegisteredPoStProof, mid abi.ActorID, sectors []storiface.PostSectorChallenge, partitionIdx int, randomness abi.PoStRandomness) (storiface.WindowPoStResult, error) //perm:admin diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index e078cbe0fc9..cd1f03337e6 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -345,7 +345,7 @@ func init() { "Authorization": []string{"Bearer ey.."}, }) - addExample(map[storiface.SectorFileType]storiface.SectorData{ + addExample(map[storiface.SectorFileType]storiface.SectorLocation{ storiface.FTSealed: { Local: false, URL: "https://example.com/sealingservice/sectors/s-f0123-12345", diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 04e79c2de57..935eaca9483 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -955,7 +955,7 @@ type WorkerStruct struct { DataCid func(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 storiface.Data) (storiface.CallID, error) `perm:"admin"` - DownloadSectorData func(p0 context.Context, p1 storiface.SectorRef, p2 bool, p3 map[storiface.SectorFileType]storiface.SectorData) (storiface.CallID, error) `perm:"admin"` + DownloadSectorData func(p0 context.Context, p1 storiface.SectorRef, p2 bool, p3 map[storiface.SectorFileType]storiface.SectorLocation) (storiface.CallID, error) `perm:"admin"` Enabled func(p0 context.Context) (bool, error) `perm:"admin"` @@ -5551,14 +5551,14 @@ func (s *WorkerStub) DataCid(p0 context.Context, p1 abi.UnpaddedPieceSize, p2 st return *new(storiface.CallID), ErrNotSupported } -func (s *WorkerStruct) DownloadSectorData(p0 context.Context, p1 storiface.SectorRef, p2 bool, p3 map[storiface.SectorFileType]storiface.SectorData) (storiface.CallID, error) { +func (s *WorkerStruct) DownloadSectorData(p0 context.Context, p1 storiface.SectorRef, p2 bool, p3 map[storiface.SectorFileType]storiface.SectorLocation) (storiface.CallID, error) { if s.Internal.DownloadSectorData == nil { return *new(storiface.CallID), ErrNotSupported } return s.Internal.DownloadSectorData(p0, p1, p2, p3) } -func (s *WorkerStub) DownloadSectorData(p0 context.Context, p1 storiface.SectorRef, p2 bool, p3 map[storiface.SectorFileType]storiface.SectorData) (storiface.CallID, error) { +func (s *WorkerStub) DownloadSectorData(p0 context.Context, p1 storiface.SectorRef, p2 bool, p3 map[storiface.SectorFileType]storiface.SectorLocation) (storiface.CallID, error) { return *new(storiface.CallID), ErrNotSupported } diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index d71446f65e6c5d0ad2be9ca2632365942a8d33bd..a8f16011a9c1b9424393842c633d5ddaabae5853 100644 GIT binary patch delta 27068 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 delta 26943 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 un|4BCb8FgWW`F37(gTH@1~%s$U|tkk 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 N|NjdmZ0;lS008OX!tek9 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 0138f28c17ff4fd91e898511a9452d3fe977e5e8..75b4eeaaf87c49d4acc624efd2e3735e7f39a040 100644 GIT binary patch delta 12279 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 AiU0rr diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 90167b6e09ec40c5a7dd6f5a19b1b5c28082a2fa..d73bda90317ed7ea9db5e25e1406858fd053f91b 100644 GIT binary patch delta 4522 zcmV;b5moMpDU2zw4Fi9#sjN+D?!gS}44a(PBg~b@Jn~qCdKilcYi)`|>>9P<5ZT;e zS4q$*tSax8)I=#>r0Y&2t#IAKbqm*Bi|f|49M^3>63d2WFczViae47n0lZVmiEUf{ zym0}Yn`9y;C}aC~$roR312O@5-G55l#*iSZW1<)Bv&4BVfz& zAxP?&?^QCtl1inrCoGS(9qQ}LuMrOyruJQ&hoFVY%tP)2HqeRZSLmI1ovG4OwN6jf z^u8oZ|3uJ4t|y(6rDd&|E;^7h4t=pCx!A6ek|3WKYivp$bsEf&r>DZsp zTB3|MS^Ahn%CLXuws|+Bz7D&wM4?r+R*)eg(BL=vM+K7UG@9hPg6m&wKDL zAUFAZB+Q&mLV_OS;2b+q4ki~_b{~S&QIM;psx;_ltI|IZHRha(~cXGPtxzxsfQ>VDOHyxfA`G)y^hCj zaP<17#4>-~9@JN@&niZO2;ddK``UnaG%N<*a4f1JZjkv{P#cumG{$b*D8RL4rYgWy zfU5vk0j|db*YPMDT)!ZKTu4Lg_!nCJ!?hO`;!1MM;e}iSo82>Pasq8`^-W=JQF{ga zw#=B@0KcJL?_cfqjf7BeZX!bQ6lbh_pJ5ZYta^VB5y~92hpcHQNHf7?78o3%0Gg(Y zJP(-wZ%gZfbIRQM)OHuh1d|nj;LqR-CK*6*W}Cy$6t(0D^BU)f{^BZhSHRNjhPA4yP-1@)H^eYLA{dAFMQ}4d_Jk?$N^e z+x~y?A7{C;7tY_4#T2cknm)zaay3{kk*+@I(ps!j3q%))?j!m@85bk^UznKom?#eHx4qgv?sv(0|v&hdY>5n)x?ON0p~v%{G1riACB!kHBK=FVY-b|b}? zV!j*U3#f0Z=&Fo2(oxSE4l3xbpu2+Z3c8y`cV91cOu6k0qfDnLWrkebu(FLDjmFiW zaxLXUS}&Uqos+4}Nq|_E><^`q2V$_4MQntDJpUTqtjMy%^M4r8Ljm@DLvJ`pnBz;4Ri}}jK{wJrpDzgXI9#hHi zkE=)M#Qxa5J-fK}f?r?!UpH|9?h;iwwntAMl#@q)?&)mIRtYCF-_XKlO;r_rBun4m zkNATx7uVMmTli=2CGu&{Pji0(U51ht_7)kBzFb^Or;03nf*#7M;mjt+(sdD`(y6kR zrCvgmkv19)l(;n8XEh2GttTmynvkid47H)&8>xCstlprf40`HN8`LV>KncIh^>G-EvS9keJ z+g$zu0@X1aC>YWMBujtPw$J

R2BShU$0_6E6Dr`GiaQ{!xE49&37kti}g4^7#3L ztLXWg(E5Wse?wYdb_#G5txtkLtF%4|0WH${2ml!NVu9&NuU-I1Jvuf3lojat0idj8 zoB+@&;c6iN%?Vc@0359Kbpt>hTHg!+)HHTA%mSJdu7){4Q^J3x0YDXtK5u0|U@M+d z^I~IN`vIz=D?Meb5BdYKAJ8TPcqRJ*M>Bx3`vJ!?fCwy@kU|5SS*XyeSymD!S|wZ( zFj^(ti&`>jm2gRvXq9kD+-Q|>NdRe;a4%{#sYSv?P-E(!#+-o}Jw+e&hl9k#Cwx}p ztS6fpBthc1(xiW<5yzA!y>N6)Y0@i2$CM`N=#MK+(z72|n)F=Yn9`&df{rOodgbSM z(nP$ol%6{7>uOJrPs3w#z4~P<>A+P* z?T?j_u8tBNrww&&H12Equ-~p_#=GOYTh`1GujaKx&Ly0@<=EKsXOyo#C^%gG>&Ajw)W3$+{sz@Q z#rRvM{z*`1m-@$0!G1t)aLdEe|Ke9f1Jwu)A{t0U1GNJbL^RMbg?ky%Kp9{lB7>e~ zrXV7NS{#2EAtHlBWRQpq3LwHoGem;B;_rhi*u_SI_;Bo5qJUcT360oF5Fd^`Q>agi zv_1v{kx7C;0f7Pn1q2ER6nJAOuq5o4aR1!yzcrB+BAQ4<6NzY|7U_JuqlwmQ&U+$u zXQV!*&!kQrlbSwiI&qRI&ne#i$*5%xC;k$q+#Y}Rof0&8Yq@snX8rN|{0v7YPxvgZ}YC?s^N0y6fi|;0sqG$q@6o2%tZCS; zlB~DkjYP?LQ=|#JSk_k!3P-`vbp|^P=Hkg>?wHkTMfJ*zYJ#Ky>@1p&{~1VIU-@YTjGBN z^#PAUmwLD4Ku@x5bZU5_Z%SNTRf;V%aphZUTKTf3m7z}WpG9U~Zx}D@44c4Z z)q99g=IT6TO*=uF2_sHMSOzpr7kPgkG6CL})&=L3ImoH)E|3W(D*(Zt$PIu5f-~Dh z26*>4$Hp9BVq(@rR>xv#QEafc9S0is$lTUK{iPmAOaQ?*mTC^Yc{e`Et>+5N2nPyj zRSnmHijir@$fWPX6eDxQkrAs)Vs+`YtuBoQW!Z2Vz`Y zDXD9`#9y#~!Tw(|`yUUp+5aW75cJTsAKZ^jPUfG;&CB|uyRDay%y@&Q64f_F;M1)X z!BZ_W*ESILls1=*8u)!W^$>q$Bc2VwE#|i&+?VOEiEe}{KJ13nd@#tKP>Bo8&_|fXIy`gRaI^qi{#~J zu1q;EFf!0NncCdEHBxnRtTo;~!CBj3|1IOJF+DEJST`J1Q)S7|d=_+a9m`MES#MO5 z!iBz6bgJOMf&&W^p;1ry|X{_Zk+>|-P} zD1Jbx6nYZd6MN4=C1-!wxjcDHpl^>G8vdW+KxoMV}XK z)fQU&3vX?D`%|#FW3joCd!IY-DCrot`!Y2R2jfF^mdELhca`&vXtW!6a@M)%BFMQQ z=P#L@>%D#CoHy<>lC%1$86jW&eMu|x>Bb^A;|&xGXf3nQHgJFFEJc2ayiy>ZK)lz6 zc>SDnqL^F1a8dOYsa@up7Nri`PKt}vBpAjT9$jA&nAj2U($T|2c2Dw#c=ex|+C+IuOuQo^D$?z=9M9kD%Xs~TyB{>@X5~+#6K!Jg;4FiWc zXW~^m4Daw$@S1-*{%+s7cVF>6N}S~uN|#2%bjtZs3_-5WXK zZaB(0;qD62Ux}{`+;+3cm`4~Vwrv%Bbg(Pn&<_t{q7;05u&ZzZ-FpwvIoenS^Z*Lp zoouY53x2aHpmWIn!5;7srI^fa$pWqbh4%TWKr8b5Vly;{nsn1)7J!{%64@hw4Vn;GYvgL5@sQqz9qMw&2NCe-AcNto+kBiYrS zZ61HPcs4^W@WO-#qr+R%mywe5<#hPf(?`?vPd?^Vn|SX0>A8!^tVogKH!x6r+fpja}#AZf{PjdpVygh6?Z*QE1FRW^_s^wccju^oohxHEDBHnnq5S ze{+l2IVx)jWJ!7P(TGdJT$5*Z4dfuljfesv?+j(039=uyX=VrG|cmDY< z7`MV@ib$aaYZW;q^Q~OOHKtM)--=h-OzC=otTiq69>|{zi?S_NnTB1 z$89x+eqQKkpb?kIM1}?3L#!fRMxN9EB|7H*KGnYEh^*3U!hw{?&$8_l>w_oDL$8b$g?lbyS>xGkbdVG5_6PLtKL?9noR%5M znM;4d5VR=t?mfSn;M&7nTa1)J^Nwgsau&J66rgjvR1^(?;I_Gg*SdfAv?6;}QkcHX>||qCOiMSWb^5g4GX*J( zP_4!bCn6+zzqFz&+DNZ@%kbI+EV%f&M2bP3l3(z@o5r8fNBnTqb^nkl0#1HWlQ679srH-Wa`fmOI0RRC1|4Cyb IL2oeu0L9hTivR!s delta 4518 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 E0ORPNRR910 diff --git a/gen/main.go b/gen/main.go index b7aaa0a9a79..02548e18f2d 100644 --- a/gen/main.go +++ b/gen/main.go @@ -104,7 +104,7 @@ func main() { err = gen.WriteMapEncodersToFile("./storage/sealer/storiface/cbor_gen.go", "storiface", storiface.CallID{}, storiface.SecDataHttpHeader{}, - storiface.SectorData{}, + storiface.SectorLocation{}, ) if err != nil { fmt.Println(err) diff --git a/itests/sector_import_full_test.go b/itests/sector_import_full_test.go index 00a29b82b5c..35fc3e6232a 100644 --- a/itests/sector_import_full_test.go +++ b/itests/sector_import_full_test.go @@ -113,7 +113,7 @@ func TestSectorImport(t *testing.T) { }) require.NoError(t, err) - // CRETE THE UNSEALED FILE + // CREATE THE UNSEALED FILE // create a reader for all-zero (CC) data dataReader := bytes.NewReader(bytes.Repeat([]byte{0}, int(pieceSize.Unpadded()))) @@ -194,15 +194,15 @@ func TestSectorImport(t *testing.T) { CommD: &scids.Unsealed, CommR: &scids.Sealed, - DataUnsealed: &storiface.SectorData{ + DataUnsealed: &storiface.SectorLocation{ Local: false, URL: unsealedURL, }, - DataSealed: &storiface.SectorData{ + DataSealed: &storiface.SectorLocation{ Local: false, URL: sealedURL, }, - DataCache: &storiface.SectorData{ + DataCache: &storiface.SectorLocation{ Local: false, URL: cacheURL, }, diff --git a/itests/sector_import_simple_test.go b/itests/sector_import_simple_test.go index 94c1e681031..0cf7e098b1a 100644 --- a/itests/sector_import_simple_test.go +++ b/itests/sector_import_simple_test.go @@ -87,7 +87,7 @@ func TestSectorImportAfterPC2(t *testing.T) { }) require.NoError(t, err) - // CRETE THE UNSEALED FILE + // CREATE THE UNSEALED FILE // create a reader for all-zero (CC) data dataReader := bytes.NewReader(bytes.Repeat([]byte{0}, int(pieceSize.Unpadded()))) @@ -169,15 +169,15 @@ func TestSectorImportAfterPC2(t *testing.T) { CommD: &scids.Unsealed, CommR: &scids.Sealed, - DataUnsealed: &storiface.SectorData{ + DataUnsealed: &storiface.SectorLocation{ Local: false, URL: unsealedURL, }, - DataSealed: &storiface.SectorData{ + DataSealed: &storiface.SectorLocation{ Local: false, URL: sealedURL, }, - DataCache: &storiface.SectorData{ + DataCache: &storiface.SectorLocation{ Local: false, URL: cacheURL, }, diff --git a/node/config/doc_gen.go b/node/config/doc_gen.go index d7bce6ee320..811409403b6 100644 --- a/node/config/doc_gen.go +++ b/node/config/doc_gen.go @@ -797,7 +797,7 @@ This parameter is ONLY applicable if the retrieval pricing policy strategy has b Comment: ``, }, { - Num: "AllowSectorDownload", + Name: "AllowSectorDownload", Type: "bool", Comment: ``, diff --git a/storage/paths/fetch.go b/storage/paths/fetch.go index 4c2a62290d2..2d87380bd94 100644 --- a/storage/paths/fetch.go +++ b/storage/paths/fetch.go @@ -72,6 +72,7 @@ func fetch(ctx context.Context, url, outname string, header http.Header) (rerr e } // FetchWithTemp fetches data into a temp 'fetching' directory, then moves the file to destination +// The set of URLs must refer to the same object, if one fails, another one will be tried. func FetchWithTemp(ctx context.Context, urls []string, dest string, header http.Header) (string, error) { var merr error for _, url := range urls { diff --git a/storage/pipeline/cbor_gen.go b/storage/pipeline/cbor_gen.go index f4dbbd3eec1..88dac5d6424 100644 --- a/storage/pipeline/cbor_gen.go +++ b/storage/pipeline/cbor_gen.go @@ -31,7 +31,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { cw := cbg.NewCborWriter(w) - if _, err := cw.Write([]byte{184, 39}); err != nil { + if _, err := cw.Write([]byte{184, 38}); err != nil { return err } @@ -655,7 +655,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { } } - // t.RemoteDataUnsealed (storiface.SectorData) (struct) + // t.RemoteDataUnsealed (storiface.SectorLocation) (struct) if len("RemoteDataUnsealed") > cbg.MaxLength { return xerrors.Errorf("Value in field \"RemoteDataUnsealed\" was too long") } @@ -671,7 +671,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - // t.RemoteDataSealed (storiface.SectorData) (struct) + // t.RemoteDataSealed (storiface.SectorLocation) (struct) if len("RemoteDataSealed") > cbg.MaxLength { return xerrors.Errorf("Value in field \"RemoteDataSealed\" was too long") } @@ -687,7 +687,7 @@ func (t *SectorInfo) MarshalCBOR(w io.Writer) error { return err } - // t.RemoteDataCache (storiface.SectorData) (struct) + // t.RemoteDataCache (storiface.SectorLocation) (struct) if len("RemoteDataCache") > cbg.MaxLength { return xerrors.Errorf("Value in field \"RemoteDataCache\" was too long") } @@ -1488,7 +1488,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { t.TerminatedAt = abi.ChainEpoch(extraI) } - // t.RemoteDataUnsealed (storiface.SectorData) (struct) + // t.RemoteDataUnsealed (storiface.SectorLocation) (struct) case "RemoteDataUnsealed": { @@ -1501,14 +1501,14 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { if err := cr.UnreadByte(); err != nil { return err } - t.RemoteDataUnsealed = new(storiface.SectorData) + t.RemoteDataUnsealed = new(storiface.SectorLocation) if err := t.RemoteDataUnsealed.UnmarshalCBOR(cr); err != nil { return xerrors.Errorf("unmarshaling t.RemoteDataUnsealed pointer: %w", err) } } } - // t.RemoteDataSealed (storiface.SectorData) (struct) + // t.RemoteDataSealed (storiface.SectorLocation) (struct) case "RemoteDataSealed": { @@ -1521,14 +1521,14 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { if err := cr.UnreadByte(); err != nil { return err } - t.RemoteDataSealed = new(storiface.SectorData) + t.RemoteDataSealed = new(storiface.SectorLocation) if err := t.RemoteDataSealed.UnmarshalCBOR(cr); err != nil { return xerrors.Errorf("unmarshaling t.RemoteDataSealed pointer: %w", err) } } } - // t.RemoteDataCache (storiface.SectorData) (struct) + // t.RemoteDataCache (storiface.SectorLocation) (struct) case "RemoteDataCache": { @@ -1541,7 +1541,7 @@ func (t *SectorInfo) UnmarshalCBOR(r io.Reader) (err error) { if err := cr.UnreadByte(); err != nil { return err } - t.RemoteDataCache = new(storiface.SectorData) + t.RemoteDataCache = new(storiface.SectorLocation) if err := t.RemoteDataCache.UnmarshalCBOR(cr); err != nil { return xerrors.Errorf("unmarshaling t.RemoteDataCache pointer: %w", err) } diff --git a/storage/pipeline/receive.go b/storage/pipeline/receive.go index e5eec5ab925..b1b0ce99f8d 100644 --- a/storage/pipeline/receive.go +++ b/storage/pipeline/receive.go @@ -91,8 +91,13 @@ func (m *Sealing) checkSectorMeta(ctx context.Context, meta api.RemoteSectorMeta switch SectorState(meta.State) { case Proving, Available: - // todo possibly check - info.CommitMessage = meta.CommitMessage + if meta.CommitMessage != nil { + if err := checkMessagePrefix(*meta.CommitMessage); err != nil { + return SectorInfo{}, xerrors.Errorf("commit message prefix: %w", err) + } + + info.CommitMessage = meta.CommitMessage + } fallthrough case SubmitCommit: @@ -100,10 +105,14 @@ func (m *Sealing) checkSectorMeta(ctx context.Context, meta api.RemoteSectorMeta return SectorInfo{}, xerrors.Errorf("sector PreCommitDeposit was null") } - info.PreCommitInfo = meta.PreCommitInfo info.PreCommitDeposit = *meta.PreCommitDeposit - info.PreCommitMessage = meta.PreCommitMessage info.PreCommitTipSet = meta.PreCommitTipSet + if info.PreCommitMessage != nil { + if err := checkMessagePrefix(*meta.PreCommitMessage); err != nil { + return SectorInfo{}, xerrors.Errorf("commit message prefix: %w", err) + } + info.PreCommitMessage = meta.PreCommitMessage + } // check provided seed if len(meta.SeedValue) != abi.RandomnessLength { @@ -256,9 +265,9 @@ func (m *Sealing) checkSectorMeta(ctx context.Context, meta api.RemoteSectorMeta } func (m *Sealing) handleReceiveSector(ctx statemachine.Context, sector SectorInfo) error { - toFetch := map[storiface.SectorFileType]storiface.SectorData{} + toFetch := map[storiface.SectorFileType]storiface.SectorLocation{} - for fileType, data := range map[storiface.SectorFileType]*storiface.SectorData{ + for fileType, data := range map[storiface.SectorFileType]*storiface.SectorLocation{ storiface.FTUnsealed: sector.RemoteDataUnsealed, storiface.FTSealed: sector.RemoteDataSealed, storiface.FTCache: sector.RemoteDataCache, @@ -285,3 +294,11 @@ func (m *Sealing) handleReceiveSector(ctx statemachine.Context, sector SectorInf return ctx.Send(SectorReceived{}) } + +func checkMessagePrefix(c cid.Cid) error { + p := c.Prefix() + if p.Version != 1 || p.MhLength != 32 || p.MhType != multihash.BLAKE2B_MIN+31 || p.Codec != cid.DagCBOR { + return xerrors.New("invalid message prefix") + } + return nil +} diff --git a/storage/pipeline/types.go b/storage/pipeline/types.go index cb1d843836d..6329b566692 100644 --- a/storage/pipeline/types.go +++ b/storage/pipeline/types.go @@ -94,9 +94,9 @@ type SectorInfo struct { TerminatedAt abi.ChainEpoch // Remote import - RemoteDataUnsealed *storiface.SectorData - RemoteDataSealed *storiface.SectorData - RemoteDataCache *storiface.SectorData + RemoteDataUnsealed *storiface.SectorLocation + RemoteDataSealed *storiface.SectorLocation + RemoteDataCache *storiface.SectorLocation RemoteCommit1Endpoint string RemoteCommit2Endpoint string RemoteSealingDoneEndpoint string diff --git a/storage/sealer/ffiwrapper/sealer_cgo.go b/storage/sealer/ffiwrapper/sealer_cgo.go index d73b7278735..f4ecc2e7b5b 100644 --- a/storage/sealer/ffiwrapper/sealer_cgo.go +++ b/storage/sealer/ffiwrapper/sealer_cgo.go @@ -1169,7 +1169,7 @@ func (sb *Sealer) Remove(ctx context.Context, sector storiface.SectorRef) error return xerrors.Errorf("not supported at this layer") // happens in localworker } -func (sb *Sealer) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorData) error { +func (sb *Sealer) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorLocation) error { var todo storiface.SectorFileType for fileType := range src { todo |= fileType diff --git a/storage/sealer/manager.go b/storage/sealer/manager.go index a4d31e21b8a..b0c023b09fb 100644 --- a/storage/sealer/manager.go +++ b/storage/sealer/manager.go @@ -1089,7 +1089,7 @@ func (m *Manager) ProveReplicaUpdate2(ctx context.Context, sector storiface.Sect return out, waitErr } -func (m *Manager) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorData) error { +func (m *Manager) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorLocation) error { ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -1098,7 +1098,7 @@ func (m *Manager) DownloadSectorData(ctx context.Context, sector storiface.Secto // get a sorted list of sectors files to make a consistent work key from ents := make([]struct { T storiface.SectorFileType - S storiface.SectorData + S storiface.SectorLocation }, 0, len(src)) for fileType, data := range src { if len(fileType.AllSet()) != 1 { @@ -1109,7 +1109,7 @@ func (m *Manager) DownloadSectorData(ctx context.Context, sector storiface.Secto ents = append(ents, struct { T storiface.SectorFileType - S storiface.SectorData + S storiface.SectorLocation }{T: fileType, S: data}) } sort.Slice(ents, func(i, j int) bool { diff --git a/storage/sealer/mock/mock.go b/storage/sealer/mock/mock.go index 173a4ddf259..0797bf549df 100644 --- a/storage/sealer/mock/mock.go +++ b/storage/sealer/mock/mock.go @@ -517,7 +517,7 @@ func (mgr *SectorMgr) ReleaseSectorKey(ctx context.Context, sector storiface.Sec return nil } -func (mgr *SectorMgr) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorData) error { +func (mgr *SectorMgr) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorLocation) error { return xerrors.Errorf("not supported") } diff --git a/storage/sealer/sched_test.go b/storage/sealer/sched_test.go index bf4b90b1958..89a286bdc21 100644 --- a/storage/sealer/sched_test.go +++ b/storage/sealer/sched_test.go @@ -67,7 +67,7 @@ type schedTestWorker struct { ignoreResources bool } -func (s *schedTestWorker) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorData) (storiface.CallID, error) { +func (s *schedTestWorker) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorLocation) (storiface.CallID, error) { panic("implement me") } diff --git a/storage/sealer/storiface/cbor_gen.go b/storage/sealer/storiface/cbor_gen.go index 6fec1155715..73a299dec74 100644 --- a/storage/sealer/storiface/cbor_gen.go +++ b/storage/sealer/storiface/cbor_gen.go @@ -282,7 +282,7 @@ func (t *SecDataHttpHeader) UnmarshalCBOR(r io.Reader) (err error) { return nil } -func (t *SectorData) MarshalCBOR(w io.Writer) error { +func (t *SectorLocation) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) return err @@ -360,8 +360,8 @@ func (t *SectorData) MarshalCBOR(w io.Writer) error { return nil } -func (t *SectorData) UnmarshalCBOR(r io.Reader) (err error) { - *t = SectorData{} +func (t *SectorLocation) UnmarshalCBOR(r io.Reader) (err error) { + *t = SectorLocation{} cr := cbg.NewCborReader(r) @@ -380,7 +380,7 @@ func (t *SectorData) UnmarshalCBOR(r io.Reader) (err error) { } if extra > cbg.MaxLength { - return fmt.Errorf("SectorData: map struct too large (%d)", extra) + return fmt.Errorf("SectorLocation: map struct too large (%d)", extra) } var name string diff --git a/storage/sealer/storiface/storage.go b/storage/sealer/storiface/storage.go index 5246a1a1a14..6d6063c54e2 100644 --- a/storage/sealer/storiface/storage.go +++ b/storage/sealer/storiface/storage.go @@ -87,7 +87,7 @@ type Sealer interface { FinalizeReplicaUpdate(ctx context.Context, sector SectorRef, keepUnsealed []Range) error - DownloadSectorData(ctx context.Context, sector SectorRef, finalized bool, src map[SectorFileType]SectorData) error + DownloadSectorData(ctx context.Context, sector SectorRef, finalized bool, src map[SectorFileType]SectorLocation) error } type Unsealer interface { @@ -123,7 +123,7 @@ type Prover interface { AggregateSealProofs(aggregateInfo proof.AggregateSealVerifyProofAndInfos, proofs [][]byte) ([]byte, error) } -type SectorData struct { +type SectorLocation struct { // Local when set to true indicates to lotus that sector data is already // available locally; When set lotus will skip fetching sector data, and // only check that sector data exists in sector storage @@ -140,7 +140,7 @@ type SectorData struct { Headers []SecDataHttpHeader } -func (sd *SectorData) HttpHeaders() http.Header { +func (sd *SectorLocation) HttpHeaders() http.Header { out := http.Header{} for _, header := range sd.Headers { out[header.Key] = append(out[header.Key], header.Value) diff --git a/storage/sealer/storiface/worker.go b/storage/sealer/storiface/worker.go index 11a4d265d55..51a7901b0bc 100644 --- a/storage/sealer/storiface/worker.go +++ b/storage/sealer/storiface/worker.go @@ -134,7 +134,7 @@ type WorkerCalls interface { MoveStorage(ctx context.Context, sector SectorRef, types SectorFileType) (CallID, error) UnsealPiece(context.Context, SectorRef, UnpaddedByteIndex, abi.UnpaddedPieceSize, abi.SealRandomness, cid.Cid) (CallID, error) Fetch(context.Context, SectorRef, SectorFileType, PathType, AcquireMode) (CallID, error) - DownloadSectorData(ctx context.Context, sector SectorRef, finalized bool, src map[SectorFileType]SectorData) (CallID, error) + DownloadSectorData(ctx context.Context, sector SectorRef, finalized bool, src map[SectorFileType]SectorLocation) (CallID, error) // sync GenerateWinningPoSt(ctx context.Context, ppt abi.RegisteredPoStProof, mid abi.ActorID, sectors []PostSectorChallenge, randomness abi.PoStRandomness) ([]proof.PoStProof, error) diff --git a/storage/sealer/teststorage_test.go b/storage/sealer/teststorage_test.go index ee200d9bb7f..4b30d5fff09 100644 --- a/storage/sealer/teststorage_test.go +++ b/storage/sealer/teststorage_test.go @@ -21,7 +21,7 @@ type testExec struct { apch chan chan apres } -func (t *testExec) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorData) error { +func (t *testExec) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorLocation) error { panic("implement me") } diff --git a/storage/sealer/worker_local.go b/storage/sealer/worker_local.go index 2e8846ab195..326f38366f3 100644 --- a/storage/sealer/worker_local.go +++ b/storage/sealer/worker_local.go @@ -588,7 +588,7 @@ func (l *LocalWorker) UnsealPiece(ctx context.Context, sector storiface.SectorRe }) } -func (l *LocalWorker) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorData) (storiface.CallID, error) { +func (l *LocalWorker) DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorLocation) (storiface.CallID, error) { sb, err := l.executor() if err != nil { return storiface.UndefCall, err