use clap::Parser;
use oxidelake_core::BackendKind;
use oxidelake_runtime::cluster;
use tracing_subscriber::EnvFilter;
#[derive(Parser)]
#[command(
name = "oxide-scheduler",
version,
about = "OxideLake scheduler (Apache DataFusion Ballista)"
)]
struct Cli {
#[arg(long, default_value = "127.0.0.1")]
bind_host: String,
#[arg(long, default_value_t = 50050)]
port: u16,
#[arg(long)]
cluster_backend: Option<String>,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_writer(std::io::stderr)
.init();
let cli = Cli::parse();
let target: BackendKind = match cli.cluster_backend {
Some(name) => name.parse()?,
None => oxidelake_planner::cluster_target_from_env()?,
};
tracing::info!(%target, "placement target for this cluster");
cluster::run_scheduler(cluster::scheduler_config(&cli.bind_host, cli.port, target)).await?;
Ok(())
}