diff --git a/src/io/postgres_store/mod.rs b/src/io/postgres_store/mod.rs index 241df19cf8..a80fec2952 100644 --- a/src/io/postgres_store/mod.rs +++ b/src/io/postgres_store/mod.rs @@ -854,7 +854,12 @@ impl PostgresStoreInner { &self, inner_lock_ref: Arc>, locking_key: String, version: u64, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: Vec, ) -> io::Result<()> { - check_namespace_key_validity(primary_namespace, secondary_namespace, Some(key), "write")?; + if let Err(e) = + check_namespace_key_validity(primary_namespace, secondary_namespace, Some(key), "write") + { + self.clean_locks(&inner_lock_ref, locking_key); + return Err(e.into()); + } self.execute_locked_write(inner_lock_ref, locking_key, version, async move || { let kv_table = &self.kv_table_name_sql; @@ -914,7 +919,15 @@ impl PostgresStoreInner { &self, inner_lock_ref: Arc>, locking_key: String, version: u64, primary_namespace: &str, secondary_namespace: &str, key: &str, ) -> io::Result<()> { - check_namespace_key_validity(primary_namespace, secondary_namespace, Some(key), "remove")?; + if let Err(e) = check_namespace_key_validity( + primary_namespace, + secondary_namespace, + Some(key), + "remove", + ) { + self.clean_locks(&inner_lock_ref, locking_key); + return Err(e.into()); + } self.execute_locked_write(inner_lock_ref, locking_key, version, async move || { let kv_table = &self.kv_table_name_sql; diff --git a/src/io/sqlite_store/mod.rs b/src/io/sqlite_store/mod.rs index 8112140a73..be7cb06b45 100644 --- a/src/io/sqlite_store/mod.rs +++ b/src/io/sqlite_store/mod.rs @@ -429,7 +429,12 @@ impl SqliteStoreInner { &self, inner_lock_ref: Arc>, locking_key: String, version: u64, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: Vec, ) -> io::Result<()> { - check_namespace_key_validity(primary_namespace, secondary_namespace, Some(key), "write")?; + if let Err(e) = + check_namespace_key_validity(primary_namespace, secondary_namespace, Some(key), "write") + { + self.clean_locks(&inner_lock_ref, locking_key); + return Err(e.into()); + } self.execute_locked_write(inner_lock_ref, locking_key, version, || { let locked_conn = self.connection.lock().expect("lock"); @@ -473,7 +478,15 @@ impl SqliteStoreInner { &self, inner_lock_ref: Arc>, locking_key: String, version: u64, primary_namespace: &str, secondary_namespace: &str, key: &str, ) -> io::Result<()> { - check_namespace_key_validity(primary_namespace, secondary_namespace, Some(key), "remove")?; + if let Err(e) = check_namespace_key_validity( + primary_namespace, + secondary_namespace, + Some(key), + "remove", + ) { + self.clean_locks(&inner_lock_ref, locking_key); + return Err(e.into()); + } self.execute_locked_write(inner_lock_ref, locking_key, version, || { let locked_conn = self.connection.lock().expect("lock");