add num_local_operations to Replica

This commit is contained in:
Dustin J. Mitchell
2022-04-23 18:51:40 +00:00
parent 6f8c734186
commit fd504b7d66
5 changed files with 30 additions and 0 deletions

View File

@@ -254,6 +254,11 @@ impl Replica {
} }
Ok(()) Ok(())
} }
/// Get the number of operations local to this replica and not yet synchronized to the server.
pub fn num_local_operations(&mut self) -> anyhow::Result<usize> {
self.taskdb.num_operations()
}
} }
#[cfg(test)] #[cfg(test)]
@@ -399,6 +404,8 @@ mod tests {
}, },
] ]
); );
assert_eq!(rep.num_local_operations().unwrap(), 10);
} }
#[test] #[test]

View File

@@ -91,6 +91,10 @@ impl<'t> StorageTxn for Txn<'t> {
Ok(self.data_ref().operations.clone()) Ok(self.data_ref().operations.clone())
} }
fn num_operations(&mut self) -> anyhow::Result<usize> {
Ok(self.data_ref().operations.len())
}
fn add_operation(&mut self, op: ReplicaOp) -> anyhow::Result<()> { fn add_operation(&mut self, op: ReplicaOp) -> anyhow::Result<()> {
self.mut_data_ref().operations.push(op); self.mut_data_ref().operations.push(op);
Ok(()) Ok(())

View File

@@ -82,6 +82,10 @@ pub trait StorageTxn {
/// server yet) /// server yet)
fn operations(&mut self) -> Result<Vec<ReplicaOp>>; fn operations(&mut self) -> Result<Vec<ReplicaOp>>;
/// Get the current set of outstanding operations (operations that have not been sync'd to the
/// server yet)
fn num_operations(&mut self) -> Result<usize>;
/// Add an operation to the end of the list of operations in the storage. Note that this /// Add an operation to the end of the list of operations in the storage. Note that this
/// merely *stores* the operation; it is up to the TaskDb to apply it. /// merely *stores* the operation; it is up to the TaskDb to apply it.
fn add_operation(&mut self, op: ReplicaOp) -> Result<()>; fn add_operation(&mut self, op: ReplicaOp) -> Result<()>;

View File

@@ -257,6 +257,12 @@ impl<'t> StorageTxn for Txn<'t> {
Ok(ret) Ok(ret)
} }
fn num_operations(&mut self) -> anyhow::Result<usize> {
let t = self.get_txn()?;
let count: usize = t.query_row("SELECT count(*) FROM operations", [], |x| x.get(0))?;
Ok(count)
}
fn add_operation(&mut self, op: ReplicaOp) -> anyhow::Result<()> { fn add_operation(&mut self, op: ReplicaOp) -> anyhow::Result<()> {
let t = self.get_txn()?; let t = self.get_txn()?;
@@ -627,6 +633,8 @@ mod test {
ReplicaOp::Create { uuid: uuid2 }, ReplicaOp::Create { uuid: uuid2 },
] ]
); );
assert_eq!(txn.num_operations()?, 2);
} }
// set them to a different bunch // set them to a different bunch
@@ -678,6 +686,7 @@ mod test {
}, },
] ]
); );
assert_eq!(txn.num_operations()?, 4);
} }
Ok(()) Ok(())
} }

View File

@@ -128,6 +128,12 @@ impl TaskDb {
undo::undo(txn.as_mut()) undo::undo(txn.as_mut())
} }
/// Get the number of un-synchronized operations in storage.
pub fn num_operations(&mut self) -> anyhow::Result<usize> {
let mut txn = self.storage.txn().unwrap();
txn.num_operations()
}
// functions for supporting tests // functions for supporting tests
#[cfg(test)] #[cfg(test)]