Constellation, Spacedust, Slingshot, UFOs: atproto crates and services for microcosm
0

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'major-compact'

+39
+5
ufos/Cargo.toml
··· 2 2 name = "ufos" 3 3 version = "0.1.0" 4 4 edition = "2021" 5 + default-run = "ufos" 5 6 6 7 [dependencies] 7 8 anyhow = "1.0.97" ··· 37 38 [[bin]] 38 39 name = "analyze" 39 40 path = "src/bin/analyze.rs" 41 + 42 + [[bin]] 43 + name = "major-compact" 44 + path = "src/bin/major-compact.rs" 40 45 41 46 [dev-dependencies] 42 47 tempfile = "3.19.1"
+34
ufos/src/bin/major-compact.rs
··· 1 + use clap::Parser; 2 + use fjall::{Config, PartitionCreateOptions}; 3 + use std::path::PathBuf; 4 + use std::time::Instant; 5 + 6 + #[derive(Parser)] 7 + #[command(about = "Run a major compaction over every ufos partition")] 8 + struct Cli { 9 + /// path to the fjall data directory 10 + /// 11 + /// WARNING: MUST NOT RUN WHILE ANOTHER UFOS PROCESS IS USING IT 12 + data: PathBuf, 13 + } 14 + 15 + fn main() -> anyhow::Result<()> { 16 + let cli = Cli::parse(); 17 + 18 + eprintln!("opening db at {:?}...", cli.data); 19 + let keyspace = Config::new(&cli.data).open()?; 20 + 21 + for name in ["global", "feeds", "records", "rollups", "queues"] { 22 + let partition = keyspace.open_partition(name, PartitionCreateOptions::default())?; 23 + let size0 = partition.disk_space(); 24 + eprintln!("beginning major compaction for {name} (original size: {size0})"); 25 + let t0 = Instant::now(); 26 + partition.major_compact()?; 27 + let dt = t0.elapsed(); 28 + let sizef = partition.disk_space(); 29 + let dsize = (sizef as i64) - (size0 as i64); 30 + eprintln!("completed compaction for {name} in {dt:?} (new size: {sizef}, {dsize})"); 31 + } 32 + 33 + Ok(()) 34 + }