did mongodb 4.2 fix upsert duplicate key? - closes #7841

pull/8889/head
Thibault Duplessis 2021-01-07 15:21:05 +01:00
parent 30bf5c44a1
commit 3c90dd78f8
7 changed files with 3 additions and 12 deletions

View File

@ -35,7 +35,6 @@ final class ActivityWriteApi(
_ <- _ <-
(!setters.isEmpty) ?? coll.update (!setters.isEmpty) ?? coll.update
.one($id(a.id), $set(setters), upsert = true) .one($id(a.id), $set(setters), upsert = true)
.recover(ignoreDuplicateKey)
.void .void
} yield () } yield ()
} }
@ -52,7 +51,6 @@ final class ActivityWriteApi(
upsert = true upsert = true
) )
.void .void
.recover(ignoreDuplicateKey)
} }
} }
@ -70,7 +68,6 @@ final class ActivityWriteApi(
upsert = true upsert = true
) )
.void .void
.recover(ignoreDuplicateKey)
} }
def learn(userId: User.ID, stage: String) = def learn(userId: User.ID, stage: String) =
@ -151,8 +148,7 @@ final class ActivityWriteApi(
private def get(userId: User.ID) = coll.byId[Activity, Id](Id today userId) private def get(userId: User.ID) = coll.byId[Activity, Id](Id today userId)
private def getOrCreate(userId: User.ID) = get(userId) map { _ | Activity.make(userId) } private def getOrCreate(userId: User.ID) = get(userId) map { _ | Activity.make(userId) }
private def save(activity: Activity) = private def save(activity: Activity) = coll.update.one($id(activity.id), activity, upsert = true).void
coll.update.one($id(activity.id), activity, upsert = true).void.recover(ignoreDuplicateKey)
private def update(userId: User.ID)(f: Activity => Option[Activity]): Funit = private def update(userId: User.ID)(f: Activity => Option[Activity]): Funit =
getOrCreate(userId) flatMap { old => getOrCreate(userId) flatMap { old =>
f(old) ?? save f(old) ?? save

View File

@ -14,7 +14,7 @@ final class LearnApi(coll: Coll)(implicit ec: scala.concurrent.ExecutionContext)
coll.one[LearnProgress]($id(user.id)) dmap { _ | LearnProgress.empty(LearnProgress.Id(user.id)) } coll.one[LearnProgress]($id(user.id)) dmap { _ | LearnProgress.empty(LearnProgress.Id(user.id)) }
private def save(p: LearnProgress): Funit = private def save(p: LearnProgress): Funit =
coll.update.one($id(p.id), p, upsert = true).void.recover(lila.db.ignoreDuplicateKey) coll.update.one($id(p.id), p, upsert = true).void
def setScore(user: User, stage: String, level: Int, score: StageProgress.Score) = def setScore(user: User, stage: String, level: Int, score: StageProgress.Score) =
get(user) flatMap { prog => get(user) flatMap { prog =>

View File

@ -31,7 +31,6 @@ final class PrefApi(
upsert = true upsert = true
) )
.void .void
.recover(lila.db.ignoreDuplicateKey)
else else
coll.update coll.update
.one($id(user.id), $unset(s"tags.${tag(Pref.Tag)}")) .one($id(user.id), $unset(s"tags.${tag(Pref.Tag)}"))
@ -69,7 +68,7 @@ final class PrefApi(
} }
def setPref(pref: Pref): Funit = def setPref(pref: Pref): Funit =
coll.update.one($id(pref.id), pref, upsert = true).void.recover(lila.db.ignoreDuplicateKey) >>- coll.update.one($id(pref.id), pref, upsert = true).void >>-
cache.put(pref.id, fuccess(pref.some)) cache.put(pref.id, fuccess(pref.some))
def setPref(user: User, change: Pref => Pref): Funit = def setPref(user: User, change: Pref => Pref): Funit =

View File

@ -43,7 +43,6 @@ final class WebSubscriptionApi(coll: Coll)(implicit ec: scala.concurrent.Executi
upsert = true upsert = true
) )
.void .void
.recover(lila.db.ignoreDuplicateKey)
def unsubscribeBySession(sessionId: String): Funit = { def unsubscribeBySession(sessionId: String): Funit = {
coll.delete.one($id(sessionId)).void coll.delete.one($id(sessionId)).void

View File

@ -107,7 +107,6 @@ final private class RelationRepo(coll: Coll, userRepo: lila.user.UserRepo)(impli
upsert = true upsert = true
) )
.void .void
.recover(lila.db.ignoreDuplicateKey)
def remove(u1: ID, u2: ID): Funit = coll.delete.one($id(makeId(u1, u2))).void def remove(u1: ID, u2: ID): Funit = coll.delete.one($id(makeId(u1, u2))).void

View File

@ -80,7 +80,6 @@ final class ShutupApi(
case None => fufail(s"can't find user record for $userId") case None => fufail(s"can't find user record for $userId")
case Some(userRecord) => legiferate(userRecord) case Some(userRecord) => legiferate(userRecord)
} }
.recover(lila.db.ignoreDuplicateKey)
} }
} }

View File

@ -39,7 +39,6 @@ final class RankingApi(
upsert = true upsert = true
) )
.void .void
.recover(lila.db.ignoreDuplicateKey)
def remove(userId: User.ID): Funit = def remove(userId: User.ID): Funit =
userRepo byId userId flatMap { userRepo byId userId flatMap {