1818#include < thread>
1919#include < utility>
2020#include " api/storage_miner/storage_api.hpp"
21+ #include " common/put_in_function.hpp"
2122#include " primitives/rle_bitset/runs_utils.hpp"
2223#include " primitives/sector_file/sector_file.hpp"
2324#include " sector_storage/stores/store_error.hpp"
2425
2526namespace fc ::sector_storage {
27+ using common::PutInFunction;
2628 using primitives::piece::PaddedByteIndex;
2729 using primitives::piece::PaddedPieceSize;
2830 using primitives::sector_file::SectorFile;
@@ -270,20 +272,22 @@ namespace fc::sector_storage {
270272
271273 outcome::result<CallId> LocalWorker::addPiece (
272274 const SectorRef §or,
273- gsl::span< const UnpaddedPieceSize> piece_sizes,
275+ VectorCoW< UnpaddedPieceSize> piece_sizes,
274276 const UnpaddedPieceSize &new_piece_size,
275277 proofs::PieceData piece_data) {
276278 return asyncCall (
277279 sector,
278280 return_->ReturnAddPiece ,
279- [=, piece_data{std::make_shared<PieceData>(std::move (piece_data))}](
280- Self self) -> outcome::result<PieceInfo> {
281+ PutInFunction ([=,
282+ exist_sizes = std::move (piece_sizes),
283+ data = std::move (piece_data)](
284+ const Self &self) -> outcome::result<PieceInfo> {
281285 OUTCOME_TRY (max_size,
282286 primitives::sector::getSectorSize (sector.proof_type ));
283287
284288 UnpaddedPieceSize offset;
285289
286- for (const auto &piece_size : piece_sizes ) {
290+ for (const auto &piece_size : exist_sizes. span () ) {
287291 offset += piece_size;
288292 }
289293
@@ -299,7 +303,7 @@ namespace fc::sector_storage {
299303 }
300304 });
301305
302- if (piece_sizes .empty ()) {
306+ if (exist_sizes .empty ()) {
303307 OUTCOME_TRYA (acquire_response,
304308 self->acquireSector (sector,
305309 SectorFileType::FTNone,
@@ -322,13 +326,13 @@ namespace fc::sector_storage {
322326 }
323327
324328 OUTCOME_TRY (piece_info,
325- staged_file->write (*piece_data ,
329+ staged_file->write (data ,
326330 offset.padded (),
327331 new_piece_size.padded (),
328332 sector.proof_type ));
329333
330334 return piece_info.value ();
331- });
335+ })) ;
332336 }
333337
334338 outcome::result<CallId> LocalWorker::sealPreCommit1 (
@@ -461,11 +465,12 @@ namespace fc::sector_storage {
461465 }
462466
463467 outcome::result<CallId> LocalWorker::finalizeSector (
464- const SectorRef §or, const gsl::span< const Range> & keep_unsealed) {
468+ const SectorRef §or, std::vector< Range> keep_unsealed) {
465469 return asyncCall (
466470 sector,
467471 return_->ReturnFinalizeSector ,
468- [=](Self self) -> outcome::result<void > {
472+ [=, keep_unsealed{std::move (keep_unsealed)}](
473+ Self self) -> outcome::result<void > {
469474 OUTCOME_TRY (size,
470475 primitives::sector::getSectorSize (sector.proof_type ));
471476 {
@@ -796,17 +801,16 @@ namespace fc::sector_storage {
796801 }
797802 });
798803
799- OUTCOME_TRY (self->proofs_ ->unsealRange (
800- sector.proof_type ,
801- response.paths .cache ,
802- sealed,
803- PieceData (fds[1 ]),
804- sector.id .sector ,
805- sector.id .miner ,
806- randomness,
807- unsealed_cid,
808- primitives::piece::paddedIndex (range.offset ),
809- range.size ));
804+ OUTCOME_TRY (self->proofs_ ->unsealRange (sector.proof_type ,
805+ response.paths .cache ,
806+ sealed,
807+ PieceData (fds[1 ]),
808+ sector.id .sector ,
809+ sector.id .miner ,
810+ randomness,
811+ unsealed_cid,
812+ range.offset ,
813+ range.size ));
810814 }
811815
812816 for (auto &t : threads) {
0 commit comments