pub struct LeaseDocument {
pub schema: String,
pub pid: u32,
pub token: String,
pub root: PathBuf,
pub url: Option<String>,
pub started_at: String,
pub executable: Option<ExecutableIdentity>,
pub version: Option<String>,
}Expand description
The lease file, typed: what the process serving a checkout wrote down about itself.
Every reader of the file — the election, a command asking which server is running, the
environment snapshot, the server’s own status — reads it through LeaseFile::read,
so that a field added here is added once and a file that is not a lease is refused in
one place. A key this version does not know is ignored, so a lease written by a newer
executable still reads; a key it needs that an older lease lacks takes its default.
use majordomus_cli::lease::{LeaseDocument, SCHEMA};
// a lease an older server wrote: no pid, no version, a key this version has never heard of
let older = format!(r#"{{"schema":"{SCHEMA}","token":"t","root":"/r","url":"http://127.0.0.1:1","later":1}}"#);
let doc: LeaseDocument = serde_json::from_str(&older).unwrap();
assert_eq!(doc.pid, 0);
assert!(doc.version.is_none(), "older than any executable that reads this");
assert_eq!(doc.url.as_deref(), Some("http://127.0.0.1:1"));
// and what this version writes reads back as itself
let text = serde_json::to_string(&doc).unwrap();
assert_eq!(serde_json::from_str::<LeaseDocument>(&text).unwrap(), doc);Fields§
§schema: String§pid: u32The process id of the server. A live pid is not a live server: only an answering
probe says that. What a live pid does decide is patience — a probe that goes
unanswered by a live owner is asked again within BUSY_GRACE before the lease
counts as stale (the election’s busy wait, probe_patiently); a dead or zero pid
gets no patience at all.
token: StringWhat makes the file this process’s: only the process holding this token removes it.
root: PathBufThe checkout root the server serves.
url: Option<String>The address, once bound; null while the owner is still binding.
started_at: StringWhen the server took the lease, RFC 3339.
executable: Option<ExecutableIdentity>The executable the server was started from, when it could be located.
version: Option<String>The executable’s version. Absent in a lease written before this field existed, which is itself a fact: that server is older than any executable that reads this.
Trait Implementations§
Source§impl Clone for LeaseDocument
impl Clone for LeaseDocument
Source§fn clone(&self) -> LeaseDocument
fn clone(&self) -> LeaseDocument
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for LeaseDocument
impl Debug for LeaseDocument
Source§impl<'de> Deserialize<'de> for LeaseDocument
impl<'de> Deserialize<'de> for LeaseDocument
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for LeaseDocument
Source§impl JsonSchema for LeaseDocument
impl JsonSchema for LeaseDocument
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for LeaseDocument
impl PartialEq for LeaseDocument
Source§fn eq(&self, other: &LeaseDocument) -> bool
fn eq(&self, other: &LeaseDocument) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for LeaseDocument
impl Serialize for LeaseDocument
impl StructuralPartialEq for LeaseDocument
Auto Trait Implementations§
impl Freeze for LeaseDocument
impl RefUnwindSafe for LeaseDocument
impl Send for LeaseDocument
impl Sync for LeaseDocument
impl Unpin for LeaseDocument
impl UnsafeUnpin for LeaseDocument
impl UnwindSafe for LeaseDocument
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.