20260410 完成五个rir 基于cir的三方回放,raw by hash 独立db,发现内存占用大,连续大rir 录制发生oom
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use rpki::bundle::{
|
||||
RecordingHttpFetcher, RecordingRsyncFetcher, build_single_rir_bundle_manifest,
|
||||
build_vap_compare_rows, build_vrp_compare_rows, copy_dir_all, load_validation_time,
|
||||
sha256_hex, write_json, write_live_delta_replay_bundle_inputs, write_vap_csv, write_vrp_csv,
|
||||
build_vap_compare_rows, build_vrp_compare_rows, copy_dir_all, load_validation_time, sha256_hex,
|
||||
write_json, write_live_delta_replay_bundle_inputs, write_vap_csv, write_vrp_csv,
|
||||
};
|
||||
use rpki::ccr::{build_ccr_from_run, decode_content_info, verify_content_info, write_ccr_file};
|
||||
use rpki::fetch::http::{BlockingHttpFetcher, HttpFetcherConfig};
|
||||
@@ -54,12 +54,15 @@ fn parse_args(argv: &[String]) -> Result<Args, String> {
|
||||
}
|
||||
"--base-bundle-dir" => {
|
||||
i += 1;
|
||||
args.base_bundle_dir =
|
||||
Some(PathBuf::from(argv.get(i).ok_or("--base-bundle-dir requires a value")?));
|
||||
args.base_bundle_dir = Some(PathBuf::from(
|
||||
argv.get(i).ok_or("--base-bundle-dir requires a value")?,
|
||||
));
|
||||
}
|
||||
"--out-dir" => {
|
||||
i += 1;
|
||||
args.out_dir = Some(PathBuf::from(argv.get(i).ok_or("--out-dir requires a value")?));
|
||||
args.out_dir = Some(PathBuf::from(
|
||||
argv.get(i).ok_or("--out-dir requires a value")?,
|
||||
));
|
||||
}
|
||||
"--validation-time" => {
|
||||
i += 1;
|
||||
@@ -87,8 +90,9 @@ fn parse_args(argv: &[String]) -> Result<Args, String> {
|
||||
}
|
||||
"--rsync-mirror-root" => {
|
||||
i += 1;
|
||||
args.rsync_mirror_root =
|
||||
Some(PathBuf::from(argv.get(i).ok_or("--rsync-mirror-root requires a value")?));
|
||||
args.rsync_mirror_root = Some(PathBuf::from(
|
||||
argv.get(i).ok_or("--rsync-mirror-root requires a value")?,
|
||||
));
|
||||
}
|
||||
"--max-depth" => {
|
||||
i += 1;
|
||||
@@ -110,7 +114,11 @@ fn parse_args(argv: &[String]) -> Result<Args, String> {
|
||||
}
|
||||
"--trust-anchor" => {
|
||||
i += 1;
|
||||
args.trust_anchor = Some(argv.get(i).ok_or("--trust-anchor requires a value")?.clone());
|
||||
args.trust_anchor = Some(
|
||||
argv.get(i)
|
||||
.ok_or("--trust-anchor requires a value")?
|
||||
.clone(),
|
||||
);
|
||||
}
|
||||
other => return Err(format!("unknown argument: {other}\n{}", usage())),
|
||||
}
|
||||
@@ -193,7 +201,10 @@ fn run(args: Args) -> Result<PathBuf, String> {
|
||||
let base_root = args.base_bundle_dir.as_ref().unwrap();
|
||||
let base_rir_dir = base_root.join(&rir_normalized);
|
||||
if !base_rir_dir.is_dir() {
|
||||
return Err(format!("base bundle rir dir not found: {}", base_rir_dir.display()));
|
||||
return Err(format!(
|
||||
"base bundle rir dir not found: {}",
|
||||
base_rir_dir.display()
|
||||
));
|
||||
}
|
||||
if out_root.exists() {
|
||||
fs::remove_dir_all(out_root)
|
||||
@@ -206,12 +217,14 @@ fn run(args: Args) -> Result<PathBuf, String> {
|
||||
.trust_anchor
|
||||
.clone()
|
||||
.unwrap_or_else(|| rir_normalized.clone());
|
||||
let tal_bytes =
|
||||
fs::read(rir_dir.join("tal.tal")).map_err(|e| format!("read tal from base bundle failed: {e}"))?;
|
||||
let ta_bytes =
|
||||
fs::read(rir_dir.join("ta.cer")).map_err(|e| format!("read ta from base bundle failed: {e}"))?;
|
||||
let tal_bytes = fs::read(rir_dir.join("tal.tal"))
|
||||
.map_err(|e| format!("read tal from base bundle failed: {e}"))?;
|
||||
let ta_bytes = fs::read(rir_dir.join("ta.cer"))
|
||||
.map_err(|e| format!("read ta from base bundle failed: {e}"))?;
|
||||
let base_validation_time = load_validation_time(&rir_dir.join("base-locks.json"))?;
|
||||
let target_validation_time = args.validation_time.unwrap_or_else(time::OffsetDateTime::now_utc);
|
||||
let target_validation_time = args
|
||||
.validation_time
|
||||
.unwrap_or_else(time::OffsetDateTime::now_utc);
|
||||
|
||||
let target_store_dir = out_root.join(".tmp").join(format!("{rir}-live-target-db"));
|
||||
let self_replay_dir = out_root.join(".tmp").join(format!("{rir}-self-delta-db"));
|
||||
@@ -221,8 +234,8 @@ fn run(args: Args) -> Result<PathBuf, String> {
|
||||
fs::create_dir_all(parent)
|
||||
.map_err(|e| format!("create tmp dir failed: {}: {e}", parent.display()))?;
|
||||
}
|
||||
let target_store =
|
||||
RocksStore::open(&target_store_dir).map_err(|e| format!("open target rocksdb failed: {e}"))?;
|
||||
let target_store = RocksStore::open(&target_store_dir)
|
||||
.map_err(|e| format!("open target rocksdb failed: {e}"))?;
|
||||
|
||||
let _base = run_tree_from_tal_and_ta_der_payload_replay_serial_audit(
|
||||
&target_store,
|
||||
@@ -282,17 +295,19 @@ fn run(args: Args) -> Result<PathBuf, String> {
|
||||
)
|
||||
.map_err(|e| format!("build delta ccr failed: {e}"))?;
|
||||
let delta_ccr_path = rir_dir.join("delta.ccr");
|
||||
write_ccr_file(&delta_ccr_path, &delta_ccr).map_err(|e| format!("write delta ccr failed: {e}"))?;
|
||||
let delta_ccr_bytes =
|
||||
fs::read(&delta_ccr_path).map_err(|e| format!("read delta ccr failed: {}: {e}", delta_ccr_path.display()))?;
|
||||
let delta_decoded =
|
||||
decode_content_info(&delta_ccr_bytes).map_err(|e| format!("decode delta ccr failed: {e}"))?;
|
||||
write_ccr_file(&delta_ccr_path, &delta_ccr)
|
||||
.map_err(|e| format!("write delta ccr failed: {e}"))?;
|
||||
let delta_ccr_bytes = fs::read(&delta_ccr_path)
|
||||
.map_err(|e| format!("read delta ccr failed: {}: {e}", delta_ccr_path.display()))?;
|
||||
let delta_decoded = decode_content_info(&delta_ccr_bytes)
|
||||
.map_err(|e| format!("decode delta ccr failed: {e}"))?;
|
||||
let delta_verify =
|
||||
verify_content_info(&delta_decoded).map_err(|e| format!("verify delta ccr failed: {e}"))?;
|
||||
|
||||
let delta_vrp_rows = build_vrp_compare_rows(&target_out.tree.vrps, &trust_anchor);
|
||||
let delta_vap_rows = build_vap_compare_rows(&target_out.tree.aspas, &trust_anchor);
|
||||
let (ccr_vrps, ccr_vaps) = rpki::bundle::decode_ccr_compare_views(&delta_decoded, &trust_anchor)?;
|
||||
let (ccr_vrps, ccr_vaps) =
|
||||
rpki::bundle::decode_ccr_compare_views(&delta_decoded, &trust_anchor)?;
|
||||
if delta_vrp_rows != ccr_vrps {
|
||||
return Err("record-delta.csv compare view does not match delta.ccr".to_string());
|
||||
}
|
||||
@@ -312,8 +327,8 @@ fn run(args: Args) -> Result<PathBuf, String> {
|
||||
&rsync.snapshot_fetches(),
|
||||
)?;
|
||||
|
||||
let self_store =
|
||||
RocksStore::open(&self_replay_dir).map_err(|e| format!("open self replay db failed: {e}"))?;
|
||||
let self_store = RocksStore::open(&self_replay_dir)
|
||||
.map_err(|e| format!("open self replay db failed: {e}"))?;
|
||||
let replay_out = run_tree_from_tal_and_ta_der_payload_delta_replay_serial_audit(
|
||||
&self_store,
|
||||
&Policy::default(),
|
||||
@@ -355,7 +370,8 @@ fn run(args: Args) -> Result<PathBuf, String> {
|
||||
)?;
|
||||
|
||||
let mut bundle_json: serde_json::Value = serde_json::from_slice(
|
||||
&fs::read(rir_dir.join("bundle.json")).map_err(|e| format!("read base bundle.json failed: {e}"))?,
|
||||
&fs::read(rir_dir.join("bundle.json"))
|
||||
.map_err(|e| format!("read base bundle.json failed: {e}"))?,
|
||||
)
|
||||
.map_err(|e| format!("parse base bundle.json failed: {e}"))?;
|
||||
bundle_json["deltaValidationTime"] = serde_json::Value::String(
|
||||
|
||||
Reference in New Issue
Block a user