node: Add `--force` option to start node

Forces the node to start even in the presence of an existing socket
file.
This commit is contained in:
Alexis Sellier 2023-03-31 17:21:37 +02:00
parent cf37950828
commit c3e14c346b
No known key found for this signature in database
2 changed files with 13 additions and 2 deletions

View File

@ -1,2 +1,2 @@
RADICLE_DOMAIN=seed.radicle.xyz RADICLE_DOMAIN=seed.radicle.xyz
RADICLE_NODE_OPTIONS=--tracking-policy track --tracking-scope all RADICLE_NODE_OPTIONS=--tracking-policy track --tracking-scope all --force

View File

@ -1,4 +1,4 @@
use std::{net, process}; use std::{fs, net, process};
use anyhow::{anyhow, Context as _}; use anyhow::{anyhow, Context as _};
use crossbeam_channel as chan; use crossbeam_channel as chan;
@ -26,6 +26,7 @@ Options
--git-daemon <address> Address to bind git-daemon to (default 0.0.0.0:9418) --git-daemon <address> Address to bind git-daemon to (default 0.0.0.0:9418)
--tracking-policy (track|block) Default tracking policy --tracking-policy (track|block) Default tracking policy
--tracking-scope (trusted|all) Default scope for tracking policies --tracking-scope (trusted|all) Default scope for tracking policies
--force Force start even if an existing control socket is found
--help Print help --help Print help
--listen <address> Address to listen on --listen <address> Address to listen on
@ -38,6 +39,7 @@ struct Options {
daemon: Option<net::SocketAddr>, daemon: Option<net::SocketAddr>,
limits: service::config::Limits, limits: service::config::Limits,
listen: Vec<net::SocketAddr>, listen: Vec<net::SocketAddr>,
force: bool,
tracking_policy: Policy, tracking_policy: Policy,
tracking_scope: Scope, tracking_scope: Scope,
} }
@ -54,6 +56,7 @@ impl Options {
let mut daemon = None; let mut daemon = None;
let mut tracking_policy = Policy::default(); let mut tracking_policy = Policy::default();
let mut tracking_scope = Scope::default(); let mut tracking_scope = Scope::default();
let mut force = false;
while let Some(arg) = parser.next()? { while let Some(arg) = parser.next()? {
match arg { match arg {
@ -65,6 +68,9 @@ impl Options {
let addr = parser.value()?.parse()?; let addr = parser.value()?.parse()?;
external_addresses.push(addr); external_addresses.push(addr);
} }
Long("force") => {
force = true;
}
Long("git-daemon") => { Long("git-daemon") => {
let addr = parser.value()?.parse()?; let addr = parser.value()?.parse()?;
daemon = Some(addr); daemon = Some(addr);
@ -113,6 +119,7 @@ impl Options {
connect, connect,
daemon, daemon,
external_addresses, external_addresses,
force,
limits, limits,
listen, listen,
tracking_policy, tracking_policy,
@ -155,6 +162,10 @@ fn execute() -> anyhow::Result<()> {
let (notify, signals) = chan::bounded(1); let (notify, signals) = chan::bounded(1);
signals::install(notify)?; signals::install(notify)?;
if options.force {
log::debug!(target: "node", "Removing existing control socket..");
fs::remove_file(home.socket()).ok();
}
Runtime::init(home, config, options.listen, proxy, daemon, signals, signer)?.run()?; Runtime::init(home, config, options.listen, proxy, daemon, signals, signer)?.run()?;
Ok(()) Ok(())