From 67ae3ce5e269a7372e0f055c4d3bba186b579c86 Mon Sep 17 00:00:00 2001 From: onyinyang Date: Wed, 13 Sep 2023 14:21:15 -0400 Subject: [PATCH] Add documentation for db setup and more frequent save --- crates/lox-distributor/README.md | 12 +++++++++--- crates/lox-distributor/src/main.rs | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/crates/lox-distributor/README.md b/crates/lox-distributor/README.md index cbfe60f..329e769 100644 --- a/crates/lox-distributor/README.md +++ b/crates/lox-distributor/README.md @@ -1,12 +1,11 @@ # Lox Distributor The Lox distributor receives resources from [rdsys](https://gitlab.torproject.org/tpo/anti-censorship/rdsys) and writes them to [Lox -BridgeLines](https://git-crysp.uwaterloo.ca/iang/lox/src/master/src/bridge_table.rs#L42). Concurrently, it receives and responds to requests from [Lox clients](https://gitlab.torproject.org/tpo/anti-censorship/lox/lox-wasm). - +BridgeLines](https://git-crysp.uwaterloo.ca/iang/lox/src/master/src/bridge_table.rs#L42). Concurrently, it receives and responds to requests from [Lox clients](https://gitlab.torproject.org/tpo/anti-censorship/lox/lox-wasm). It saves the [LoxContext](https://gitlab.torproject.org/tpo/anti-censorship/lox-rs/-/blob/main/crates/lox-distributor/src/lox_context.rs) to a database every time the Lox bridgetable is updated and before the distributor is shutdown. ## Configure rdsys stream A test `config.json` is included for testing on a local instance of rdsys. This -can be edited to correspond to the desired types of resources and endpoints. +can be edited to correspond to the desired types of resources, endpoints and database configuration. ## Test Run @@ -26,6 +25,13 @@ Finally run rdsys: ./backend --config config.json ``` +## Database Config + +The database has a few configuration options. The path for where the database +should be read/written can be specified in the `config.json`. Rolling back to a +previous version of the database is also possible by passing the +`roll_back_date` flag at runtime and providing the date/time as a `%Y-%m-%d_%H:%M:%S` string. This argument should be passed if the `LoxContext` should be rolled back to a previous state due to, for example, a mass blocking event that is likely not due to Lox user behaviour. If the exact roll back date/time is not known, the last db entry within 24 hours from the passed `roll_back_date` will be used or else the program will fail gracefully. + ### Run Lox Distributor locally Simply run `cargo run -- config.json` :) diff --git a/crates/lox-distributor/src/main.rs b/crates/lox-distributor/src/main.rs index 47bcd6a..416184b 100644 --- a/crates/lox-distributor/src/main.rs +++ b/crates/lox-distributor/src/main.rs @@ -311,9 +311,11 @@ async fn context_manager( if let Err(e) = sender.send(response) { eprintln!("Server Response Error: {:?}", e); }; + lox_db.write_context(context.clone()); sleep(Duration::from_millis(1)).await; } Shutdown { shutdown_sig } => { + lox_db.write_context(context.clone()); println!("Sending Shutdown Signal, all threads should shutdown."); drop(shutdown_sig); println!("Shutdown Sent.");