use crate::core::{Error, ErrorKind, Lifecycle, Result};
use crate::storage::batch::RawRecordBatch;
use crate::storage::config::SpdkConfig;
use crate::storage::source::StorageSource;
pub struct SpdkSource {
#[allow(dead_code)]
config: SpdkConfig,
}
impl SpdkSource {
pub fn new(config: SpdkConfig) -> Self {
Self { config }
}
}
impl Lifecycle for SpdkSource {
fn init(&mut self) -> Result<()> {
Err(Error::new(
ErrorKind::NotImplemented,
"SPDK backend: not yet implemented (deferred after io_uring; see ADR-0006)",
))
}
fn shutdown(&mut self) -> Result<()> {
Ok(())
}
}
impl StorageSource for SpdkSource {
fn poll_batch(&mut self, _batch: &mut RawRecordBatch) -> Result<usize> {
Err(Error::new(
ErrorKind::NotImplemented,
"SPDK backend: not yet implemented",
))
}
fn backend_name() -> &'static str {
"spdk"
}
fn is_exhausted(&self) -> bool {
false
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::storage::batch::RawRecordBatch;
#[test]
fn init_returns_not_implemented() {
let mut src = SpdkSource::new(SpdkConfig::default());
let err = src.init().unwrap_err();
assert_eq!(err.kind(), ErrorKind::NotImplemented);
}
#[test]
fn poll_returns_not_implemented() {
let mut src = SpdkSource::new(SpdkConfig::default());
let mut batch = RawRecordBatch::new(4, 64);
let err = src.poll_batch(&mut batch).unwrap_err();
assert_eq!(err.kind(), ErrorKind::NotImplemented);
}
#[test]
fn backend_name_is_spdk() {
assert_eq!(SpdkSource::backend_name(), "spdk");
}
}