Revert breaking change on key clash and introduce new error (#2823)
This commit is contained in:
parent
05907db1ea
commit
7d5d6c4325
5 changed files with 14 additions and 9 deletions
|
@ -79,8 +79,9 @@ pub enum Error {
|
||||||
TxConditionNotMet,
|
TxConditionNotMet,
|
||||||
|
|
||||||
/// The key being inserted in the transaction already exists
|
/// The key being inserted in the transaction already exists
|
||||||
#[error("The key being inserted already exists: {0}")]
|
#[error("The key being inserted already exists")]
|
||||||
TxKeyAlreadyExists(KeyCategory),
|
#[deprecated(note = "Use TxKeyAlreadyExistsCategory")]
|
||||||
|
TxKeyAlreadyExists,
|
||||||
|
|
||||||
/// The key exceeds a limit set by the KV store
|
/// The key exceeds a limit set by the KV store
|
||||||
#[error("Record id or key is too large")]
|
#[error("Record id or key is too large")]
|
||||||
|
@ -713,6 +714,10 @@ pub enum Error {
|
||||||
/// Auth was expected to be set but was unknown
|
/// Auth was expected to be set but was unknown
|
||||||
#[error("Auth was expected to be set but was unknown")]
|
#[error("Auth was expected to be set but was unknown")]
|
||||||
UnknownAuth,
|
UnknownAuth,
|
||||||
|
|
||||||
|
/// The key being inserted in the transaction already exists
|
||||||
|
#[error("The key being inserted already exists: {0}")]
|
||||||
|
TxKeyAlreadyExistsCategory(KeyCategory),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Error> for String {
|
impl From<Error> for String {
|
||||||
|
@ -738,7 +743,7 @@ impl From<echodb::err::Error> for Error {
|
||||||
fn from(e: echodb::err::Error) -> Error {
|
fn from(e: echodb::err::Error) -> Error {
|
||||||
match e {
|
match e {
|
||||||
echodb::err::Error::KeyAlreadyExists => {
|
echodb::err::Error::KeyAlreadyExists => {
|
||||||
Error::TxKeyAlreadyExists(crate::key::error::KeyCategory::Unknown)
|
Error::TxKeyAlreadyExistsCategory(crate::key::error::KeyCategory::Unknown)
|
||||||
}
|
}
|
||||||
echodb::err::Error::ValNotExpectedValue => Error::TxConditionNotMet,
|
echodb::err::Error::ValNotExpectedValue => Error::TxConditionNotMet,
|
||||||
_ => Error::Tx(e.to_string()),
|
_ => Error::Tx(e.to_string()),
|
||||||
|
@ -751,7 +756,7 @@ impl From<indxdb::err::Error> for Error {
|
||||||
fn from(e: indxdb::err::Error) -> Error {
|
fn from(e: indxdb::err::Error) -> Error {
|
||||||
match e {
|
match e {
|
||||||
indxdb::err::Error::KeyAlreadyExists => {
|
indxdb::err::Error::KeyAlreadyExists => {
|
||||||
Error::TxKeyAlreadyExists(crate::key::error::KeyCategory::Unknown)
|
Error::TxKeyAlreadyExistsCategory(crate::key::error::KeyCategory::Unknown)
|
||||||
}
|
}
|
||||||
indxdb::err::Error::ValNotExpectedValue => Error::TxConditionNotMet,
|
indxdb::err::Error::ValNotExpectedValue => Error::TxConditionNotMet,
|
||||||
_ => Error::Tx(e.to_string()),
|
_ => Error::Tx(e.to_string()),
|
||||||
|
@ -764,7 +769,7 @@ impl From<tikv::Error> for Error {
|
||||||
fn from(e: tikv::Error) -> Error {
|
fn from(e: tikv::Error) -> Error {
|
||||||
match e {
|
match e {
|
||||||
tikv::Error::DuplicateKeyInsertion => {
|
tikv::Error::DuplicateKeyInsertion => {
|
||||||
Error::TxKeyAlreadyExists(crate::key::error::KeyCategory::Unknown)
|
Error::TxKeyAlreadyExistsCategory(crate::key::error::KeyCategory::Unknown)
|
||||||
}
|
}
|
||||||
tikv::Error::KeyError(ke) if ke.abort.contains("KeyTooLarge") => Error::TxKeyTooLarge,
|
tikv::Error::KeyError(ke) if ke.abort.contains("KeyTooLarge") => Error::TxKeyTooLarge,
|
||||||
tikv::Error::RegionError(re) if re.raft_entry_too_large.is_some() => Error::TxTooLarge,
|
tikv::Error::RegionError(re) if re.raft_entry_too_large.is_some() => Error::TxTooLarge,
|
||||||
|
|
|
@ -320,7 +320,7 @@ impl Transaction {
|
||||||
}
|
}
|
||||||
let key: Vec<u8> = key.into();
|
let key: Vec<u8> = key.into();
|
||||||
if self.exi(key.clone().as_slice()).await? {
|
if self.exi(key.clone().as_slice()).await? {
|
||||||
return Err(Error::TxKeyAlreadyExists(category));
|
return Err(Error::TxKeyAlreadyExistsCategory(category));
|
||||||
}
|
}
|
||||||
// Set the key
|
// Set the key
|
||||||
let key: &[u8] = &key[..];
|
let key: &[u8] = &key[..];
|
||||||
|
|
|
@ -293,7 +293,7 @@ impl Transaction {
|
||||||
// Set the key if empty
|
// Set the key if empty
|
||||||
match inner.get_opt(&key, &self.ro)? {
|
match inner.get_opt(&key, &self.ro)? {
|
||||||
None => inner.put(key, val)?,
|
None => inner.put(key, val)?,
|
||||||
_ => return Err(Error::TxKeyAlreadyExists(category)),
|
_ => return Err(Error::TxKeyAlreadyExistsCategory(category)),
|
||||||
};
|
};
|
||||||
// Return result
|
// Return result
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -293,7 +293,7 @@ impl Transaction {
|
||||||
// Set the key if empty
|
// Set the key if empty
|
||||||
match inner.get_opt(&key, &self.ro)? {
|
match inner.get_opt(&key, &self.ro)? {
|
||||||
None => inner.put(key, val)?,
|
None => inner.put(key, val)?,
|
||||||
_ => return Err(Error::TxKeyAlreadyExists(category)),
|
_ => return Err(Error::TxKeyAlreadyExistsCategory(category)),
|
||||||
};
|
};
|
||||||
// Return result
|
// Return result
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -292,7 +292,7 @@ impl Transaction {
|
||||||
// Set the key if empty
|
// Set the key if empty
|
||||||
match self.inner.key_exists(key.clone()).await? {
|
match self.inner.key_exists(key.clone()).await? {
|
||||||
false => self.inner.put(key, val).await?,
|
false => self.inner.put(key, val).await?,
|
||||||
_ => return Err(Error::TxKeyAlreadyExists(category)),
|
_ => return Err(Error::TxKeyAlreadyExistsCategory(category)),
|
||||||
};
|
};
|
||||||
// Return result
|
// Return result
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Reference in a new issue