18
18
#include < thread>
19
19
#include < utility>
20
20
#include " api/storage_miner/storage_api.hpp"
21
+ #include " common/put_in_function.hpp"
21
22
#include " primitives/rle_bitset/runs_utils.hpp"
22
23
#include " primitives/sector_file/sector_file.hpp"
23
24
#include " sector_storage/stores/store_error.hpp"
24
25
25
26
namespace fc ::sector_storage {
27
+ using common::PutInFunction;
26
28
using primitives::piece::PaddedByteIndex;
27
29
using primitives::piece::PaddedPieceSize;
28
30
using primitives::sector_file::SectorFile;
@@ -270,20 +272,22 @@ namespace fc::sector_storage {
270
272
271
273
outcome::result<CallId> LocalWorker::addPiece (
272
274
const SectorRef §or,
273
- gsl::span< const UnpaddedPieceSize> piece_sizes,
275
+ VectorCoW< UnpaddedPieceSize> piece_sizes,
274
276
const UnpaddedPieceSize &new_piece_size,
275
277
proofs::PieceData piece_data) {
276
278
return asyncCall (
277
279
sector,
278
280
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> {
281
285
OUTCOME_TRY (max_size,
282
286
primitives::sector::getSectorSize (sector.proof_type ));
283
287
284
288
UnpaddedPieceSize offset;
285
289
286
- for (const auto &piece_size : piece_sizes ) {
290
+ for (const auto &piece_size : exist_sizes. span () ) {
287
291
offset += piece_size;
288
292
}
289
293
@@ -299,7 +303,7 @@ namespace fc::sector_storage {
299
303
}
300
304
});
301
305
302
- if (piece_sizes .empty ()) {
306
+ if (exist_sizes .empty ()) {
303
307
OUTCOME_TRYA (acquire_response,
304
308
self->acquireSector (sector,
305
309
SectorFileType::FTNone,
@@ -322,13 +326,13 @@ namespace fc::sector_storage {
322
326
}
323
327
324
328
OUTCOME_TRY (piece_info,
325
- staged_file->write (*piece_data ,
329
+ staged_file->write (data ,
326
330
offset.padded (),
327
331
new_piece_size.padded (),
328
332
sector.proof_type ));
329
333
330
334
return piece_info.value ();
331
- });
335
+ })) ;
332
336
}
333
337
334
338
outcome::result<CallId> LocalWorker::sealPreCommit1 (
@@ -461,11 +465,12 @@ namespace fc::sector_storage {
461
465
}
462
466
463
467
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) {
465
469
return asyncCall (
466
470
sector,
467
471
return_->ReturnFinalizeSector ,
468
- [=](Self self) -> outcome::result<void > {
472
+ [=, keep_unsealed{std::move (keep_unsealed)}](
473
+ Self self) -> outcome::result<void > {
469
474
OUTCOME_TRY (size,
470
475
primitives::sector::getSectorSize (sector.proof_type ));
471
476
{
@@ -796,17 +801,16 @@ namespace fc::sector_storage {
796
801
}
797
802
});
798
803
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 ));
810
814
}
811
815
812
816
for (auto &t : threads) {
0 commit comments