diff --git a/lib/private/Authentication/Token/PublicKeyTokenMapper.php b/lib/private/Authentication/Token/PublicKeyTokenMapper.php index 855639dd9072c..f8c4dff48b574 100644 --- a/lib/private/Authentication/Token/PublicKeyTokenMapper.php +++ b/lib/private/Authentication/Token/PublicKeyTokenMapper.php @@ -203,28 +203,6 @@ public function hasExpiredTokens(string $uid): bool { /** * Update the last activity timestamp * - * In highly concurrent setups it can happen that two parallel processes - * trigger the update at (nearly) the same time. In that special case it's - * not necessary to hit the database with two actual updates. Therefore the - * target last activity is included in the WHERE clause with a few seconds - * of tolerance. - * - * Example: - * - process 1 (P1) reads the token at timestamp 1500 - * - process 1 (P2) reads the token at timestamp 1501 - * - activity update interval is 100 - * - * This means - * - * - P1 will see a last_activity smaller than the current time and update - * the token row - * - If P2 reads after P1 had written, it will see 1600 as last activity - * and the comparison on last_activity won't be truthy. This means no rows - * need to be updated a second time - * - If P2 reads before P1 had written, it will see 1501 as last activity, - * but the comparison on last_activity will still not be truthy and the - * token row is not updated a second time - * * @param IToken $token * @param int $now */ @@ -234,7 +212,6 @@ public function updateActivity(IToken $token, int $now): void { ->set('last_activity', $qb->createNamedParameter($now, IQueryBuilder::PARAM_INT)) ->where( $qb->expr()->eq('id', $qb->createNamedParameter($token->getId(), IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT), - $qb->expr()->lt('last_activity', $qb->createNamedParameter($now - 15, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT) ); $update->executeStatement(); }