Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

On-disk storage & single stride size #48

Open
wants to merge 142 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
4b7558b
move test_store here as load_mrt bin
density215 Nov 25, 2024
cf0cb3b
reflow w/ rustfmt
density215 Nov 25, 2024
3d36576
reflow/cleanup
density215 Nov 25, 2024
cd68513
lsm_tree part 1
density215 Nov 27, 2024
2070619
weird typo
density215 Nov 28, 2024
463b645
Add approx items fn for persistence
density215 Nov 28, 2024
7cbc6e9
improved load_mrt and new prefix/mui reporting
density215 Dec 3, 2024
2b805d6
add verifcation to test_store; add status to persistance key
density215 Dec 4, 2024
a67362f
Swip impl
density215 Dec 5, 2024
78d8a9f
PersistStrategy
density215 Dec 6, 2024
8083844
remove outcommented code
density215 Dec 6, 2024
9b9b938
match_prefix for all strategies
density215 Dec 11, 2024
0b281a3
fix test_store counters
density215 Dec 11, 2024
4e2d050
cleanup
density215 Dec 12, 2024
7f2e26d
config in outer store
density215 Dec 12, 2024
d5afb1e
clippy
density215 Dec 12, 2024
22f0474
use MemoryOnly in test
density215 Dec 12, 2024
d79f04f
cleanup
density215 Dec 12, 2024
44839f3
PublicRecord vec from persist store
density215 Dec 13, 2024
986f3a4
small refactor
density215 Dec 17, 2024
d79f5b1
CustomAllocStorage -> Rib refactor (big)
density215 Dec 17, 2024
6c86f6a
CustomAllocStorage -> Rib refactor (big) part 2
density215 Dec 17, 2024
299127d
saner pub
density215 Dec 17, 2024
05f0f4e
remove withdrawn_mui_bmin() calls from proc macro
density215 Dec 18, 2024
0f8b81b
move helper fn
density215 Dec 18, 2024
5899b83
split out treebitmap and rib
density215 Dec 18, 2024
dea2c6a
clean
density215 Dec 18, 2024
3dc1086
counters split out over in-mem, persisted
density215 Dec 18, 2024
03520af
move withdrawn_muis_bmin to rib
density215 Dec 18, 2024
373a95a
move node-related stuff to node
density215 Dec 18, 2024
5d8a1e6
split out rib -> inmem - pesist upsert
density215 Dec 19, 2024
7c78a91
clean
density215 Dec 19, 2024
5744b85
some minor shuffling between files
density215 Dec 19, 2024
f3b2470
IncludeHistory + prefix_exists in memory
density215 Dec 24, 2024
d87af65
move withdrawn_mui_bmin once more to TreeBitMap
density215 Dec 24, 2024
cae714c
move iterators to in_mem
density215 Dec 24, 2024
ff67868
move iterators
density215 Dec 24, 2024
a75e5c7
add docstring
density215 Dec 27, 2024
11a2f2c
contains method
density215 Dec 27, 2024
354baa4
better QueryResult separation
density215 Dec 27, 2024
f741097
remove PersistStatus in MultiMapValue. it is the wrong place
density215 Dec 27, 2024
c447cb8
fix full scan iterators for multiple persist scenarios
density215 Jan 7, 2025
b3b8f40
fix iterators some more
density215 Jan 8, 2025
65edf34
reform PrefixId and converstion traits
density215 Jan 10, 2025
e7fcfd5
MSRV 1.82
density215 Jan 10, 2025
6c2fd84
reform PrefixId
density215 Jan 10, 2025
d432658
persist_tree iterators
density215 Jan 10, 2025
290f85a
skip persist_store lookups for WriteAhead strategy
density215 Jan 10, 2025
416bb9b
use prefix lenghts from tbm for perist store more|less specifics
density215 Jan 10, 2025
d6c3702
breaking changes
density215 Jan 17, 2025
e7b87ac
add BitSpan from bit pos index method
density215 Jan 22, 2025
0c3a943
add bit pos from index method
density215 Jan 22, 2025
41c7156
add bit pos from index method
density215 Jan 22, 2025
77d768a
add include_withdrawn option to record filtering
density215 Jan 22, 2025
50417b2
linear iterator for NodePrefixIterator
density215 Jan 22, 2025
12189b7
linear iterator for NodeMoreSpecificChildIterator
density215 Jan 24, 2025
2d68065
non-looping ChildNodeIterator
density215 Jan 27, 2025
16847bc
fix NodeMoreSpecificsPrefixIter
density215 Feb 3, 2025
59ab8b7
static ms_prefix_map
density215 Feb 4, 2025
cbc4e78
use default store
density215 Feb 4, 2025
532e459
temporarily adjust tests to filter self prefix in ms
density215 Feb 4, 2025
c188c08
use default store
density215 Feb 4, 2025
6eb9a47
clean out
density215 Feb 4, 2025
4ca7ee3
fix ms_prefix bitmap & other small things
density215 Feb 4, 2025
25f13e2
simplify iterator constructor
density215 Feb 4, 2025
075d64b
cleanup
density215 Feb 4, 2025
289d0c4
split out in_mem and prefix_cht iterators
density215 Feb 7, 2025
3a24a08
grand cleanup #1
density215 Feb 7, 2025
3d20307
grand cleanup #2
density215 Feb 7, 2025
aee9027
grand cleanup #3
density215 Feb 7, 2025
476f21e
fix prefix counters for PersistOnly
density215 Feb 11, 2025
2e47f41
more strategies for some tests
density215 Feb 13, 2025
d012087
update lsm_tree to 2.6.3
density215 Feb 13, 2025
f1846cd
harmonise trait bounds for AddressFamily
density215 Feb 13, 2025
5665440
remove uuid, use rand directly for dir names
density215 Feb 13, 2025
0dbb632
add zerocopy to PrefixId & AddressFamily
density215 Feb 14, 2025
43368ed
add zerocopy dep
density215 Feb 14, 2025
c8cff45
add Storage Config type parameter to Store
density215 Feb 24, 2025
9e3a7c0
turn Some empty Vec into None for get_records_for_prefix in persist
density215 Feb 25, 2025
7140493
all tests for all strategies
density215 Feb 25, 2025
5a86a92
add bruno's test
density215 Feb 25, 2025
d4daae2
cleanup
density215 Feb 26, 2025
e391833
use dev branch for routecore
density215 Feb 26, 2025
c879c1e
prelim SizedStref removal
density215 Feb 26, 2025
83d1f95
get rid of retrieve_* closure macros
density215 Feb 26, 2025
b602135
consolidate retrieve_* and store_* w/o closures
density215 Feb 26, 2025
b9de32f
remove Sized* enum wrappers
density215 Feb 26, 2025
9656b26
remove S from NodeSet
density215 Feb 27, 2025
66c86ac
eliminate Stride #1
density215 Feb 27, 2025
4a215d0
eliminate Stride #2
density215 Feb 27, 2025
677d526
eliminate Stride #3
density215 Feb 28, 2025
5269926
remove singlethreaded store
density215 Feb 28, 2025
a90db9f
use multithreaded store for examples
density215 Feb 28, 2025
bbe4f36
sanitize StrideNodeId
density215 Feb 28, 2025
7536593
use saturating_sub instead of operator for Node|PrefixSet init
density215 Feb 28, 2025
915c3e8
fix debug test overflows on subtract and sh{r|l}
density215 Feb 28, 2025
191162c
remove proc_macro, and create concrete store struct
density215 Mar 3, 2025
bb1cc2d
remove K type argument
density215 Mar 3, 2025
2fbbcb8
cleanup
density215 Mar 3, 2025
0861c1d
make *sets 4 times as small (ahum)
density215 Mar 4, 2025
3bf8329
Cht struct instead of trait
density215 Mar 4, 2025
bd5a8d3
delete superfluous macros
density215 Mar 4, 2025
eff603f
renaming some stuff
density215 Mar 4, 2025
2423dd0
remove proc macros
density215 Mar 4, 2025
0282105
remove persist as features
density215 Mar 4, 2025
83ef067
remove local_array and prelude modules
density215 Mar 4, 2025
6889b6c
reshuffle modules, files & dirs
density215 Mar 5, 2025
f99e504
more reshuffling
density215 Mar 5, 2025
0876c97
more reshuffling
density215 Mar 5, 2025
3aecbb9
even more reshuffling
density215 Mar 5, 2025
ff5d69b
writeahead -> persist historical
density215 Mar 5, 2025
c9bbaf4
make all fields of TreeBitMap private
density215 Mar 6, 2025
c8453c1
sort confusing init methods
density215 Mar 6, 2025
78bf6f1
allow zero-children nodes
density215 Mar 6, 2025
4e70d59
no node creation on retrieve_node{_for_mui}
density215 Mar 6, 2025
f298172
nodeset_size fn instead of bits_for_len for lookups
density215 Mar 7, 2025
cf27364
documentation for nodeset_size
density215 Mar 7, 2025
dcc55e8
last part for bits_for_len replacement
density215 Mar 10, 2025
0110ad3
remove non-existing import
density215 Mar 12, 2025
11ce0ed
saner pub modules and top level items
density215 Mar 12, 2025
035937c
move some types from config to stats
density215 Mar 12, 2025
0c5d3a3
and all the skipped files from the last 3 commits...
density215 Mar 12, 2025
7527451
public doc draft
density215 Mar 14, 2025
f2826d4
corrections
density215 Mar 14, 2025
fbab2e8
corrections
density215 Mar 15, 2025
82f3e81
corrections
density215 Mar 15, 2025
8e1a06f
introduce FatalError to replace unwraps for lsm
density215 Mar 24, 2025
5712436
FatalResult everywhere
density215 Mar 26, 2025
cc1c3f7
? all the tests
density215 Mar 26, 2025
f691556
? all the tests
density215 Mar 26, 2025
604122b
verify all slice indexing
density215 Mar 26, 2025
b9a6014
doc strings
density215 Mar 26, 2025
710efce
harmonise NodeId - PrefixId
density215 Mar 26, 2025
305d3cf
update comments
density215 Mar 26, 2025
4ac3375
update comments
density215 Mar 26, 2025
658f208
allow multiple crate versions lint
density215 Mar 26, 2025
8d80f24
fix error type
density215 Mar 26, 2025
b8eb0ec
prefix_meta -> records
density215 Mar 26, 2025
5949be6
branchless truncate_to_len
density215 Mar 27, 2025
b255c0c
add truncate_len test bin
density215 Mar 27, 2025
6f26f57
remove unused import
density215 Mar 27, 2025
58d58f8
counters reform
density215 Mar 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 19 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,40 +12,49 @@ authors.workspace = true
rust-version.workspace = true
license.workspace = true

[workspace]
members = ["proc_macros"]

[workspace.package]
version = "0.4.1"
version = "0.5.0"
edition = "2021"
authors = ["NLnet Labs <[email protected]>"]
license = "BSD-3-Clause"
rust-version = "1.80"
rust-version = "1.82"

[dependencies]
crossbeam-epoch = "^0.9"
crossbeam-utils = "^0.8"
parking_lot_core = "0.9.10"

inetnum = "0.1"
log = "^0.4"
roaring = "0.10.3"
rotonda-macros = { path = "proc_macros", version = "0.4.0" }
routecore = { version = "0.5", features = ["bgp", "bmp", "fsm", "serde"] }

routecore = { git = "https://github.com/nlnetlabs/routecore", branch = "dev", version = "0.5.2-dev", features = ["bgp", "bmp", "fsm", "serde", "mrt"] }
ansi_term = { version = "0.12", optional = true }
csv = { version = "1", optional = true }
rustyline = { version = "13", optional = true }
parking_lot_core = "0.9.10"
clap = { version = "4.4", optional = true, features = ["derive"] }
rayon = { version = "1.10", optional = true }
memmap2 = { version = "0.9", optional = true }
rand = { version = "0.9" }
lsm-tree = { version = "2.6.6" }
serde = "1.0.216"
serde_derive = "1.0.216"
serde_json = "1.0.133"
num-traits = "0.2.19"
zerocopy = { version = "0.8.17", features = ["derive"] }

[dev-dependencies]
csv = { version = "1" }
env_logger = { version = "0.10" }
rand = "^0.8"

[features]
cli = ["ansi_term", "rustyline", "csv"]
mrt = ["clap", "rayon"]
default = []

[[bin]]
name = "cli"
required-features = ["cli"]

[[bin]]
name = "load_mrt"
required-features = ["mrt"]
28 changes: 21 additions & 7 deletions examples/exact_matches.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
use rotonda_store::prelude::*;
use rotonda_store::prelude::multi::*;
use rotonda_store::meta_examples::NoMeta;
use inetnum::addr::Prefix;
use rotonda_store::match_options::IncludeHistory;
use rotonda_store::prefix_record::{Record, RouteStatus};
// use rotonda_store::prelude::multi::*;
use rotonda_store::{
epoch,
match_options::{MatchOptions, MatchType},
rib::config::MemoryOnlyConfig,
rib::StarCastRib,
test_types::NoMeta,
IntoIpAddr,
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
let guard = &epoch::pin();
let tree_bitmap = MultiThreadedStore::<NoMeta>::new()?;
let tree_bitmap = StarCastRib::<NoMeta, MemoryOnlyConfig>::try_default()?;
let pfxs = vec![
Prefix::new_relaxed(
0b0000_0000_0000_0000_0000_0000_0000_0000_u32.into_ipaddr(),
Expand Down Expand Up @@ -258,7 +267,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
for pfx in pfxs.into_iter() {
println!("insert {}", pfx?);
// let p : rotonda_store::Prefix<u32, PrefixAs> = pfx.into();
tree_bitmap.insert(&pfx.unwrap(), Record::new(0, 0, RouteStatus::Active, NoMeta::Empty), None)?;
tree_bitmap.insert(
&pfx.unwrap(),
Record::new(0, 0, RouteStatus::Active, NoMeta::Empty),
None,
)?;
}
println!("------ end of inserts\n");
// println!(
Expand Down Expand Up @@ -343,9 +356,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
include_withdrawn: false,
include_less_specifics: false,
include_more_specifics: false,
mui: None
mui: None,
include_history: IncludeHistory::None,
},
guard
guard,
);
println!("exact match: {:?}", s_spfx);
println!("-----------");
Expand Down
29 changes: 20 additions & 9 deletions examples/exact_matches_single.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
use rotonda_store::prelude::*;
use rotonda_store::SingleThreadedStore;
use rotonda_store::meta_examples::NoMeta;
use inetnum::addr::Prefix;
use rotonda_store::{
match_options::{IncludeHistory, MatchOptions, MatchType},
prefix_record::{Record, RouteStatus},
IntoIpAddr,
};
use rotonda_store::{
rib::{config::MemoryOnlyConfig, StarCastRib},
test_types::NoMeta,
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
let v4 = vec![8];
let v6 = vec![8];
let mut tree_bitmap = SingleThreadedStore::<NoMeta>::new(v4, v6);
let tree_bitmap = StarCastRib::<NoMeta, MemoryOnlyConfig>::try_default()?;

let pfxs = vec![
Prefix::new_relaxed(
Expand Down Expand Up @@ -260,7 +265,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
for pfx in pfxs.into_iter() {
println!("insert {}", pfx?);
// let p : rotonda_store::Prefix<u32, PrefixAs> = pfx.into();
tree_bitmap.insert(&pfx.unwrap(), NoMeta::Empty)?;
tree_bitmap.insert(
&pfx.unwrap(),
Record::new(1, 0, RouteStatus::Active, NoMeta::Empty),
None,
)?;
}
println!("------ end of inserts\n");
// println!(
Expand Down Expand Up @@ -336,7 +345,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
// Prefix::new_relaxed(std::net::Ipv4Addr::new(1, 0, 128, 0).into(), 24),
] {
println!("search for: {:?}", spfx);
// let locks = tree_bitmap.acquire_prefixes_rwlock_read();
let guard = &rotonda_store::epoch::pin();
let s_spfx = tree_bitmap.match_prefix(
// (&locks.0, &locks.1),
&spfx.unwrap(),
Expand All @@ -345,8 +354,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
include_withdrawn: false,
include_less_specifics: false,
include_more_specifics: false,
mui: None
mui: None,
include_history: IncludeHistory::None,
},
guard,
);
println!("exact match: {:?}", s_spfx);
println!("-----------");
Expand Down
77 changes: 43 additions & 34 deletions examples/full_table_multiple_trees_json.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
// extern crate self as roto;
use rotonda_store::prelude::*;
use rotonda_store::prelude::multi::*;
use rotonda_store::meta_examples::PrefixAs;
use inetnum::addr::Prefix;
use rotonda_store::epoch;
use rotonda_store::match_options::{IncludeHistory, MatchOptions, MatchType};
use rotonda_store::prefix_record::{PrefixRecord, Record, RouteStatus};
use rotonda_store::rib::config::MemoryOnlyConfig;
use rotonda_store::rib::StarCastRib;
use rotonda_store::test_types::PrefixAs;

use std::error::Error;
use std::fs::File;
use std::process;

#[create_store((
[4, 4, 4, 4, 4, 4, 4, 4],
[3,4,5,4]
))]
struct MyStore;
// #[create_store((
// ([4, 4, 4, 4, 4, 4, 4, 4], 5, 17),
// ([3, 4, 5, 4], 17, 29)
// ))]
// struct MyStore;

fn main() -> Result<(), Box<dyn Error>> {
const CSV_FILE_PATH: &str = "./data/uniq_pfx_asn_dfz_rnd.csv";
Expand All @@ -32,7 +35,12 @@ fn main() -> Result<(), Box<dyn Error>> {
let asn: u32 = record[2].parse().unwrap();
let pfx = PrefixRecord::<PrefixAs>::new(
Prefix::new(net.into(), len)?,
vec![Record::new(0, 0, RouteStatus::Active, PrefixAs(asn))],
vec![Record::new(
0,
0,
RouteStatus::Active,
PrefixAs::new(asn.into()),
)],
);
pfxs.push(pfx);
}
Expand All @@ -46,7 +54,9 @@ fn main() -> Result<(), Box<dyn Error>> {
println!("[");
for n in 1..6 {
let mut rec_vec: Vec<PrefixRecord<PrefixAs>> = vec![];
let tree_bitmap = MyStore::<PrefixAs>::new()?;
let config = MemoryOnlyConfig;
let tree_bitmap =
StarCastRib::<PrefixAs, _>::new_with_config(config)?;

if let Err(err) = load_prefixes(&mut rec_vec) {
println!("error running example: {}", err);
Expand Down Expand Up @@ -85,10 +95,11 @@ fn main() -> Result<(), Box<dyn Error>> {
include_withdrawn: false,
include_less_specifics: false,
include_more_specifics: false,
mui: None
mui: None,
include_history: IncludeHistory::None,
},
guard
);
guard,
)?;
}
}
}
Expand All @@ -101,26 +112,24 @@ fn main() -> Result<(), Box<dyn Error>> {

println!("{{");
println!("\"type\": \"treebitmap_univec\",");
println!(
"\"strides v4 \": {:?},",
&tree_bitmap
.v4
.store
.get_stride_sizes()
.iter()
.map_while(|s| if s > &0 { Some(*s) } else { None })
.collect::<Vec<_>>()
);
println!(
"\"strides v6 \": {:?},",
&tree_bitmap
.v6
.store
.get_stride_sizes()
.iter()
.map_while(|s| if s > &0 { Some(*s) } else { None })
.collect::<Vec<_>>()
);
// println!(
// "\"strides v4 \": {:?},",
// &tree_bitmap
// .v4
// .get_stride_sizes()
// .iter()
// .map_while(|s| if s > &0 { Some(*s) } else { None })
// .collect::<Vec<_>>()
// );
// println!(
// "\"strides v6 \": {:?},",
// &tree_bitmap
// .v6
// .get_stride_sizes()
// .iter()
// .map_while(|s| if s > &0 { Some(*s) } else { None })
// .collect::<Vec<_>>()
// );
println!("\"run_no\": {},", n);
println!("\"inserts_num\": {},", inserts_num);
println!("\"insert_duration_nanos\": {},", dur_insert_nanos);
Expand Down
47 changes: 27 additions & 20 deletions examples/more_specifics.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
use rotonda_store::meta_examples::PrefixAs;
use rotonda_store::prelude::*;
use rotonda_store::prelude::multi::*;

use rotonda_store::AddressFamily;
use inetnum::addr::Prefix;
use rotonda_store::{
epoch,
match_options::{IncludeHistory, MatchOptions, MatchType},
prefix_record::{Record, RouteStatus},
rib::{config::MemoryOnlyConfig, StarCastRib},
test_types::PrefixAs,
IntoIpAddr,
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
// type StoreType = InMemStorage<u32, PrefixAs>;
let tree_bitmap =
MultiThreadedStore::<PrefixAs>::new()?;
let pfxs = vec![
Prefix::new_relaxed(
0b0000_0000_0000_0000_0000_0000_0000_0000_u32.into_ipaddr(),
Expand Down Expand Up @@ -215,7 +215,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
for pfx in pfxs.into_iter() {
// println!("insert {:?}", pfx);
let p: Prefix = pfx.unwrap();
tree_bitmap.insert(&p, Record::new(0,0, RouteStatus::Active, PrefixAs(666)), None)?;
StarCastRib::<PrefixAs, MemoryOnlyConfig>::try_default()?.insert(
&p,
Record::new(0, 0, RouteStatus::Active, PrefixAs::new(666.into())),
None,
)?;
}
println!("------ end of inserts\n");
// println!(
Expand Down Expand Up @@ -277,17 +281,20 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
] {
println!("search for: {:?}", spfx);
let guard = &epoch::pin();
let s_spfx = tree_bitmap.match_prefix(
&spfx.unwrap(),
&MatchOptions {
match_type: MatchType::ExactMatch,
include_withdrawn: false,
include_less_specifics: true,
include_more_specifics: true,
mui: None
},
guard
);
let s_spfx =
StarCastRib::<PrefixAs, MemoryOnlyConfig>::try_default()?
.match_prefix(
&spfx.unwrap(),
&MatchOptions {
match_type: MatchType::ExactMatch,
include_withdrawn: false,
include_less_specifics: true,
include_more_specifics: true,
mui: None,
include_history: IncludeHistory::None,
},
guard,
);
println!("em/m-s: {:#?}", s_spfx);
println!("-----------");
}
Expand Down
Loading