diff --git a/CHANGELOG.md b/CHANGELOG.md index be55e669..6639b1a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ + +## 0.2.5 (2020-03-11) + + +#### Bug Fixes + +* relax MAX_TTL to 9 digits ([9b5bda50](https://github.com/mozilla-services/syncstorage-rs/commit/9b5bda5092ffa8852a812ba4f406358b0e6b780a), closes [#480](https://github.com/mozilla-services/syncstorage-rs/issues/480)) + + + + +## 0.2.4 (2020-03-10) + + +#### Bug Fixes + +* GETs with a limit and no sort never advance X-Weave-Next-Offset ([c95f2ff2](https://github.com/mozilla-services/syncstorage-rs/commit/c95f2ff21a5e3b428b2715018e7e782b22a2dfa8)) + + + ## 0.2.2 (2020-02-12) diff --git a/Cargo.lock b/Cargo.lock index 5349f7f4..f4054783 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2576,7 +2576,7 @@ dependencies = [ [[package]] name = "syncstorage" -version = "0.2.2" +version = "0.2.5" dependencies = [ "actix-cors 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/Cargo.toml b/Cargo.toml index bd380979..442a5090 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "syncstorage" -version = "0.2.2" +version = "0.2.5" license = "MPL-2.0" authors = [ "Ben Bangert ", diff --git a/src/db/mysql/models.rs b/src/db/mysql/models.rs index 950ee230..d2b35b9d 100644 --- a/src/db/mysql/models.rs +++ b/src/db/mysql/models.rs @@ -479,10 +479,11 @@ impl MysqlDb { } query = match sort { - Sorting::Index => query.order(bso::sortindex.desc()), - Sorting::Newest => query.order(bso::modified.desc()), - Sorting::Oldest => query.order(bso::modified.asc()), - _ => query, + Sorting::Index => query.order(bso::id.desc()).order(bso::sortindex.desc()), + Sorting::Newest | Sorting::None => { + query.order(bso::id.desc()).order(bso::modified.desc()) + } + Sorting::Oldest => query.order(bso::id.asc()).order(bso::modified.asc()), }; let limit = limit.map(i64::from).unwrap_or(-1); diff --git a/src/db/spanner/models.rs b/src/db/spanner/models.rs index e15a4f1c..5ca552f5 100644 --- a/src/db/spanner/models.rs +++ b/src/db/spanner/models.rs @@ -1067,10 +1067,11 @@ impl SpannerDb { sqltypes.insert("newer".to_string(), as_type(TypeCode::TIMESTAMP)); } query = match sort { - Sorting::Index => format!("{} ORDER BY sortindex DESC", query), - Sorting::Newest => format!("{} ORDER BY modified DESC", query), - Sorting::Oldest => format!("{} ORDER BY modified ASC", query), - _ => query, + Sorting::Index => format!("{} ORDER BY sortindex DESC, bso_id DESC", query), + Sorting::Newest | Sorting::None => { + format!("{} ORDER BY modified DESC, bso_id DESC", query) + } + Sorting::Oldest => format!("{} ORDER BY modified ASC, bso_id ASC", query), }; if let Some(limit) = limit { diff --git a/src/web/extractors.rs b/src/web/extractors.rs index 3e3d73a3..8b93d823 100644 --- a/src/web/extractors.rs +++ b/src/web/extractors.rs @@ -41,7 +41,7 @@ use crate::web::{ const BATCH_MAX_IDS: usize = 100; // BSO const restrictions -const BSO_MAX_TTL: u32 = 31_536_000; +const BSO_MAX_TTL: u32 = 999_999_999; const BSO_MAX_SORTINDEX_VALUE: i32 = 999_999_999; const BSO_MIN_SORTINDEX_VALUE: i32 = -999_999_999; @@ -2342,4 +2342,21 @@ mod tests { assert_eq!(err["errors"][0]["name"], "uid"); */ } + + #[actix_rt::test] + async fn test_max_ttl() { + let bso_body = json!([ + {"id": "123", "payload": "xxx", "sortindex": 23, "ttl": 94_608_000}, + {"id": "456", "payload": "xxxasdf", "sortindex": 23, "ttl": 999_999_999}, + {"id": "789", "payload": "xxxfoo", "sortindex": 23, "ttl": 1_000_000_000} + ]); + let result = post_collection("", &bso_body) + .await + .expect("Could not get result in test_valid_collection_post_request"); + assert_eq!(result.user_id.legacy_id, *USER_ID); + assert_eq!(&result.collection, "tabs"); + assert_eq!(result.bsos.valid.len(), 2); + assert_eq!(result.bsos.invalid.len(), 1); + assert!(result.bsos.invalid.contains_key("789")); + } }