refactor(cli): move codec diagnostic mapping to Rust
Move LZMA and LZ4 compression-status classification into Rust while retaining user-facing diagnostic text, format callbacks, and the existing C ABI boundary. Unknown statuses continue to select the generic diagnostic path. Test Plan: - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo +nightly fmt --manifest-path rust/Cargo.toml -- --check - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo clippy --manifest-path rust/Cargo.toml --all-targets -- -D warnings - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo test --manifest-path rust/Cargo.toml --all-targets (782 passed) - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo clippy --manifest-path rust/cli/Cargo.toml --all-targets -- -D warnings - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo test --manifest-path rust/cli/Cargo.toml --all-targets (179 passed) - ulimit -v 41943040; make -j1 - ulimit -v 41943040; make -j1 -C tests test (all tests completed successfully)
This commit is contained in:
+42
-14
@@ -1437,6 +1437,16 @@ enum {
|
||||
FIO_RUST_LZMA_CODE_ERROR = 4,
|
||||
FIO_RUST_LZMA_INVALID_PROJECTION = 5
|
||||
};
|
||||
enum {
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_OK = 0,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_INIT_PRESET_ERROR = 1,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_INIT_ALONE_ERROR = 2,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_INIT_XZ_ERROR = 3,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_CODE_ERROR = 4,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_INVALID_PROJECTION = 5,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_UNKNOWN = 6
|
||||
};
|
||||
int FIO_rust_lzmaCompressionDiagnostic(int status);
|
||||
|
||||
typedef void (*FIO_rust_lzma_read_fill_fn)(
|
||||
void* opaque, size_t requested, const unsigned char** buffer, size_t* loaded);
|
||||
@@ -1490,6 +1500,16 @@ enum {
|
||||
FIO_RUST_LZ4_END_ERROR = 4,
|
||||
FIO_RUST_LZ4_INVALID_PROJECTION = 5
|
||||
};
|
||||
enum {
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_OK = 0,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_CREATE_ERROR = 1,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_HEADER_ERROR = 2,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_UPDATE_ERROR = 3,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_END_ERROR = 4,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_INVALID_PROJECTION = 5,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_UNKNOWN = 6
|
||||
};
|
||||
int FIO_rust_lz4CompressionDiagnostic(int status);
|
||||
|
||||
typedef int (*FIO_rust_lz4_create_fn)(void* opaque, unsigned version,
|
||||
size_t* result);
|
||||
@@ -2145,6 +2165,7 @@ FIO_compressLzmaFrame(cRess_t* ress,
|
||||
U64 compressedSize = 0;
|
||||
int lzmaResult = (int)LZMA_OK;
|
||||
int status;
|
||||
int diagnostic;
|
||||
|
||||
memset(&projection, 0, sizeof(projection));
|
||||
projection.readOpaque = (void*)ress->readCtx;
|
||||
@@ -2166,19 +2187,22 @@ FIO_compressLzmaFrame(cRess_t* ress,
|
||||
status = FIO_rust_compressLzmaFrame(
|
||||
&projection, srcFileName, srcFileSize, compressionLevel, plain_lzma,
|
||||
readsize, &compressedSize, &lzmaResult);
|
||||
switch (status) {
|
||||
case FIO_RUST_LZMA_OK:
|
||||
diagnostic = FIO_rust_lzmaCompressionDiagnostic(status);
|
||||
switch (diagnostic) {
|
||||
case FIO_RUST_LZMA_DIAGNOSTIC_OK:
|
||||
return compressedSize;
|
||||
case FIO_RUST_LZMA_INIT_PRESET_ERROR:
|
||||
case FIO_RUST_LZMA_DIAGNOSTIC_INIT_PRESET_ERROR:
|
||||
EXM_THROW(81, "zstd: %s: lzma_lzma_preset error", srcFileName);
|
||||
case FIO_RUST_LZMA_INIT_ALONE_ERROR:
|
||||
case FIO_RUST_LZMA_DIAGNOSTIC_INIT_ALONE_ERROR:
|
||||
EXM_THROW(82, "zstd: %s: lzma_alone_encoder error %d", srcFileName, lzmaResult);
|
||||
case FIO_RUST_LZMA_INIT_XZ_ERROR:
|
||||
case FIO_RUST_LZMA_DIAGNOSTIC_INIT_XZ_ERROR:
|
||||
EXM_THROW(83, "zstd: %s: lzma_easy_encoder error %d", srcFileName, lzmaResult);
|
||||
case FIO_RUST_LZMA_CODE_ERROR:
|
||||
case FIO_RUST_LZMA_DIAGNOSTIC_CODE_ERROR:
|
||||
EXM_THROW(84, "zstd: %s: lzma_code encoding error %d", srcFileName, lzmaResult);
|
||||
case FIO_RUST_LZMA_DIAGNOSTIC_INVALID_PROJECTION:
|
||||
EXM_THROW(84, "zstd: %s: lzma_code encoding error %d", srcFileName, lzmaResult);
|
||||
default:
|
||||
assert(status == FIO_RUST_LZMA_INVALID_PROJECTION);
|
||||
assert(diagnostic == FIO_RUST_LZMA_DIAGNOSTIC_UNKNOWN);
|
||||
EXM_THROW(84, "zstd: %s: lzma_code encoding error %d", srcFileName, lzmaResult);
|
||||
}
|
||||
}
|
||||
@@ -2341,6 +2365,7 @@ FIO_compressLz4Frame(cRess_t* ress,
|
||||
U64 compressedSize = 0;
|
||||
size_t lz4Result = 0;
|
||||
int status;
|
||||
int diagnostic;
|
||||
|
||||
memset(&codec, 0, sizeof(codec));
|
||||
memset(&projection, 0, sizeof(projection));
|
||||
@@ -2367,22 +2392,25 @@ FIO_compressLz4Frame(cRess_t* ress,
|
||||
status = FIO_rust_compressLz4Frame(
|
||||
&projection, srcFileName, srcFileSize, compressionLevel, checksumFlag,
|
||||
readsize, &compressedSize, &lz4Result);
|
||||
switch (status) {
|
||||
case FIO_RUST_LZ4_OK:
|
||||
diagnostic = FIO_rust_lz4CompressionDiagnostic(status);
|
||||
switch (diagnostic) {
|
||||
case FIO_RUST_LZ4_DIAGNOSTIC_OK:
|
||||
return compressedSize;
|
||||
case FIO_RUST_LZ4_CREATE_ERROR:
|
||||
case FIO_RUST_LZ4_DIAGNOSTIC_CREATE_ERROR:
|
||||
EXM_THROW(31, "zstd: failed to create lz4 compression context");
|
||||
case FIO_RUST_LZ4_HEADER_ERROR:
|
||||
case FIO_RUST_LZ4_DIAGNOSTIC_HEADER_ERROR:
|
||||
EXM_THROW(33, "File header generation failed : %s",
|
||||
LZ4F_getErrorName(lz4Result));
|
||||
case FIO_RUST_LZ4_UPDATE_ERROR:
|
||||
case FIO_RUST_LZ4_DIAGNOSTIC_UPDATE_ERROR:
|
||||
EXM_THROW(35, "zstd: %s: lz4 compression failed : %s",
|
||||
srcFileName, LZ4F_getErrorName(lz4Result));
|
||||
case FIO_RUST_LZ4_END_ERROR:
|
||||
case FIO_RUST_LZ4_DIAGNOSTIC_END_ERROR:
|
||||
EXM_THROW(38, "zstd: %s: lz4 end of file generation failed : %s",
|
||||
srcFileName, LZ4F_getErrorName(lz4Result));
|
||||
case FIO_RUST_LZ4_DIAGNOSTIC_INVALID_PROJECTION:
|
||||
EXM_THROW(31, "zstd: failed to create lz4 compression context");
|
||||
default:
|
||||
assert(status == FIO_RUST_LZ4_INVALID_PROJECTION);
|
||||
assert(diagnostic == FIO_RUST_LZ4_DIAGNOSTIC_UNKNOWN);
|
||||
EXM_THROW(31, "zstd: failed to create lz4 compression context");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1010,6 +1010,29 @@ pub const FIO_RUST_LZMA_INIT_XZ_ERROR: c_int = 3;
|
||||
pub const FIO_RUST_LZMA_CODE_ERROR: c_int = 4;
|
||||
pub const FIO_RUST_LZMA_INVALID_PROJECTION: c_int = 5;
|
||||
|
||||
pub const FIO_RUST_LZMA_DIAGNOSTIC_OK: c_int = 0;
|
||||
pub const FIO_RUST_LZMA_DIAGNOSTIC_INIT_PRESET_ERROR: c_int = 1;
|
||||
pub const FIO_RUST_LZMA_DIAGNOSTIC_INIT_ALONE_ERROR: c_int = 2;
|
||||
pub const FIO_RUST_LZMA_DIAGNOSTIC_INIT_XZ_ERROR: c_int = 3;
|
||||
pub const FIO_RUST_LZMA_DIAGNOSTIC_CODE_ERROR: c_int = 4;
|
||||
pub const FIO_RUST_LZMA_DIAGNOSTIC_INVALID_PROJECTION: c_int = 5;
|
||||
pub const FIO_RUST_LZMA_DIAGNOSTIC_UNKNOWN: c_int = 6;
|
||||
|
||||
/// Classifies LZMA compression statuses without owning the C CLI's messages.
|
||||
/// The operational status values remain unchanged for the existing ABI.
|
||||
#[no_mangle]
|
||||
pub extern "C" fn FIO_rust_lzmaCompressionDiagnostic(status: c_int) -> c_int {
|
||||
match status {
|
||||
FIO_RUST_LZMA_OK => FIO_RUST_LZMA_DIAGNOSTIC_OK,
|
||||
FIO_RUST_LZMA_INIT_PRESET_ERROR => FIO_RUST_LZMA_DIAGNOSTIC_INIT_PRESET_ERROR,
|
||||
FIO_RUST_LZMA_INIT_ALONE_ERROR => FIO_RUST_LZMA_DIAGNOSTIC_INIT_ALONE_ERROR,
|
||||
FIO_RUST_LZMA_INIT_XZ_ERROR => FIO_RUST_LZMA_DIAGNOSTIC_INIT_XZ_ERROR,
|
||||
FIO_RUST_LZMA_CODE_ERROR => FIO_RUST_LZMA_DIAGNOSTIC_CODE_ERROR,
|
||||
FIO_RUST_LZMA_INVALID_PROJECTION => FIO_RUST_LZMA_DIAGNOSTIC_INVALID_PROJECTION,
|
||||
_ => FIO_RUST_LZMA_DIAGNOSTIC_UNKNOWN,
|
||||
}
|
||||
}
|
||||
|
||||
const FIO_RUST_LZMA_OK_CODE: c_int = 0;
|
||||
const FIO_RUST_LZMA_STREAM_END: c_int = 1;
|
||||
const FIO_RUST_LZMA_RUN: c_int = 0;
|
||||
@@ -1068,6 +1091,29 @@ pub const FIO_RUST_LZ4_UPDATE_ERROR: c_int = 3;
|
||||
pub const FIO_RUST_LZ4_END_ERROR: c_int = 4;
|
||||
pub const FIO_RUST_LZ4_INVALID_PROJECTION: c_int = 5;
|
||||
|
||||
pub const FIO_RUST_LZ4_DIAGNOSTIC_OK: c_int = 0;
|
||||
pub const FIO_RUST_LZ4_DIAGNOSTIC_CREATE_ERROR: c_int = 1;
|
||||
pub const FIO_RUST_LZ4_DIAGNOSTIC_HEADER_ERROR: c_int = 2;
|
||||
pub const FIO_RUST_LZ4_DIAGNOSTIC_UPDATE_ERROR: c_int = 3;
|
||||
pub const FIO_RUST_LZ4_DIAGNOSTIC_END_ERROR: c_int = 4;
|
||||
pub const FIO_RUST_LZ4_DIAGNOSTIC_INVALID_PROJECTION: c_int = 5;
|
||||
pub const FIO_RUST_LZ4_DIAGNOSTIC_UNKNOWN: c_int = 6;
|
||||
|
||||
/// Classifies LZ4 compression statuses without owning the C CLI's messages.
|
||||
/// The operational status values remain unchanged for the existing ABI.
|
||||
#[no_mangle]
|
||||
pub extern "C" fn FIO_rust_lz4CompressionDiagnostic(status: c_int) -> c_int {
|
||||
match status {
|
||||
FIO_RUST_LZ4_OK => FIO_RUST_LZ4_DIAGNOSTIC_OK,
|
||||
FIO_RUST_LZ4_CREATE_ERROR => FIO_RUST_LZ4_DIAGNOSTIC_CREATE_ERROR,
|
||||
FIO_RUST_LZ4_HEADER_ERROR => FIO_RUST_LZ4_DIAGNOSTIC_HEADER_ERROR,
|
||||
FIO_RUST_LZ4_UPDATE_ERROR => FIO_RUST_LZ4_DIAGNOSTIC_UPDATE_ERROR,
|
||||
FIO_RUST_LZ4_END_ERROR => FIO_RUST_LZ4_DIAGNOSTIC_END_ERROR,
|
||||
FIO_RUST_LZ4_INVALID_PROJECTION => FIO_RUST_LZ4_DIAGNOSTIC_INVALID_PROJECTION,
|
||||
_ => FIO_RUST_LZ4_DIAGNOSTIC_UNKNOWN,
|
||||
}
|
||||
}
|
||||
|
||||
pub type FIO_rust_lz4_create_fn = unsafe extern "C" fn(*mut c_void, c_uint, *mut usize) -> c_int;
|
||||
pub type FIO_rust_lz4_prepare_fn =
|
||||
unsafe extern "C" fn(*mut c_void, u64, c_int, c_int, usize, usize);
|
||||
@@ -5082,6 +5128,75 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lzma_compression_status_diagnostic_preserves_cli_mapping() {
|
||||
for (status, diagnostic) in [
|
||||
(FIO_RUST_LZMA_OK, FIO_RUST_LZMA_DIAGNOSTIC_OK),
|
||||
(
|
||||
FIO_RUST_LZMA_INIT_PRESET_ERROR,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_INIT_PRESET_ERROR,
|
||||
),
|
||||
(
|
||||
FIO_RUST_LZMA_INIT_ALONE_ERROR,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_INIT_ALONE_ERROR,
|
||||
),
|
||||
(
|
||||
FIO_RUST_LZMA_INIT_XZ_ERROR,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_INIT_XZ_ERROR,
|
||||
),
|
||||
(
|
||||
FIO_RUST_LZMA_CODE_ERROR,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_CODE_ERROR,
|
||||
),
|
||||
(
|
||||
FIO_RUST_LZMA_INVALID_PROJECTION,
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_INVALID_PROJECTION,
|
||||
),
|
||||
] {
|
||||
assert_eq!(FIO_rust_lzmaCompressionDiagnostic(status), diagnostic);
|
||||
}
|
||||
|
||||
for status in [-1, 99] {
|
||||
assert_eq!(
|
||||
FIO_rust_lzmaCompressionDiagnostic(status),
|
||||
FIO_RUST_LZMA_DIAGNOSTIC_UNKNOWN
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lz4_compression_status_diagnostic_preserves_cli_mapping() {
|
||||
for (status, diagnostic) in [
|
||||
(FIO_RUST_LZ4_OK, FIO_RUST_LZ4_DIAGNOSTIC_OK),
|
||||
(
|
||||
FIO_RUST_LZ4_CREATE_ERROR,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_CREATE_ERROR,
|
||||
),
|
||||
(
|
||||
FIO_RUST_LZ4_HEADER_ERROR,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_HEADER_ERROR,
|
||||
),
|
||||
(
|
||||
FIO_RUST_LZ4_UPDATE_ERROR,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_UPDATE_ERROR,
|
||||
),
|
||||
(FIO_RUST_LZ4_END_ERROR, FIO_RUST_LZ4_DIAGNOSTIC_END_ERROR),
|
||||
(
|
||||
FIO_RUST_LZ4_INVALID_PROJECTION,
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_INVALID_PROJECTION,
|
||||
),
|
||||
] {
|
||||
assert_eq!(FIO_rust_lz4CompressionDiagnostic(status), diagnostic);
|
||||
}
|
||||
|
||||
for status in [-1, 99] {
|
||||
assert_eq!(
|
||||
FIO_rust_lz4CompressionDiagnostic(status),
|
||||
FIO_RUST_LZ4_DIAGNOSTIC_UNKNOWN
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const SOURCE_POLICY_STAT: u8 = 1;
|
||||
const SOURCE_POLICY_EXCLUDED: u8 = 2;
|
||||
const SOURCE_POLICY_OPEN: u8 = 3;
|
||||
|
||||
Reference in New Issue
Block a user