fuck it: no locks

This commit is contained in:
Aiden McClelland
2022-11-23 14:22:42 -07:00
parent c54a1f037c
commit 6884b8d230

View File

@@ -77,15 +77,11 @@ where
Ok(db.lock(self.json_ptr().clone().into(), lock_type).await?) Ok(db.lock(self.json_ptr().clone().into(), lock_type).await?)
} }
pub async fn get<Db: DbHandle>(&self, db: &mut Db, lock: bool) -> Result<ModelData<T>, Error> { pub async fn get<Db: DbHandle>(&self, db: &mut Db) -> Result<ModelData<T>, Error> {
if lock {
self.lock(db, LockType::Read).await?;
}
Ok(ModelData(db.get(self.json_ptr()).await?)) Ok(ModelData(db.get(self.json_ptr()).await?))
} }
pub async fn get_mut<Db: DbHandle>(&self, db: &mut Db) -> Result<ModelDataMut<T>, Error> { pub async fn get_mut<Db: DbHandle>(&self, db: &mut Db) -> Result<ModelDataMut<T>, Error> {
self.lock(db, LockType::Write).await?;
let original = db.get_value(self.json_ptr(), None).await?; let original = db.get_value(self.json_ptr(), None).await?;
let current = serde_json::from_value(original.clone())?; let current = serde_json::from_value(original.clone())?;
Ok(ModelDataMut { Ok(ModelDataMut {
@@ -154,7 +150,6 @@ where
db: &mut Db, db: &mut Db,
value: &T, value: &T,
) -> Result<Option<Arc<Revision>>, Error> { ) -> Result<Option<Arc<Revision>>, Error> {
self.lock(db, LockType::Write).await?;
db.put(self.json_ptr(), value).await db.put(self.json_ptr(), value).await
} }
} }
@@ -323,14 +318,7 @@ impl<T: HasModel + Serialize + for<'de> Deserialize<'de>> OptionModel<T> {
Ok(db.lock(self.0.as_ref().clone().into(), lock_type).await?) Ok(db.lock(self.0.as_ref().clone().into(), lock_type).await?)
} }
pub async fn get<Db: DbHandle>( pub async fn get<Db: DbHandle>(&self, db: &mut Db) -> Result<ModelData<Option<T>>, Error> {
&self,
db: &mut Db,
lock: bool,
) -> Result<ModelData<Option<T>>, Error> {
if lock {
self.lock(db, LockType::Read).await?;
}
Ok(ModelData(db.get(self.0.as_ref()).await?)) Ok(ModelData(db.get(self.0.as_ref()).await?))
} }
@@ -338,7 +326,6 @@ impl<T: HasModel + Serialize + for<'de> Deserialize<'de>> OptionModel<T> {
&self, &self,
db: &mut Db, db: &mut Db,
) -> Result<ModelDataMut<Option<T>>, Error> { ) -> Result<ModelDataMut<Option<T>>, Error> {
self.lock(db, LockType::Write).await?;
let original = db.get_value(self.0.as_ref(), None).await?; let original = db.get_value(self.0.as_ref(), None).await?;
let current = serde_json::from_value(original.clone())?; let current = serde_json::from_value(original.clone())?;
Ok(ModelDataMut { Ok(ModelDataMut {
@@ -348,11 +335,7 @@ impl<T: HasModel + Serialize + for<'de> Deserialize<'de>> OptionModel<T> {
}) })
} }
pub async fn exists<Db: DbHandle>(&self, db: &mut Db, lock: bool) -> Result<bool, Error> { pub async fn exists<Db: DbHandle>(&self, db: &mut Db) -> Result<bool, Error> {
if lock {
db.lock(self.0.as_ref().clone().into(), LockType::Exist)
.await?;
}
Ok(db.exists(self.as_ref(), None).await) Ok(db.exists(self.as_ref(), None).await)
} }
@@ -377,8 +360,6 @@ impl<T: HasModel + Serialize + for<'de> Deserialize<'de>> OptionModel<T> {
} }
pub async fn delete<Db: DbHandle>(&self, db: &mut Db) -> Result<Option<Arc<Revision>>, Error> { pub async fn delete<Db: DbHandle>(&self, db: &mut Db) -> Result<Option<Arc<Revision>>, Error> {
db.lock(self.as_ref().clone().into(), LockType::Write)
.await?;
db.put(self.as_ref(), &Value::Null).await db.put(self.as_ref(), &Value::Null).await
} }
} }
@@ -407,7 +388,7 @@ where
T::Model: DerefMut<Target = Model<T>>, T::Model: DerefMut<Target = Model<T>>,
{ {
pub async fn check<Db: DbHandle>(self, db: &mut Db) -> Result<Option<T::Model>, Error> { pub async fn check<Db: DbHandle>(self, db: &mut Db) -> Result<Option<T::Model>, Error> {
Ok(if self.exists(db, true).await? { Ok(if self.exists(db).await? {
Some(self.0) Some(self.0)
} else { } else {
None None
@@ -415,7 +396,7 @@ where
} }
pub async fn expect<Db: DbHandle>(self, db: &mut Db) -> Result<T::Model, Error> { pub async fn expect<Db: DbHandle>(self, db: &mut Db) -> Result<T::Model, Error> {
if self.exists(db, true).await? { if self.exists(db).await? {
Ok(self.0) Ok(self.0)
} else { } else {
Err(Error::NodeDoesNotExist(self.0.into())) Err(Error::NodeDoesNotExist(self.0.into()))
@@ -431,8 +412,6 @@ where
db: &mut Db, db: &mut Db,
value: &T, value: &T,
) -> Result<Option<Arc<Revision>>, Error> { ) -> Result<Option<Arc<Revision>>, Error> {
db.lock(self.as_ref().clone().into(), LockType::Write)
.await?;
db.put(self.as_ref(), value).await db.put(self.as_ref(), value).await
} }
} }
@@ -617,15 +596,7 @@ where
T::Key: Ord + Eq + for<'de> Deserialize<'de>, T::Key: Ord + Eq + for<'de> Deserialize<'de>,
T::Value: Serialize + for<'de> Deserialize<'de>, T::Value: Serialize + for<'de> Deserialize<'de>,
{ {
pub async fn keys<Db: DbHandle>( pub async fn keys<Db: DbHandle>(&self, db: &mut Db) -> Result<BTreeSet<T::Key>, Error> {
&self,
db: &mut Db,
lock: bool,
) -> Result<BTreeSet<T::Key>, Error> {
if lock {
db.lock(self.json_ptr().clone().into(), LockType::Exist)
.await?;
}
let set = db.keys(self.json_ptr(), None).await; let set = db.keys(self.json_ptr(), None).await;
Ok(set Ok(set
.into_iter() .into_iter()
@@ -633,8 +604,6 @@ where
.collect::<Result<_, _>>()?) .collect::<Result<_, _>>()?)
} }
pub async fn remove<Db: DbHandle>(&self, db: &mut Db, key: &T::Key) -> Result<(), Error> { pub async fn remove<Db: DbHandle>(&self, db: &mut Db, key: &T::Key) -> Result<(), Error> {
db.lock(self.as_ref().clone().into(), LockType::Write)
.await?;
if db.exists(self.clone().idx(key).as_ref(), None).await { if db.exists(self.clone().idx(key).as_ref(), None).await {
db.apply( db.apply(
DiffPatch(Patch(vec![PatchOperation::Remove(RemoveOperation { DiffPatch(Patch(vec![PatchOperation::Remove(RemoveOperation {