mirror of
https://github.com/GothenburgBitFactory/taskchampion-sync-server.git
synced 2025-08-02 23:48:38 +02:00
Make Storage methods async
This will better support concurrent requests.
This commit is contained in:
parent
4de5c9a345
commit
7559364017
13 changed files with 597 additions and 412 deletions
|
@ -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(Default::default(), None, 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(Default::default(), None, storage);
|
||||
|
|
|
@ -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(Default::default(), None, storage);
|
||||
|
@ -183,8 +187,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);
|
||||
}
|
||||
|
@ -199,9 +203,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(Default::default(), None, storage);
|
||||
|
|
|
@ -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(Default::default(), None, 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(Default::default(), None, storage);
|
||||
let app = App::new().configure(|sc| server.config(sc));
|
||||
|
|
|
@ -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(Default::default(), None, 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(Default::default(), None, storage);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue