in rd-agent/src/main.rs [279:455]
fn new(args_file: &JsonConfigFile<Args>) -> Self {
let args = &args_file.data;
let top_path = Self::prep_dir(&args.dir);
if let Err(e) = Self::sgid_top(&top_path, args_file.path.as_ref()) {
info!(
"cfg: Failed to set group ownership on {:?} ({:#})",
&top_path, &e
);
}
let scr_path = match &args.scratch {
Some(scr) => Self::prep_dir(&scr),
None => Self::prep_dir(&(top_path.clone() + "/scratch")),
};
let scr_dev = match &args.dev {
Some(dev) => dev.clone(),
None => path_to_devname(&scr_path)
.expect(&format!(
"Failed to lookup device name for {:?}, specify with --dev",
&scr_path
))
.to_str()
.unwrap()
.to_string(),
};
let agent_bin = find_bin("rd-agent", exe_dir().ok())
.expect("Failed to find rd-agent bin")
.to_str()
.unwrap()
.to_owned();
let hashd_bin = find_bin("rd-hashd", exe_dir().ok())
.unwrap_or_else(|| {
error!("cfg: Failed to find rd-hashd binary");
panic!()
})
.to_str()
.unwrap()
.to_string();
let (oomd_bin, oomd_sys_svc) = match Self::find_oomd() {
Ok((bin, svc)) => (Ok(bin), Some(svc)),
Err(e) => (Err(e), None),
};
let misc_bin_path = top_path.clone() + "/misc-bin";
Self::prep_dir(&misc_bin_path);
let biolatpcts_bin = if args.no_iolat {
None
} else {
Some(misc_bin_path.clone() + "/biolatpcts_wrapper.sh")
};
let side_bin_path = top_path.clone() + "/sideload-bin";
let side_scr_path = scr_path.clone() + "/sideload";
let sys_scr_path = scr_path.clone() + "/sysload";
Self::prep_dir(&side_bin_path);
Self::prep_dir(&side_scr_path);
Self::prep_dir(&sys_scr_path);
let report_d_path = top_path.clone() + "/report.d";
let report_1min_d_path = top_path.clone() + "/report-1min.d";
Self::prep_dir(&report_d_path);
Self::prep_dir(&report_1min_d_path);
let bench_path = top_path.clone()
+ "/"
+ match args.bench_file.as_ref() {
None => rd_agent_intf::BENCH_FILENAME,
Some(name) => name,
};
Self::prep_dir(&(top_path.clone() + "/hashd-A"));
Self::prep_dir(&(top_path.clone() + "/hashd-B"));
Self::prep_dir(&(top_path.clone() + "/oomd"));
let sideloader_jobs_d = top_path.clone() + "/sideloader/jobs.d";
Self::prep_dir(&sideloader_jobs_d);
for path in glob::glob(&format!("{}/*.json", &sideloader_jobs_d))
.unwrap()
.filter_map(Result::ok)
{
if let Err(e) = fs::remove_file(&path) {
error!(
"cfg: Failed to remove stale sideloader job {:?} ({:#})",
&path, &e
);
panic!();
} else {
debug!("cfg: Removed stale sideloader job {:?}", &path);
}
}
Self {
scr_devnr: storage_info::devname_to_devnr(&scr_dev).unwrap(),
scr_dev,
scr_dev_forced: args.dev.is_some(),
index_path: top_path.clone() + "/index.json",
sysreqs_path: top_path.clone() + "/sysreqs.json",
cmd_path: top_path.clone() + "/cmd.json",
cmd_ack_path: top_path.clone() + "/cmd-ack.json",
report_path: top_path.clone() + "/report.json",
report_1min_path: top_path.clone() + "/report-1min.json",
report_d_path,
report_1min_d_path,
bench_path,
slices_path: top_path.clone() + "/slices.json",
agent_bin,
hashd_paths: [
HashdPaths {
bin: hashd_bin.clone(),
args: top_path.clone() + "/hashd-A/args.json",
params: top_path.clone() + "/hashd-A/params.json",
report: top_path.clone() + "/hashd-A/report.json",
tf: Self::prep_dir(&(scr_path.clone() + "/hashd-A/testfiles")),
log_dir: scr_path.clone() + "/hashd-A/logs",
},
HashdPaths {
bin: hashd_bin.clone(),
args: top_path.clone() + "/hashd-B/args.json",
params: top_path.clone() + "/hashd-B/params.json",
report: top_path.clone() + "/hashd-B/report.json",
tf: Self::prep_dir(&(scr_path.clone() + "/hashd-B/testfiles")),
log_dir: scr_path.clone() + "/hashd-B/logs",
},
],
misc_bin_path: misc_bin_path.clone(),
biolatpcts_bin,
iocost_paths: IoCostPaths {
bin: misc_bin_path.clone() + "/iocost_coef_gen.py",
working: Self::prep_dir(&(scr_path.clone() + "/iocost-coef")),
result: scr_path.clone() + "/iocost-coef/iocost-coef.json",
},
oomd_bin,
oomd_sys_svc,
oomd_cfg_path: top_path.clone() + "/oomd.json",
oomd_daemon_cfg_path: top_path.clone() + "/oomd/config.json",
sideloader_bin: misc_bin_path.clone() + "/sideloader.py",
sideloader_daemon_cfg_path: top_path.clone() + "/sideloader/config.json",
sideloader_daemon_jobs_path: top_path.clone() + "/sideloader/jobs.d",
sideloader_daemon_status_path: top_path.clone() + "/sideloader/status.json",
side_defs_path: top_path.clone() + "/sideload-defs.json",
side_bin_path: side_bin_path.clone(),
side_scr_path,
sys_scr_path,
balloon_bin: side_bin_path.clone() + "/memory-balloon.py",
side_linux_tar_path: args.linux_tar.clone(),
top_path,
scr_path,
rep_retention: if args.keep_reports {
None
} else {
Some(args.rep_retention)
},
rep_1min_retention: if args.keep_reports {
None
} else {
Some(args.rep_1min_retention)
},
force_running: args.force_running,
bypass: args.bypass,
verbosity: args.verbosity,
enforce: args.enforce.clone(),
sr_failed: Default::default(),
sr_iosched: None,
sr_wbt: None,
sr_wbt_path: None,
sr_swappiness: None,
sr_zswap_enabled: None,
sr_oomd_sys_svc: None,
}
}