20260326 完成数据库model迁移;20260327 增加一键replay脚本
This commit is contained in:
@@ -136,7 +136,7 @@ pub enum ManifestFreshError {
|
||||
RepoSyncFailed { detail: String },
|
||||
|
||||
#[error(
|
||||
"manifest not found in raw_objects: {manifest_rsync_uri} (RFC 9286 §6.2; RFC 9286 §6.6)"
|
||||
"manifest not found in current repository view: {manifest_rsync_uri} (RFC 9286 §6.2; RFC 9286 §6.6)"
|
||||
)]
|
||||
MissingManifest { manifest_rsync_uri: String },
|
||||
|
||||
@@ -204,7 +204,7 @@ pub enum ManifestFreshError {
|
||||
},
|
||||
|
||||
#[error(
|
||||
"manifest referenced file missing in raw_objects: {rsync_uri} (RFC 9286 §6.4; RFC 9286 §6.6)"
|
||||
"manifest referenced file missing in current repository view: {rsync_uri} (RFC 9286 §6.4; RFC 9286 §6.6)"
|
||||
)]
|
||||
MissingFile { rsync_uri: String },
|
||||
|
||||
@@ -548,7 +548,7 @@ pub(crate) fn try_build_fresh_publication_point(
|
||||
}
|
||||
|
||||
let manifest_bytes = store
|
||||
.get_raw(manifest_rsync_uri)
|
||||
.load_current_object_bytes_by_uri(manifest_rsync_uri)
|
||||
.map_err(|e| ManifestFreshError::MissingManifest {
|
||||
manifest_rsync_uri: format!("{manifest_rsync_uri} ({e})"),
|
||||
})?
|
||||
@@ -642,7 +642,7 @@ pub(crate) fn try_build_fresh_publication_point(
|
||||
let rsync_uri =
|
||||
join_rsync_dir_and_file(publication_point_rsync_uri, entry.file_name.as_str());
|
||||
let bytes = store
|
||||
.get_raw(&rsync_uri)
|
||||
.load_current_object_bytes_by_uri(&rsync_uri)
|
||||
.map_err(|_e| ManifestFreshError::MissingFile {
|
||||
rsync_uri: rsync_uri.clone(),
|
||||
})?
|
||||
@@ -836,6 +836,27 @@ mod tests {
|
||||
entry
|
||||
}
|
||||
|
||||
fn put_current_object(
|
||||
store: &RocksStore,
|
||||
rsync_uri: &str,
|
||||
bytes: Vec<u8>,
|
||||
object_type: &str,
|
||||
) {
|
||||
let hash = hex::encode(sha2::Sha256::digest(&bytes));
|
||||
store
|
||||
.put_raw_by_hash_entry(&raw_by_hash_entry(rsync_uri, bytes, object_type))
|
||||
.expect("put raw_by_hash entry");
|
||||
store
|
||||
.put_repository_view_entry(&crate::storage::RepositoryViewEntry {
|
||||
rsync_uri: rsync_uri.to_string(),
|
||||
current_hash: Some(hash),
|
||||
repository_source: Some("https://example.test/notification.xml".to_string()),
|
||||
object_type: Some(object_type.to_string()),
|
||||
state: crate::storage::RepositoryViewState::Present,
|
||||
})
|
||||
.expect("put repository view entry");
|
||||
}
|
||||
|
||||
fn sample_current_instance_vcir(
|
||||
manifest_rsync_uri: &str,
|
||||
publication_point_rsync_uri: &str,
|
||||
@@ -985,9 +1006,7 @@ mod tests {
|
||||
publication_point_rsync_uri,
|
||||
validation_time,
|
||||
) = load_manifest_fixture();
|
||||
store
|
||||
.put_raw(&manifest_rsync_uri, &manifest_bytes)
|
||||
.expect("store manifest");
|
||||
put_current_object(&store, &manifest_rsync_uri, manifest_bytes, "mft");
|
||||
let first_non_crl = manifest
|
||||
.manifest
|
||||
.parse_files()
|
||||
@@ -1001,9 +1020,8 @@ mod tests {
|
||||
.join(first_non_crl.file_name.as_str());
|
||||
let bytes = std::fs::read(&file_path).expect("read fixture file");
|
||||
let rsync_uri = format!("{publication_point_rsync_uri}{}", first_non_crl.file_name);
|
||||
store
|
||||
.put_raw(&rsync_uri, &bytes)
|
||||
.expect("store single file");
|
||||
let object_type = rsync_uri.rsplit('.').next().unwrap_or("bin");
|
||||
put_current_object(&store, &rsync_uri, bytes, object_type);
|
||||
|
||||
let err = try_build_fresh_publication_point(
|
||||
&store,
|
||||
|
||||
@@ -64,7 +64,7 @@ pub struct Rpkiv1PublicationPointRunner<'a> {
|
||||
/// In-run RRDP dedup: when RRDP is enabled, only sync each `rrdp_notification_uri` once per run.
|
||||
///
|
||||
/// - If RRDP succeeded for a repo, later publication points referencing that same RRDP repo
|
||||
/// skip network fetches and reuse the already-populated `raw_objects`.
|
||||
/// skip network fetches and reuse the already-populated current repository view.
|
||||
/// - If RRDP failed for a repo, later publication points skip RRDP attempts and go straight
|
||||
/// to rsync for their own `rsync_base_uri` (still per-publication-point).
|
||||
pub rrdp_dedup: bool,
|
||||
|
||||
Reference in New Issue
Block a user