diff options
author | Determinant <[email protected]> | 2020-06-16 16:03:37 -0400 |
---|---|---|
committer | Determinant <[email protected]> | 2020-06-16 16:03:37 -0400 |
commit | 1089cf85a74887430d5d21c42886a4a05bac2be9 (patch) | |
tree | 4190317a7cf57fbcc0ac912b6c455ca3dfc73202 | |
parent | 88b5fabd56ec0f9d46eed2dbf7fbc08b84b1f216 (diff) |
add readme
-rw-r--r-- | README.rst | 11 | ||||
-rw-r--r-- | src/lib.rs | 19 |
2 files changed, 20 insertions, 10 deletions
diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..f63eea1 --- /dev/null +++ b/README.rst @@ -0,0 +1,11 @@ +growth-ring +=========== + +.. image:: https://travis-ci.com/ava-labs/growth-ring.svg?token=EbLxqxy3qxjHrZKkyoP4&branch=master + :target: https://travis-ci.com/Determinant/growth-ring + +Documentation +------------- +- Latest_ + +.. _Latest: https://docs.rs/growth-ring/0.1.0/growthring/ @@ -5,17 +5,17 @@ //! ``` //! use growthring::{WALStoreAIO, wal::WALLoader}; //! use futures::executor::block_on; -//! // start from empty WAL (trucate = true) +//! // Start with empty WAL (truncate = true). //! let store = WALStoreAIO::new("./walfiles", true, |_, _| {Ok(())}); //! let mut wal = WALLoader::new(9, 8, 1000).recover(store).unwrap(); -//! // write a vector of records to WAL +//! // Write a vector of records to WAL. //! for f in wal.grow(vec!["record1(foo)", "record2(bar)", "record3(foobar)"]).into_iter() { //! let ring_id = block_on(f).unwrap().1; //! println!("WAL recorded record to {:?}", ring_id); //! } //! //! -//! // load from WAL if exists (trucate = false) +//! // Load from WAL (truncate = false). //! let store = WALStoreAIO::new("./walfiles", false, |payload, ringid| { //! // redo the operations in your application //! println!("recover(payload={}, ringid={:?})", @@ -24,22 +24,21 @@ //! Ok(()) //! }); //! let mut wal = WALLoader::new(9, 8, 1000).recover(store).unwrap(); -//! // We'll see the playback of the log even if there is no failure. Let's remove the old log -//! // entries by assuming they are already persistent in your application. +//! // We saw some log playback, even there is no failure. +//! // Let's try to grow the WAL to create many files. //! let ring_ids = wal.grow((0..100).into_iter().map(|i| "a".repeat(i)).collect::<Vec<_>>()) //! .into_iter().map(|f| block_on(f).unwrap().1).collect::<Vec<_>>(); -//! -//! -//! // Let's assume all these records are not longer needed. There will only be one remaining file -//! // in ./walfiles +//! // Then assume all these records are not longer needed. We can tell WALWriter by the `peel` +//! // method. //! block_on(wal.peel(ring_ids)).unwrap(); +//! // There will only be one remaining file in ./walfiles. //! //! let store = WALStoreAIO::new("./walfiles", false, |payload, _| { //! println!("payload.len() = {}", payload.len()); //! Ok(()) //! }); //! let wal = WALLoader::new(9, 8, 1000).recover(store).unwrap(); -//! // The ./walfiles is empty now as all records are played back. +//! // After each recovery, the ./walfiles is empty. //! ``` #[macro_use] extern crate scan_fmt; |