Skip to content

Commit dc205c9

Browse files
committed
f fixes for review
1 parent b7eb6f7 commit dc205c9

3 files changed

Lines changed: 7 additions & 5 deletions

File tree

proto/vss.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ message ListKeyVersionsRequest {
210210
// Server response for `ListKeyVersions` API.
211211
message ListKeyVersionsResponse {
212212

213-
// Fetched keys and versions.
213+
// Fetched keys and versions, ordered by creation time (oldest first).
214214
// Even though this API reuses the `KeyValue` struct, the `value` sub-field will not be set by the server.
215215
repeated KeyValue key_versions = 1;
216216

rust/api/src/kv_store_tests.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,10 +547,11 @@ pub trait KvStoreTestSuite {
547547
};
548548

549549
if current_page.key_versions.is_empty() {
550+
assert_eq!(current_page.next_page_token, Some(String::new()));
550551
break;
551552
}
552553

553-
assert!(current_page.key_versions.len() <= 1);
554+
assert_eq!(current_page.key_versions.len(), 1);
554555
all_keys.extend(current_page.key_versions.into_iter().map(|kv| kv.key));
555556
next_page_token = current_page.next_page_token;
556557
}

rust/impls/src/postgres_store.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const CREATED_AT_COLUMN: &str = "created_at";
3737

3838
/// Page token is encoded as 20-char zero-padded epoch microseconds followed by the key.
3939
fn encode_page_token(created_at: &chrono::DateTime<Utc>, key: &str) -> String {
40+
// Uses microsecond precision to match the timestamp precision stored in Postgres.
4041
format!("{:020}{}", created_at.timestamp_micros(), key)
4142
}
4243

@@ -686,14 +687,14 @@ where
686687

687688
let rows = if let Some(ref token) = page_token {
688689
let (page_created_at, page_key) = decode_page_token(token)?;
689-
let stmt = "SELECT key, version, created_at FROM vss_db WHERE user_token = $1 AND store_id = $2 AND (created_at, key) > ($3, $4) AND key LIKE $5 ORDER BY created_at, key LIMIT $6";
690+
let stmt = "SELECT key, version, created_at FROM vss_db WHERE user_token = $1 AND store_id = $2 AND (created_at, key) < ($3, $4) AND key LIKE $5 ORDER BY created_at DESC, key DESC LIMIT $6";
690691
let params: Vec<&(dyn tokio_postgres::types::ToSql + Sync)> =
691692
vec![&user_token, &store_id, &page_created_at, &page_key, &key_like, &limit];
692693
conn.query(stmt, &params)
693694
.await
694695
.map_err(|e| Error::new(ErrorKind::Other, format!("Query error: {}", e)))?
695696
} else {
696-
let stmt = "SELECT key, version, created_at FROM vss_db WHERE user_token = $1 AND store_id = $2 AND key LIKE $3 ORDER BY created_at, key LIMIT $4";
697+
let stmt = "SELECT key, version, created_at FROM vss_db WHERE user_token = $1 AND store_id = $2 AND key LIKE $3 ORDER BY created_at DESC, key DESC LIMIT $4";
697698
let params: Vec<&(dyn tokio_postgres::types::ToSql + Sync)> =
698699
vec![&user_token, &store_id, &key_like, &limit];
699700
conn.query(stmt, &params)
@@ -714,7 +715,7 @@ where
714715
let mut next_page_token = Some("".to_string());
715716
if let Some(last_kv) = key_versions.last() {
716717
let last_created_at =
717-
rows[rows.len() - 1].get::<&str, chrono::DateTime<Utc>>(CREATED_AT_COLUMN);
718+
rows.last().unwrap().get::<&str, chrono::DateTime<Utc>>(CREATED_AT_COLUMN);
718719
next_page_token = Some(encode_page_token(&last_created_at, &last_kv.key));
719720
}
720721

0 commit comments

Comments
 (0)