Skip to content

Commit 51ab3d9

Browse files
authored
Merge branch 'master' into fix/prove/request-parents-once
2 parents dc1f6e6 + cba59e8 commit 51ab3d9

File tree

20 files changed

+586
-221
lines changed

20 files changed

+586
-221
lines changed

filecoin-proofs/src/api/internal.rs

Lines changed: 191 additions & 94 deletions
Large diffs are not rendered by default.

filecoin-proofs/src/api/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ pub unsafe extern "C" fn get_max_user_bytes_per_staged_sector(
341341
let mut response: responses::GetMaxStagedBytesPerSector = Default::default();
342342

343343
response.status_code = FCPResponseStatus::FCPNoError;
344-
response.max_staged_bytes_per_sector = (*ptr).get_max_user_bytes_per_staged_sector();;
344+
response.max_staged_bytes_per_sector = (*ptr).get_max_user_bytes_per_staged_sector().into();
345345

346346
raw_ptr(response)
347347
}
@@ -377,7 +377,7 @@ pub unsafe extern "C" fn get_seal_status(
377377
.iter()
378378
.map(|p| FFIPieceMetadata {
379379
piece_key: rust_str_to_c_str(p.piece_key.to_string()),
380-
num_bytes: p.num_bytes,
380+
num_bytes: p.num_bytes.into(),
381381
})
382382
.collect::<Vec<FFIPieceMetadata>>();
383383

@@ -426,7 +426,7 @@ pub unsafe extern "C" fn get_sealed_sectors(
426426
.iter()
427427
.map(|p| FFIPieceMetadata {
428428
piece_key: rust_str_to_c_str(p.piece_key.to_string()),
429-
num_bytes: p.num_bytes,
429+
num_bytes: p.num_bytes.into(),
430430
})
431431
.collect::<Vec<FFIPieceMetadata>>();
432432

@@ -480,7 +480,7 @@ pub unsafe extern "C" fn get_staged_sectors(
480480
.iter()
481481
.map(|p| FFIPieceMetadata {
482482
piece_key: rust_str_to_c_str(p.piece_key.to_string()),
483-
num_bytes: p.num_bytes,
483+
num_bytes: p.num_bytes.into(),
484484
})
485485
.collect::<Vec<FFIPieceMetadata>>();
486486

filecoin-proofs/src/api/sector_builder/helpers/add_piece.rs

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
use std::sync::Arc;
2+
13
use crate::api::sector_builder::errors::*;
24
use crate::api::sector_builder::metadata::sum_piece_bytes;
35
use crate::api::sector_builder::metadata::StagedSectorMetadata;
46
use crate::api::sector_builder::state::StagedState;
57
use crate::api::sector_builder::*;
68
use crate::error;
9+
use sector_base::api::bytes_amount::UnpaddedBytesAmount;
710
use sector_base::api::sector_store::SectorManager;
8-
use std::sync::Arc;
911

1012
pub fn add_piece(
1113
sector_store: &Arc<WrappedSectorStore>,
@@ -16,7 +18,7 @@ pub fn add_piece(
1618
let sector_mgr = sector_store.inner.manager();
1719
let sector_max = sector_store.inner.config().max_unsealed_bytes_per_sector();
1820

19-
let piece_bytes_len = piece_bytes.len() as u64;
21+
let piece_bytes_len = UnpaddedBytesAmount(piece_bytes.len() as u64);
2022

2123
let opt_dest_sector_id = {
2224
let candidates: Vec<StagedSectorMetadata> = staged_state
@@ -41,7 +43,10 @@ pub fn add_piece(
4143
.map_err(|err| err.into())
4244
.and_then(|num_bytes_written| {
4345
if num_bytes_written != piece_bytes_len {
44-
Err(err_inc_write(num_bytes_written, piece_bytes_len).into())
46+
Err(
47+
err_inc_write(u64::from(num_bytes_written), u64::from(piece_bytes_len))
48+
.into(),
49+
)
4550
} else {
4651
Ok(s.sector_id)
4752
}
@@ -63,11 +68,11 @@ pub fn add_piece(
6368
// first staged sector into which the bytes will fit.
6469
fn compute_destination_sector_id(
6570
candidate_sectors: &[StagedSectorMetadata],
66-
max_bytes_per_sector: u64,
67-
num_bytes_in_piece: u64,
71+
max_bytes_per_sector: UnpaddedBytesAmount,
72+
num_bytes_in_piece: UnpaddedBytesAmount,
6873
) -> error::Result<Option<SectorId>> {
6974
if num_bytes_in_piece > max_bytes_per_sector {
70-
Err(err_overflow(num_bytes_in_piece, max_bytes_per_sector).into())
75+
Err(err_overflow(num_bytes_in_piece.into(), max_bytes_per_sector.into()).into())
7176
} else {
7277
Ok(candidate_sectors
7378
.iter()
@@ -116,47 +121,63 @@ mod tests {
116121

117122
sealed_sector_a.pieces.push(PieceMetadata {
118123
piece_key: String::from("x"),
119-
num_bytes: 5,
124+
num_bytes: UnpaddedBytesAmount(5),
120125
});
121126

122127
sealed_sector_a.pieces.push(PieceMetadata {
123128
piece_key: String::from("x"),
124-
num_bytes: 10,
129+
num_bytes: UnpaddedBytesAmount(10),
125130
});
126131

127132
let mut sealed_sector_b: StagedSectorMetadata = Default::default();
128133

129134
sealed_sector_b.pieces.push(PieceMetadata {
130135
piece_key: String::from("x"),
131-
num_bytes: 5,
136+
num_bytes: UnpaddedBytesAmount(5),
132137
});
133138

134139
let staged_sectors = vec![sealed_sector_a.clone(), sealed_sector_b.clone()];
135140

136141
// piece takes up all remaining space in first sector
137-
match compute_destination_sector_id(&staged_sectors, 100, 85) {
142+
match compute_destination_sector_id(
143+
&staged_sectors,
144+
UnpaddedBytesAmount(100),
145+
UnpaddedBytesAmount(85),
146+
) {
138147
Ok(Some(destination_sector_id)) => {
139148
assert_eq!(destination_sector_id, sealed_sector_a.sector_id)
140149
}
141150
_ => panic!(),
142151
}
143152

144153
// piece doesn't fit into the first, but does the second
145-
match compute_destination_sector_id(&staged_sectors, 100, 90) {
154+
match compute_destination_sector_id(
155+
&staged_sectors,
156+
UnpaddedBytesAmount(100),
157+
UnpaddedBytesAmount(90),
158+
) {
146159
Ok(Some(destination_sector_id)) => {
147160
assert_eq!(destination_sector_id, sealed_sector_b.sector_id)
148161
}
149162
_ => panic!(),
150163
}
151164

152165
// piece doesn't fit into any in the list
153-
match compute_destination_sector_id(&staged_sectors, 100, 100) {
166+
match compute_destination_sector_id(
167+
&staged_sectors,
168+
UnpaddedBytesAmount(100),
169+
UnpaddedBytesAmount(100),
170+
) {
154171
Ok(None) => (),
155172
_ => panic!(),
156173
}
157174

158175
// piece is over max
159-
match compute_destination_sector_id(&staged_sectors, 100, 101) {
176+
match compute_destination_sector_id(
177+
&staged_sectors,
178+
UnpaddedBytesAmount(100),
179+
UnpaddedBytesAmount(101),
180+
) {
160181
Err(_) => (),
161182
_ => panic!(),
162183
}

filecoin-proofs/src/api/sector_builder/helpers/get_sectors_ready_for_sealing.rs

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ use crate::api::sector_builder::metadata::StagedSectorMetadata;
44
use crate::api::sector_builder::state::StagedState;
55
use crate::api::sector_builder::SectorId;
66
use itertools::chain;
7+
use sector_base::api::bytes_amount::UnpaddedBytesAmount;
78
use std::cmp::Reverse;
89

910
pub fn get_sectors_ready_for_sealing(
1011
staged_state: &StagedState,
11-
max_user_bytes_per_staged_sector: u64,
12+
max_user_bytes_per_staged_sector: UnpaddedBytesAmount,
1213
max_num_staged_sectors: u8,
1314
seal_all_staged_sectors: bool,
1415
) -> Vec<SectorId> {
@@ -59,7 +60,7 @@ mod tests {
5960
sector_id,
6061
pieces: vec![PieceMetadata {
6162
piece_key: format!("{}", sector_id),
62-
num_bytes,
63+
num_bytes: UnpaddedBytesAmount(num_bytes),
6364
}],
6465
seal_status,
6566
..Default::default()
@@ -79,9 +80,10 @@ mod tests {
7980
sectors: m,
8081
};
8182

82-
let to_seal: Vec<SectorId> = get_sectors_ready_for_sealing(&state, 127, 10, true)
83-
.into_iter()
84-
.collect();
83+
let to_seal: Vec<SectorId> =
84+
get_sectors_ready_for_sealing(&state, UnpaddedBytesAmount(127), 10, true)
85+
.into_iter()
86+
.collect();
8587

8688
assert_eq!(vec![201 as SectorId, 200 as SectorId], to_seal);
8789
}
@@ -98,9 +100,10 @@ mod tests {
98100
sectors: m,
99101
};
100102

101-
let to_seal: Vec<SectorId> = get_sectors_ready_for_sealing(&state, 127, 10, false)
102-
.into_iter()
103-
.collect();
103+
let to_seal: Vec<SectorId> =
104+
get_sectors_ready_for_sealing(&state, UnpaddedBytesAmount(127), 10, false)
105+
.into_iter()
106+
.collect();
104107

105108
assert_eq!(vec![200 as SectorId], to_seal);
106109
}
@@ -119,9 +122,10 @@ mod tests {
119122
sectors: m,
120123
};
121124

122-
let to_seal: Vec<SectorId> = get_sectors_ready_for_sealing(&state, 127, 2, false)
123-
.into_iter()
124-
.collect();
125+
let to_seal: Vec<SectorId> =
126+
get_sectors_ready_for_sealing(&state, UnpaddedBytesAmount(127), 2, false)
127+
.into_iter()
128+
.collect();
125129

126130
assert_eq!(vec![201 as SectorId, 200 as SectorId], to_seal);
127131
}
@@ -140,9 +144,10 @@ mod tests {
140144
sectors: m,
141145
};
142146

143-
let to_seal: Vec<SectorId> = get_sectors_ready_for_sealing(&state, 127, 4, false)
144-
.into_iter()
145-
.collect();
147+
let to_seal: Vec<SectorId> =
148+
get_sectors_ready_for_sealing(&state, UnpaddedBytesAmount(127), 4, false)
149+
.into_iter()
150+
.collect();
146151

147152
assert_eq!(vec![0; 0], to_seal);
148153
}
@@ -161,9 +166,10 @@ mod tests {
161166
sectors: m,
162167
};
163168

164-
let to_seal: Vec<SectorId> = get_sectors_ready_for_sealing(&state, 127, 4, false)
165-
.into_iter()
166-
.collect();
169+
let to_seal: Vec<SectorId> =
170+
get_sectors_ready_for_sealing(&state, UnpaddedBytesAmount(127), 4, false)
171+
.into_iter()
172+
.collect();
167173

168174
assert_eq!(vec![0; 0], to_seal);
169175
}

filecoin-proofs/src/api/sector_builder/helpers/retrieve_piece.rs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::api::sector_builder::metadata::sector_id_as_bytes;
44
use crate::api::sector_builder::metadata::SealedSectorMetadata;
55
use crate::api::sector_builder::WrappedSectorStore;
66
use crate::error;
7+
use sector_base::api::bytes_amount::UnpaddedBytesAmount;
78
use std::path::PathBuf;
89
use std::sync::Arc;
910

@@ -47,7 +48,7 @@ fn retrieve_piece_aux<'a>(
4748
prover_id: &[u8; 31],
4849
piece_key: &'a str,
4950
staging_sector_access: &'a str,
50-
) -> error::Result<(u64, Vec<u8>)> {
51+
) -> error::Result<(UnpaddedBytesAmount, Vec<u8>)> {
5152
let (start_offset, num_bytes) = piece_pos(&sealed_sector, piece_key).ok_or_else(|| {
5253
let msg = format!(
5354
"piece {} not found in sector {}",
@@ -69,7 +70,8 @@ fn retrieve_piece_aux<'a>(
6970
if num_bytes_unsealed != num_bytes {
7071
let s = format!(
7172
"expected to unseal {} bytes, but unsealed {} bytes",
72-
num_bytes, num_bytes_unsealed
73+
u64::from(num_bytes),
74+
u64::from(num_bytes_unsealed)
7375
);
7476

7577
return Err(err_unrecov(s).into());
@@ -86,16 +88,23 @@ fn retrieve_piece_aux<'a>(
8688

8789
// Returns a tuple of piece bytes-offset and number-of-bytes in piece if the
8890
// provided sealed sector contains a matching piece.
89-
fn piece_pos(sealed_sector: &SealedSectorMetadata, piece_key: &str) -> Option<(u64, u64)> {
91+
fn piece_pos(
92+
sealed_sector: &SealedSectorMetadata,
93+
piece_key: &str,
94+
) -> Option<(u64, UnpaddedBytesAmount)> {
9095
let (found_piece, start_offset, num_bytes) = sealed_sector.pieces.iter().fold(
91-
(false, 0, 0),
96+
(false, 0, UnpaddedBytesAmount(0)),
9297
|(eject, start_offset, num_bytes), item| {
9398
if eject {
9499
(eject, start_offset, num_bytes)
95100
} else if item.piece_key == piece_key {
96101
(true, start_offset, item.num_bytes)
97102
} else {
98-
(false, start_offset + item.num_bytes, item.num_bytes)
103+
(
104+
false,
105+
start_offset + u64::from(item.num_bytes),
106+
item.num_bytes,
107+
)
99108
}
100109
},
101110
);
@@ -118,31 +127,31 @@ mod tests {
118127

119128
sealed_sector.pieces.push(PieceMetadata {
120129
piece_key: String::from("x"),
121-
num_bytes: 5,
130+
num_bytes: UnpaddedBytesAmount(5),
122131
});
123132

124133
sealed_sector.pieces.push(PieceMetadata {
125134
piece_key: String::from("y"),
126-
num_bytes: 30,
135+
num_bytes: UnpaddedBytesAmount(30),
127136
});
128137

129138
sealed_sector.pieces.push(PieceMetadata {
130139
piece_key: String::from("z"),
131-
num_bytes: 100,
140+
num_bytes: UnpaddedBytesAmount(100),
132141
});
133142

134143
match piece_pos(&sealed_sector, "x") {
135-
Some(pair) => assert_eq!(pair, (0, 5)),
144+
Some(pair) => assert_eq!(pair, (0, UnpaddedBytesAmount(5))),
136145
None => panic!(),
137146
}
138147

139148
match piece_pos(&sealed_sector, "y") {
140-
Some(pair) => assert_eq!(pair, (5, 30)),
149+
Some(pair) => assert_eq!(pair, (5, UnpaddedBytesAmount(30))),
141150
None => panic!(),
142151
}
143152

144153
match piece_pos(&sealed_sector, "z") {
145-
Some(pair) => assert_eq!(pair, (35, 100)),
154+
Some(pair) => assert_eq!(pair, (35, UnpaddedBytesAmount(100))),
146155
None => panic!(),
147156
}
148157
}

filecoin-proofs/src/api/sector_builder/metadata.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::error;
33
use crate::serde_big_array::BigArray;
44
use byteorder::LittleEndian;
55
use byteorder::WriteBytesExt;
6+
use sector_base::api::bytes_amount::UnpaddedBytesAmount;
67
use serde::{Deserialize, Serialize};
78
use std::fmt;
89

@@ -30,7 +31,7 @@ pub struct SealedSectorMetadata {
3031
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
3132
pub struct PieceMetadata {
3233
pub piece_key: String,
33-
pub num_bytes: u64,
34+
pub num_bytes: UnpaddedBytesAmount,
3435
}
3536

3637
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
@@ -84,8 +85,10 @@ impl Default for SealedSectorMetadata {
8485
}
8586
}
8687

87-
pub fn sum_piece_bytes(s: &StagedSectorMetadata) -> u64 {
88-
s.pieces.iter().map(|x| x.num_bytes).sum()
88+
pub fn sum_piece_bytes(s: &StagedSectorMetadata) -> UnpaddedBytesAmount {
89+
s.pieces
90+
.iter()
91+
.fold(UnpaddedBytesAmount(0), |acc, x| acc + x.num_bytes)
8992
}
9093

9194
pub fn sector_id_as_bytes(sector_id: SectorId) -> error::Result<[u8; 31]> {

0 commit comments

Comments
 (0)