Skip to content
This repository has been archived by the owner on Jun 8, 2022. It is now read-only.

Commit

Permalink
fix(precommit): don't pre-commit until full (#83)
Browse files Browse the repository at this point in the history
  • Loading branch information
laser authored Nov 19, 2019
1 parent c0f5a81 commit 60ee261
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
6 changes: 6 additions & 0 deletions sector-builder-ffi/examples/simple/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,12 @@ unsafe fn sector_state_transitions(sector_size: u64) -> Result<(), failure::Erro
5,
);

// verify can't pre-commit
assert!(
seal_pre_commit(&mut ctx, ptr, 601, cfg.seal_ticket).is_err(),
"invalid transition: pre-commit(accepting)"
);

// verify can't commit
assert!(
seal_commit(&mut ctx, ptr, 601, cfg.seal_seed).is_err(),
Expand Down
19 changes: 18 additions & 1 deletion sector-builder/src/metadata_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,25 @@ impl<T: KeyValueStore> SectorMetadataManager<T> {
opt_meta.ok_or_else(|| format_err!("no staged sector with id {} exists", sector_id))?;

let ticket = match (mode, &meta.seal_status) {
(PreCommitMode::StartFresh(t), SealStatus::AcceptingPieces) => Ok(t),
(PreCommitMode::StartFresh(t), SealStatus::FullyPacked) => Ok(t),
(PreCommitMode::StartFresh(_), SealStatus::AcceptingPieces) => {
let amts = &meta
.pieces
.iter()
.map(|x| x.num_bytes)
.collect::<Vec<UnpaddedBytesAmount>>();

let preceding_piece_bytes =
filecoin_proofs::pieces::sum_piece_bytes_with_alignment(amts);

let difference = self.max_user_bytes_per_staged_sector - preceding_piece_bytes;

Err(format_err!(
"cannot pre-commit a sector (id = {:?}) which is not fully packed (remaining space = {:?})",
sector_id,
difference,
))
}
(PreCommitMode::StartFresh(_), s) => Err(format_err!(
"cannot pre-commit sector with id {:?} and state {:?}",
sector_id,
Expand Down

0 comments on commit 60ee261

Please sign in to comment.