use spark_connect_proto::StorageLevel;
pub trait StorageLevelExt {
fn none() -> StorageLevel;
fn disk_only() -> StorageLevel;
fn disk_only_2() -> StorageLevel;
fn disk_only_3() -> StorageLevel;
fn memory_only() -> StorageLevel;
fn memory_only_2() -> StorageLevel;
fn memory_and_disk() -> StorageLevel;
fn memory_and_disk_2() -> StorageLevel;
fn memory_and_disk_deser() -> StorageLevel;
fn off_heap() -> StorageLevel;
}
fn level(
use_disk: bool,
use_memory: bool,
use_off_heap: bool,
deserialized: bool,
replication: i32,
) -> StorageLevel {
StorageLevel {
use_disk,
use_memory,
use_off_heap,
deserialized,
replication,
}
}
impl StorageLevelExt for StorageLevel {
fn none() -> StorageLevel {
level(false, false, false, false, 1)
}
fn disk_only() -> StorageLevel {
level(true, false, false, false, 1)
}
fn disk_only_2() -> StorageLevel {
level(true, false, false, false, 2)
}
fn disk_only_3() -> StorageLevel {
level(true, false, false, false, 3)
}
fn memory_only() -> StorageLevel {
level(false, true, false, false, 1)
}
fn memory_only_2() -> StorageLevel {
level(false, true, false, false, 2)
}
fn memory_and_disk() -> StorageLevel {
level(true, true, false, false, 1)
}
fn memory_and_disk_2() -> StorageLevel {
level(true, true, false, false, 2)
}
fn memory_and_disk_deser() -> StorageLevel {
level(true, true, false, true, 1)
}
fn off_heap() -> StorageLevel {
level(true, true, true, false, 1)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn presets_match_reference_values() {
let s = StorageLevel::memory_and_disk_deser();
assert!(s.use_disk && s.use_memory && s.deserialized && !s.use_off_heap);
assert_eq!(s.replication, 1);
let s = StorageLevel::memory_and_disk();
assert!(s.use_disk && s.use_memory && !s.deserialized && !s.use_off_heap);
assert_eq!(s.replication, 1);
let s = StorageLevel::disk_only_3();
assert!(s.use_disk && !s.use_memory);
assert_eq!(s.replication, 3);
let s = StorageLevel::off_heap();
assert!(s.use_off_heap && s.use_disk && s.use_memory);
let s = StorageLevel::none();
assert!(!s.use_disk && !s.use_memory && !s.use_off_heap && !s.deserialized);
}
#[test]
fn every_preset_matches_its_flags_and_replication() {
let s = StorageLevel::disk_only();
assert!(s.use_disk && !s.use_memory && !s.use_off_heap && !s.deserialized);
assert_eq!(s.replication, 1);
let s = StorageLevel::disk_only_2();
assert!(s.use_disk && !s.use_memory);
assert_eq!(s.replication, 2);
let s = StorageLevel::memory_only();
assert!(s.use_memory && !s.use_disk && !s.use_off_heap);
assert_eq!(s.replication, 1);
let s = StorageLevel::memory_only_2();
assert!(s.use_memory && !s.use_disk);
assert_eq!(s.replication, 2);
let s = StorageLevel::memory_and_disk_2();
assert!(s.use_disk && s.use_memory);
assert_eq!(s.replication, 2);
}
}