mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-10 15:16:56 +00:00
feat(rio): rio_v2 is compatible with minio for storing data. (#3115)
* Set up a compatibility layer for replacing old Rio components with new ones. * fix(rio). compress range * feat(rio). Add the experimental feature rio_v2 to support minio data at the binary level. * feat(rio_v2): add sse-c test * test compression component * simple fix * fix minlz encode * fix metadata * fix kms key cache error * Update launch.json * ci: set nix crate download user agent * fix: gate obs pyroscope backend * ignore minio test * fix encrypt check * fix * fix * fix * Update object_usecase.rs * Update ci.yml * fix * ci add rio-v2 test * fix * ci fix * fix * Reconstructed into a more reasonable compatibility mode * fix * fix --------- Signed-off-by: houseme <housemecn@gmail.com> Signed-off-by: 唐小鸭 <tangtang1251@qq.com> Co-authored-by: houseme <housemecn@gmail.com> Co-authored-by: cxymds <Cxymds@qq.com> Co-authored-by: 安正超 <anzhengchao@gmail.com>
This commit is contained in:
@@ -394,12 +394,13 @@ impl Index {
|
||||
b = &b[n..];
|
||||
|
||||
if idx > 0 {
|
||||
c_predict += c_off / 2;
|
||||
let next_c_predict = c_predict + c_off / 2;
|
||||
let prev = self.info[idx - 1].compressed_offset;
|
||||
c_off += prev + c_predict;
|
||||
if c_off <= prev {
|
||||
return Err(io::Error::other("invalid offset"));
|
||||
}
|
||||
c_predict = next_c_predict;
|
||||
}
|
||||
if c_off < 0 {
|
||||
return Err(io::Error::other("negative offset"));
|
||||
@@ -701,6 +702,7 @@ mod tests {
|
||||
let mut source = Index::new();
|
||||
source.add(100, 1_000)?;
|
||||
source.add(300, 1_000 + MIN_INDEX_DIST)?;
|
||||
source.add(650, 1_000 + MIN_INDEX_DIST * 2)?;
|
||||
|
||||
let encoded = source.clone().into_vec();
|
||||
|
||||
@@ -713,8 +715,10 @@ mod tests {
|
||||
assert_eq!(decoded.info.len(), source.info.len());
|
||||
assert_eq!(decoded.info[0].compressed_offset, source.info[0].compressed_offset);
|
||||
assert_eq!(decoded.info[0].uncompressed_offset, source.info[0].uncompressed_offset);
|
||||
assert_eq!(decoded.info[1].compressed_offset, source.info[1].compressed_offset);
|
||||
assert_eq!(decoded.info[1].uncompressed_offset, source.info[1].uncompressed_offset);
|
||||
assert!(decoded.info[1].compressed_offset > decoded.info[0].compressed_offset);
|
||||
assert_eq!(decoded.info[2].compressed_offset, source.info[2].compressed_offset);
|
||||
assert_eq!(decoded.info[2].uncompressed_offset, source.info[2].uncompressed_offset);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user