more comments, sync check

Signed-off-by: Alex Chi <iskyzh@gmail.com>
This commit is contained in:
Alex Chi
2022-12-23 22:32:30 -05:00
parent 72cee6ac13
commit 3c50c81b69
20 changed files with 298 additions and 46 deletions

View File

@@ -3,26 +3,27 @@
use super::Block;
/// Builds a block
/// Builds a block.
pub struct BlockBuilder {}
impl BlockBuilder {
/// Creates a new block builder
pub fn new(target_size: usize) -> Self {
/// Creates a new block builder.
pub fn new(block_size: usize) -> Self {
unimplemented!()
}
/// Adds a key-value pair to the block
/// Adds a key-value pair to the block. Returns false when the block is full.
#[must_use]
pub fn add(&mut self, key: &[u8], value: &[u8]) -> bool {
unimplemented!()
}
/// Check if there is no key-value pair in the block.
pub fn is_empty(&self) -> bool {
unimplemented!()
}
/// Builds a block
/// Finalize the block.
pub fn build(self) -> Block {
unimplemented!()
}

View File

@@ -5,57 +5,60 @@ use std::sync::Arc;
use super::Block;
pub struct BlockIterator {}
/// Iterates on a block.
pub struct BlockIterator {
block: Arc<Block>,
key: Vec<u8>,
value: Vec<u8>,
idx: usize,
}
impl BlockIterator {
fn new(block: Arc<Block>) -> Self {
unimplemented!()
Self {
block,
key: Vec::new(),
value: Vec::new(),
idx: 0,
}
}
/// Creates a block iterator and seek to the first entry.
pub fn create_and_seek_to_first(block: Arc<Block>) -> Self {
unimplemented!()
}
/// Creates a block iterator and seek to the first key that >= `key`.
pub fn create_and_seek_to_key(block: Arc<Block>, key: &[u8]) -> Self {
unimplemented!()
}
/// Returns the key of the current entry.
pub fn key(&self) -> &[u8] {
unimplemented!()
}
/// Returns the value of the current entry.
pub fn value(&self) -> &[u8] {
unimplemented!()
}
/// Returns true if the iterator is valid.
pub fn is_valid(&self) -> bool {
unimplemented!()
}
/// Seeks to the first key in the block.
pub fn seek_to_first(&mut self) {
unimplemented!()
}
pub fn seek_to_last(&mut self) {
unimplemented!()
}
pub fn len(&self) -> usize {
unimplemented!()
}
pub fn is_empty(&self) -> bool {
unimplemented!()
}
pub fn seek_to(&mut self, idx: usize) {
unimplemented!()
}
/// Move to the next key in the block.
pub fn next(&mut self) {
unimplemented!()
}
/// Seek to the first key that >= `key`.
pub fn seek_to_key(&mut self, key: &[u8]) {
unimplemented!()
}

View File

@@ -1,2 +1,3 @@
pub mod block;
pub mod storage;
pub mod table;

View File

@@ -0,0 +1 @@
pub struct Storage {}

View File

@@ -1 +1,85 @@
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
mod builder;
mod iterator;
use std::{path::Path, sync::Arc};
pub use builder::SsTableBuilder;
use bytes::{Buf, Bytes};
pub use iterator::SsTableIterator;
use crate::block::Block;
use anyhow::Result;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct BlockMeta {
/// Offset of this data block.
pub offset: usize,
/// The first key of the data block.
pub first_key: Bytes,
}
impl BlockMeta {
/// Encode block meta to a buffer.
pub fn encode_block_meta(
block_meta: &[BlockMeta],
#[allow(clippy::ptr_arg)] buf: &mut Vec<u8>,
) {
unimplemented!()
}
/// Decode block meta from a buffer.
pub fn decode_block_meta(buf: impl Buf) -> Vec<BlockMeta> {
unimplemented!()
}
}
/// A file object.
pub struct FileObject(Bytes);
impl FileObject {
pub fn read(&self, offset: u64, len: u64) -> Result<Vec<u8>> {
Ok(self.0[offset as usize..(offset + len) as usize].to_vec())
}
pub fn size(&self) -> u64 {
self.0.len() as u64
}
pub fn create(path: &Path, data: Vec<u8>) -> Result<Self> {
unimplemented!()
}
pub fn open(path: &Path) -> Result<Self> {
unimplemented!()
}
}
pub struct SsTable {}
impl SsTable {
/// Open SSTable from a file.
pub fn open(file: FileObject) -> Result<Self> {
unimplemented!()
}
/// Read a block from the disk.
pub fn read_block(&self, block_idx: usize) -> Result<Arc<Block>> {
unimplemented!()
}
/// Find the block that may contain `key`.
pub fn find_block_idx(&self, key: &[u8]) -> usize {
unimplemented!()
}
/// Get number of data blocks.
pub fn num_of_blocks(&self) -> usize {
unimplemented!()
}
}
#[cfg(test)]
mod tests;

View File

@@ -0,0 +1,30 @@
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
use anyhow::Result;
use std::path::Path;
use super::{BlockMeta, SsTable};
/// Builds an SSTable from key-value pairs.
pub struct SsTableBuilder {
pub(super) meta: Vec<BlockMeta>,
}
impl SsTableBuilder {
/// Create a builder based on target SST size and target block size.
pub fn new(target_size: usize, block_size: usize) -> Self {
unimplemented!()
}
/// Adds a key-value pair to SSTable, return false when SST full.
#[must_use]
pub fn add(&mut self, key: &[u8], value: &[u8]) -> bool {
unimplemented!()
}
/// Builds the SSTable and writes it to the given path. No need to actually write to disk until chapter 4 block cache.
pub fn build(self, path: impl AsRef<Path>) -> Result<SsTable> {
unimplemented!()
}
}

View File

@@ -0,0 +1,53 @@
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
use anyhow::Result;
use std::sync::Arc;
use super::SsTable;
/// An iterator over the contents of an SSTable.
pub struct SsTableIterator {}
impl SsTableIterator {
/// Create a new iterator and seek to the first key-value pair.
pub fn create_and_seek_to_first(table: Arc<SsTable>) -> Result<Self> {
unimplemented!()
}
/// Seek to the first key-value pair.
pub fn seek_to_first(&mut self) -> Result<()> {
unimplemented!()
}
/// Create a new iterator and seek to the first key-value pair which >= `key`.
pub fn create_and_seek_to_key(table: Arc<SsTable>, key: &[u8]) -> Result<Self> {
unimplemented!()
}
/// Seek to the first key-value pair which >= `key`.
pub fn seek_to_key(&mut self, key: &[u8]) -> Result<()> {
unimplemented!()
}
/// Get the current key.
pub fn key(&self) -> &[u8] {
unimplemented!()
}
/// Get the current value.
pub fn value(&self) -> &[u8] {
unimplemented!()
}
/// Check if the iterator is valid.
pub fn is_valid(&self) -> bool {
unimplemented!()
}
/// Move to the next key-value pair.
#[allow(clippy::should_implement_trait)]
pub fn next(&mut self) -> Result<()> {
unimplemented!()
}
}

View File

@@ -0,0 +1 @@