Skip to content

Commit ceea9f6

Browse files
committed
More precise error handling in the redb store
1 parent 6a51ac8 commit ceea9f6

1 file changed

Lines changed: 17 additions & 8 deletions

File tree

crates/hotfix/src/store/redb.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use anyhow::Result;
2-
use redb::{Database, ReadableTable, TableDefinition};
2+
use redb::{Database, ReadableTable, TableDefinition, TableError};
33
use std::path::Path;
44

55
use crate::store::MessageStore;
@@ -28,11 +28,14 @@ impl RedbMessageStore {
2828
sender_seq_number = table.get(SENDER_KEY)?.map_or(0, |g| g.value());
2929
target_seq_number = table.get(TARGET_KEY)?.map_or(0, |g| g.value());
3030
}
31-
Err(_) => {
31+
Err(TableError::TableDoesNotExist(_)) => {
3232
// Tables don't exist yet, initialise to 0
3333
sender_seq_number = 0;
3434
target_seq_number = 0;
3535
}
36+
Err(err) => {
37+
return Err(err.into());
38+
}
3639
};
3740
}
3841

@@ -59,12 +62,18 @@ impl MessageStore for RedbMessageStore {
5962
async fn get_slice(&self, begin: usize, end: usize) -> Result<Vec<Vec<u8>>> {
6063
let read_txn = self.db.begin_read()?;
6164
{
62-
let table = read_txn.open_table(MESSAGES_TABLE)?;
63-
let messages: std::result::Result<Vec<Vec<u8>>, redb::StorageError> = table
64-
.range(begin as u64..=end as u64)?
65-
.map(|m| m.map(|v| v.1.value().to_vec()))
66-
.collect();
67-
Ok(messages?)
65+
let res = match read_txn.open_table(MESSAGES_TABLE) {
66+
Ok(table) => {
67+
let messages: std::result::Result<Vec<Vec<u8>>, redb::StorageError> = table
68+
.range(begin as u64..=end as u64)?
69+
.map(|m| m.map(|v| v.1.value().to_vec()))
70+
.collect();
71+
Ok(messages?)
72+
}
73+
Err(TableError::TableDoesNotExist(_)) => Ok(vec![]),
74+
Err(err) => Err(err.into()),
75+
};
76+
res
6877
}
6978
}
7079

0 commit comments

Comments
 (0)