use nodedb_cluster::{DescriptorId, MetadataEntry};
use crate::control::state::SharedState;
use crate::error::Error;
pub fn release_leases(
shared: &SharedState,
descriptor_ids: Vec<DescriptorId>,
) -> Result<(), Error> {
if descriptor_ids.is_empty() {
return Ok(());
}
if shared.metadata_raft.get().is_none() {
remove_from_local_cache(shared, &descriptor_ids);
return Ok(());
}
let entry = MetadataEntry::DescriptorLeaseRelease {
node_id: shared.node_id,
descriptor_ids,
};
super::propose_and_wait(shared, &entry, "release")?;
Ok(())
}
fn remove_from_local_cache(shared: &SharedState, descriptor_ids: &[DescriptorId]) {
let mut cache = shared
.metadata_cache
.write()
.unwrap_or_else(|p| p.into_inner());
for id in descriptor_ids {
cache.leases.remove(&(id.clone(), shared.node_id));
}
}