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:
唐小鸭
2026-06-08 19:59:14 +08:00
committed by GitHub
parent 9504dff595
commit f7724d223b
47 changed files with 8742 additions and 682 deletions
+6 -2
View File
@@ -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(())
}