Merge pull request #126 from djmitche/async

Make Storage methods async
This commit is contained in:
Dustin J. Mitchell 2025-07-13 09:25:43 -04:00 committed by GitHub
commit c539e604d9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 594 additions and 422 deletions

View file

@ -49,6 +49,7 @@ pub(crate) async fn service(
server_state
.server
.add_snapshot(client_id, version_id, body.to_vec())
.await
.map_err(server_error_to_actix)?;
Ok(HttpResponse::Ok().body(""))
}
@ -70,10 +71,10 @@ mod test {
// set up the storage contents..
{
let mut txn = storage.txn(client_id).unwrap();
txn.new_client(version_id).unwrap();
txn.add_version(version_id, NIL_VERSION_ID, vec![])?;
txn.commit()?;
let mut txn = storage.txn(client_id).await.unwrap();
txn.new_client(version_id).await.unwrap();
txn.add_version(version_id, NIL_VERSION_ID, vec![]).await?;
txn.commit().await?;
}
let server = WebServer::new(ServerConfig::default(), WebConfig::default(), storage);
@ -114,9 +115,9 @@ mod test {
// set up the storage contents..
{
let mut txn = storage.txn(client_id).unwrap();
txn.new_client(NIL_VERSION_ID).unwrap();
txn.commit().unwrap();
let mut txn = storage.txn(client_id).await.unwrap();
txn.new_client(NIL_VERSION_ID).await.unwrap();
txn.commit().await.unwrap();
}
let server = WebServer::new(ServerConfig::default(), WebConfig::default(), storage);

View file

@ -60,6 +60,7 @@ pub(crate) async fn service(
return match server_state
.server
.add_version(client_id, parent_version_id, body.to_vec())
.await
{
Ok((AddVersionResult::Ok(version_id), snap_urgency)) => {
let mut rb = HttpResponse::Ok();
@ -85,9 +86,12 @@ pub(crate) async fn service(
let mut txn = server_state
.server
.txn(client_id)
.await
.map_err(server_error_to_actix)?;
txn.new_client(NIL_VERSION_ID).map_err(failure_to_ise)?;
txn.commit().map_err(failure_to_ise)?;
txn.new_client(NIL_VERSION_ID)
.await
.map_err(failure_to_ise)?;
txn.commit().await.map_err(failure_to_ise)?;
continue;
}
Err(e) => Err(server_error_to_actix(e)),
@ -113,9 +117,9 @@ mod test {
// set up the storage contents..
{
let mut txn = storage.txn(client_id).unwrap();
txn.new_client(Uuid::nil()).unwrap();
txn.commit().unwrap();
let mut txn = storage.txn(client_id).await.unwrap();
txn.new_client(Uuid::nil()).await.unwrap();
txn.commit().await.unwrap();
}
let server = WebServer::new(ServerConfig::default(), WebConfig::default(), storage);
@ -187,8 +191,8 @@ mod test {
// Check that the client really was created
{
let mut txn = server.server_state.server.txn(client_id).unwrap();
let client = txn.get_client().unwrap().unwrap();
let mut txn = server.server_state.server.txn(client_id).await.unwrap();
let client = txn.get_client().await.unwrap().unwrap();
assert_eq!(client.latest_version_id, new_version_id);
assert_eq!(client.snapshot, None);
}
@ -233,9 +237,9 @@ mod test {
// set up the storage contents..
{
let mut txn = storage.txn(client_id).unwrap();
txn.new_client(version_id).unwrap();
txn.commit().unwrap();
let mut txn = storage.txn(client_id).await.unwrap();
txn.new_client(version_id).await.unwrap();
txn.commit().await.unwrap();
}
let server = WebServer::new(ServerConfig::default(), WebConfig::default(), storage);

View file

@ -26,6 +26,7 @@ pub(crate) async fn service(
match server_state
.server
.get_child_version(client_id, parent_version_id)
.await
{
Ok(GetVersionResult::Success {
version_id,
@ -64,11 +65,12 @@ mod test {
// set up the storage contents..
{
let mut txn = storage.txn(client_id).unwrap();
txn.new_client(Uuid::new_v4()).unwrap();
let mut txn = storage.txn(client_id).await.unwrap();
txn.new_client(Uuid::new_v4()).await.unwrap();
txn.add_version(version_id, parent_version_id, b"abcd".to_vec())
.await
.unwrap();
txn.commit().unwrap();
txn.commit().await.unwrap();
}
let server = WebServer::new(ServerConfig::default(), WebConfig::default(), storage);
@ -128,11 +130,12 @@ mod test {
// create the client and a single version.
{
let mut txn = storage.txn(client_id).unwrap();
txn.new_client(Uuid::new_v4()).unwrap();
let mut txn = storage.txn(client_id).await.unwrap();
txn.new_client(Uuid::new_v4()).await.unwrap();
txn.add_version(test_version_id, NIL_VERSION_ID, b"vers".to_vec())
.await
.unwrap();
txn.commit().unwrap();
txn.commit().await.unwrap();
}
let server = WebServer::new(ServerConfig::default(), WebConfig::default(), storage);
let app = App::new().configure(|sc| server.config(sc));

View file

@ -20,6 +20,7 @@ pub(crate) async fn service(
if let Some((version_id, data)) = server_state
.server
.get_snapshot(client_id)
.await
.map_err(server_error_to_actix)?
{
Ok(HttpResponse::Ok()
@ -48,9 +49,9 @@ mod test {
// set up the storage contents..
{
let mut txn = storage.txn(client_id).unwrap();
txn.new_client(Uuid::new_v4()).unwrap();
txn.commit().unwrap();
let mut txn = storage.txn(client_id).await.unwrap();
txn.new_client(Uuid::new_v4()).await.unwrap();
txn.commit().await.unwrap();
}
let server = WebServer::new(ServerConfig::default(), WebConfig::default(), storage);
@ -75,8 +76,8 @@ mod test {
// set up the storage contents..
{
let mut txn = storage.txn(client_id).unwrap();
txn.new_client(Uuid::new_v4()).unwrap();
let mut txn = storage.txn(client_id).await.unwrap();
txn.new_client(Uuid::new_v4()).await.unwrap();
txn.set_snapshot(
Snapshot {
version_id,
@ -85,8 +86,9 @@ mod test {
},
snapshot_data.clone(),
)
.await
.unwrap();
txn.commit().unwrap();
txn.commit().await.unwrap();
}
let server = WebServer::new(ServerConfig::default(), WebConfig::default(), storage);