Skip to content

Commit 5bdd6f3

Browse files
aw-datastore: Add bucket_id to errors
1 parent 7a19f34 commit 5bdd6f3

File tree

6 files changed

+28
-21
lines changed

6 files changed

+28
-21
lines changed

aw-datastore/src/datastore.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ impl DatastoreInstance {
382382
Err(err) => match err {
383383
rusqlite::Error::SqliteFailure { 0: sqlerr, 1: _ } => match sqlerr.code {
384384
rusqlite::ErrorCode::ConstraintViolation => {
385-
Err(DatastoreError::BucketAlreadyExists)
385+
Err(DatastoreError::BucketAlreadyExists(bucket.id.to_string()))
386386
}
387387
_ => Err(DatastoreError::InternalError(format!(
388388
"Failed to execute create_bucket SQL statement: {}",
@@ -417,7 +417,7 @@ impl DatastoreInstance {
417417
Err(err) => match err {
418418
rusqlite::Error::SqliteFailure { 0: sqlerr, 1: _ } => match sqlerr.code {
419419
rusqlite::ErrorCode::ConstraintViolation => {
420-
Err(DatastoreError::BucketAlreadyExists)
420+
Err(DatastoreError::BucketAlreadyExists(bucket_id.to_string()))
421421
}
422422
_ => Err(DatastoreError::InternalError(err.to_string())),
423423
},
@@ -430,7 +430,7 @@ impl DatastoreInstance {
430430
let cached_bucket = self.buckets_cache.get(bucket_id);
431431
match cached_bucket {
432432
Some(bucket) => Ok(bucket.clone()),
433-
None => Err(DatastoreError::NoSuchBucket),
433+
None => Err(DatastoreError::NoSuchBucket(bucket_id.to_string())),
434434
}
435435
}
436436

@@ -881,7 +881,9 @@ impl DatastoreInstance {
881881
}) {
882882
Ok(result) => Ok(result),
883883
Err(err) => match err {
884-
rusqlite::Error::QueryReturnedNoRows => Err(DatastoreError::NoSuchKey),
884+
rusqlite::Error::QueryReturnedNoRows => {
885+
Err(DatastoreError::NoSuchKey(key.to_string()))
886+
}
885887
_ => Err(DatastoreError::InternalError(format!(
886888
"Get value query failed for key {}",
887889
key
@@ -918,7 +920,9 @@ impl DatastoreInstance {
918920
Ok(output)
919921
}
920922
Err(err) => match err {
921-
rusqlite::Error::QueryReturnedNoRows => Err(DatastoreError::NoSuchKey),
923+
rusqlite::Error::QueryReturnedNoRows => {
924+
Err(DatastoreError::NoSuchKey(pattern.to_string()))
925+
}
922926
_ => Err(DatastoreError::InternalError(format!(
923927
"Failed to get key_value rows starting with pattern {}",
924928
pattern

aw-datastore/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ pub enum DatastoreMethod {
3030
/* TODO: Implement this as a proper error */
3131
#[derive(Debug, Clone)]
3232
pub enum DatastoreError {
33-
NoSuchBucket,
34-
BucketAlreadyExists,
35-
NoSuchKey,
33+
NoSuchBucket(String),
34+
BucketAlreadyExists(String),
35+
NoSuchKey(String),
3636
MpscError,
3737
InternalError(String),
3838
// Errors specific to when migrate is disabled

aw-server/src/endpoints/util.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ impl HttpErrorJson {
2323

2424
impl<'r> Responder<'r> for HttpErrorJson {
2525
fn respond_to(self, _: &Request) -> response::Result<'r> {
26+
// TODO: Fix unwrap
27+
let body = serde_json::to_string(&self).unwrap();
2628
Response::build()
2729
.status(self.status)
28-
.sized_body(Cursor::new(format!("{{\"message\":\"{}\"}}", self.message)))
30+
.sized_body(Cursor::new(body))
2931
.header(ContentType::new("application", "json"))
3032
.ok()
3133
}
@@ -36,16 +38,17 @@ use aw_datastore::DatastoreError;
3638
impl Into<HttpErrorJson> for DatastoreError {
3739
fn into(self) -> HttpErrorJson {
3840
match self {
39-
DatastoreError::NoSuchBucket => HttpErrorJson::new(
41+
DatastoreError::NoSuchBucket(bucket_id) => HttpErrorJson::new(
4042
Status::NotFound,
41-
"The requested bucket does not exist".to_string(),
43+
format!("The requested bucket '{}' does not exist", bucket_id),
4244
),
43-
DatastoreError::BucketAlreadyExists => {
44-
HttpErrorJson::new(Status::NotModified, "Bucket already exists".to_string())
45-
}
46-
DatastoreError::NoSuchKey => HttpErrorJson::new(
45+
DatastoreError::BucketAlreadyExists(bucket_id) => HttpErrorJson::new(
46+
Status::NotModified,
47+
format!("Bucket '{}' already exists", bucket_id),
48+
),
49+
DatastoreError::NoSuchKey(key) => HttpErrorJson::new(
4750
Status::NotFound,
48-
"The requested key does not exist".to_string(),
51+
format!("The requested key(s) '{}' do not exist", key),
4952
),
5053
DatastoreError::MpscError => HttpErrorJson::new(
5154
Status::InternalServerError,

aw-server/tests/api.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ mod api_tests {
8989
assert_eq!(res.status(), rocket::http::Status::NotModified);
9090
assert_eq!(
9191
res.body_string().unwrap(),
92-
"{\"message\":\"Bucket already exists\"}"
92+
r#"{"message":"Bucket 'id' already exists"}"#
9393
);
9494

9595
// Get list of buckets (1 bucket)
@@ -316,7 +316,7 @@ mod api_tests {
316316
assert_eq!(res.status(), rocket::http::Status::InternalServerError);
317317
assert_eq!(
318318
res.body_string().unwrap(),
319-
"{\"message\":\"Failed to import bucket: BucketAlreadyExists\"}"
319+
r#"{"message":"Failed to import bucket: BucketAlreadyExists(\"id1\")"}"#
320320
);
321321

322322
// Export single created bucket

aw-sync/src/sync.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ fn setup_test(sync_directory: &Path) -> std::io::Result<Vec<Datastore>> {
165165
match ds.create_bucket(&bucket) {
166166
Ok(()) => (),
167167
Err(e) => match e {
168-
DatastoreError::BucketAlreadyExists => {
168+
DatastoreError::BucketAlreadyExists(_) => {
169169
debug!("bucket already exists, skipping");
170170
}
171171
e => panic!("woops! {:?}", e),
@@ -205,7 +205,7 @@ fn get_or_create_sync_bucket(bucket_from: &Bucket, ds_to: &dyn AccessMethod) ->
205205

206206
match ds_to.get_bucket(new_id.as_str()) {
207207
Ok(bucket) => bucket,
208-
Err(DatastoreError::NoSuchBucket) => {
208+
Err(DatastoreError::NoSuchBucket(_)) => {
209209
let mut bucket_new = bucket_from.clone();
210210
bucket_new.id = new_id.clone();
211211
// TODO: Replace sync origin with hostname/GUID and discuss how we will treat the data

aw-sync/tests/sync.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ mod sync_tests {
3939
match ds.create_bucket(&bucket) {
4040
Ok(()) => (),
4141
Err(e) => match e {
42-
DatastoreError::BucketAlreadyExists => {
42+
DatastoreError::BucketAlreadyExists(_) => {
4343
debug!("bucket already exists, skipping");
4444
}
4545
e => panic!("woops! {:?}", e),

0 commit comments

Comments
 (0)