Skip to content

Commit 4c7a78c

Browse files
committed
Remove invalid store error
Signed-off-by: Ryan Levick <[email protected]>
1 parent e62a963 commit 4c7a78c

File tree

3 files changed

+15
-55
lines changed

3 files changed

+15
-55
lines changed

crates/key-value-sqlite/src/lib.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,6 @@ mod test {
158158
)])),
159159
);
160160

161-
assert!(matches!(
162-
kv.exists(Resource::new_own(42), "bar".to_owned()).await?,
163-
Err(Error::InvalidStore)
164-
));
165-
166161
assert!(matches!(
167162
kv.open("foo".to_owned()).await?,
168163
Err(Error::NoSuchStore)
@@ -235,11 +230,6 @@ mod test {
235230

236231
kv.drop(Resource::new_own(rep))?;
237232

238-
assert!(matches!(
239-
kv.exists(Resource::new_own(rep), "bar".to_owned()).await?,
240-
Err(Error::InvalidStore)
241-
));
242-
243233
Ok(())
244234
}
245235
}

crates/key-value/src/lib.rs

Lines changed: 15 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::Result;
1+
use anyhow::{Context, Result};
22
use spin_app::MetadataKey;
33
use spin_core::{async_trait, wasmtime::component::Resource};
44
use spin_world::v2::key_value;
@@ -55,6 +55,10 @@ impl KeyValueDispatch {
5555
self.allowed_stores = allowed_stores;
5656
self.manager = manager;
5757
}
58+
59+
pub fn get_store(&self, store: Resource<key_value::Store>) -> anyhow::Result<&Arc<dyn Store>> {
60+
self.stores.get(store.rep()).context("invalid store")
61+
}
5862
}
5963

6064
impl Default for KeyValueDispatch {
@@ -88,14 +92,8 @@ impl key_value::HostStore for KeyValueDispatch {
8892
store: Resource<key_value::Store>,
8993
key: String,
9094
) -> Result<Result<Option<Vec<u8>>, Error>> {
91-
Ok(async {
92-
self.stores
93-
.get(store.rep())
94-
.ok_or(Error::InvalidStore)?
95-
.get(&key)
96-
.await
97-
}
98-
.await)
95+
let store = self.get_store(store)?;
96+
Ok(store.get(&key).await)
9997
}
10098

10199
async fn set(
@@ -104,58 +102,34 @@ impl key_value::HostStore for KeyValueDispatch {
104102
key: String,
105103
value: Vec<u8>,
106104
) -> Result<Result<(), Error>> {
107-
Ok(async {
108-
self.stores
109-
.get(store.rep())
110-
.ok_or(Error::InvalidStore)?
111-
.set(&key, &value)
112-
.await
113-
}
114-
.await)
105+
let store = self.get_store(store)?;
106+
Ok(store.set(&key, &value).await)
115107
}
116108

117109
async fn delete(
118110
&mut self,
119111
store: Resource<key_value::Store>,
120112
key: String,
121113
) -> Result<Result<(), Error>> {
122-
Ok(async {
123-
self.stores
124-
.get(store.rep())
125-
.ok_or(Error::InvalidStore)?
126-
.delete(&key)
127-
.await
128-
}
129-
.await)
114+
let store = self.get_store(store)?;
115+
Ok(store.delete(&key).await)
130116
}
131117

132118
async fn exists(
133119
&mut self,
134120
store: Resource<key_value::Store>,
135121
key: String,
136122
) -> Result<Result<bool, Error>> {
137-
Ok(async {
138-
self.stores
139-
.get(store.rep())
140-
.ok_or(Error::InvalidStore)?
141-
.exists(&key)
142-
.await
143-
}
144-
.await)
123+
let store = self.get_store(store)?;
124+
Ok(store.exists(&key).await)
145125
}
146126

147127
async fn get_keys(
148128
&mut self,
149129
store: Resource<key_value::Store>,
150130
) -> Result<Result<Vec<String>, Error>> {
151-
Ok(async {
152-
self.stores
153-
.get(store.rep())
154-
.ok_or(Error::InvalidStore)?
155-
.get_keys()
156-
.await
157-
}
158-
.await)
131+
let store = self.get_store(store)?;
132+
Ok(store.get_keys().await)
159133
}
160134

161135
fn drop(&mut self, store: Resource<key_value::Store>) -> Result<()> {
@@ -176,7 +150,6 @@ fn to_legacy_error(value: key_value::Error) -> LegacyError {
176150
Error::StoreTableFull => LegacyError::StoreTableFull,
177151
Error::NoSuchStore => LegacyError::NoSuchStore,
178152
Error::AccessDenied => LegacyError::AccessDenied,
179-
Error::InvalidStore => LegacyError::InvalidStore,
180153
Error::Io(s) => LegacyError::Io(s),
181154
}
182155
}

wit/preview2/key-value.wit

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@ interface key-value {
4141
/// (which may or may not exist).
4242
access-denied,
4343

44-
/// The store handle provided is not recognized
45-
invalid-store,
46-
4744
/// Some implementation-specific error has occurred (e.g. I/O)
4845
io(string)
4946
}

0 commit comments

Comments
 (0)