X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FLock%2FDatabaseLockDriver.php;h=a8788d1f45bf1400b9e96a125c10c28bc9891394;hb=a8d3a4d218b9c844b7a5d4134fb7f27d64be559d;hp=6f4b942a4d2a72a4caa55075298f18265646bd16;hpb=3eec97aa6e84961c8d2ce2ea3f47d92f0e4bdb4f;p=friendica.git diff --git a/src/Core/Lock/DatabaseLockDriver.php b/src/Core/Lock/DatabaseLockDriver.php index 6f4b942a4d..a8788d1f45 100644 --- a/src/Core/Lock/DatabaseLockDriver.php +++ b/src/Core/Lock/DatabaseLockDriver.php @@ -2,8 +2,8 @@ namespace Friendica\Core\Lock; -use dba; -use Friendica\Database\DBM; +use Friendica\Core\Cache; +use Friendica\Database\DBA; use Friendica\Util\DateTimeFormat; /** @@ -14,35 +14,33 @@ class DatabaseLockDriver extends AbstractLockDriver /** * (@inheritdoc) */ - public function acquireLock($key, $timeout = 120) + public function acquireLock($key, $timeout = 120, $ttl = Cache::FIVE_MINUTES) { $got_lock = false; $start = time(); do { - dba::lock('locks'); - $lock = dba::selectFirst('locks', ['locked', 'pid'], ['`name` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]); + DBA::lock('locks'); + $lock = DBA::selectFirst('locks', ['locked', 'pid'], ['`name` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]); - if (DBM::is_result($lock)) { + if (DBA::isResult($lock)) { if ($lock['locked']) { // We want to lock something that was already locked by us? So we got the lock. if ($lock['pid'] == getmypid()) { $got_lock = true; - $this->markAcquire($key); } } if (!$lock['locked']) { - dba::update('locks', ['locked' => true, 'pid' => getmypid(), 'expires' => DateTimeFormat::utc('now + 300seconds')], ['name' => $key]); + DBA::update('locks', ['locked' => true, 'pid' => getmypid(), 'expires' => DateTimeFormat::utc('now + ' . $ttl . 'seconds')], ['name' => $key]); $got_lock = true; - $this->markAcquire($key); } } else { - dba::insert('locks', ['name' => $key, 'locked' => true, 'pid' => getmypid(), 'expires' => DateTimeFormat::utc('now + 300seconds')]); + DBA::insert('locks', ['name' => $key, 'locked' => true, 'pid' => getmypid(), 'expires' => DateTimeFormat::utc('now + ' . $ttl . 'seconds')]); $got_lock = true; $this->markAcquire($key); } - dba::unlock(); + DBA::unlock(); if (!$got_lock && ($timeout > 0)) { usleep(rand(100000, 2000000)); @@ -57,7 +55,7 @@ class DatabaseLockDriver extends AbstractLockDriver */ public function releaseLock($key) { - dba::delete('locks', ['name' => $key, 'pid' => getmypid()]); + DBA::delete('locks', ['name' => $key, 'pid' => getmypid()]); $this->markRelease($key); @@ -69,7 +67,7 @@ class DatabaseLockDriver extends AbstractLockDriver */ public function releaseAll() { - dba::delete('locks', ['pid' => getmypid()]); + DBA::delete('locks', ['pid' => getmypid()]); $this->acquiredLocks = []; } @@ -79,9 +77,9 @@ class DatabaseLockDriver extends AbstractLockDriver */ public function isLocked($key) { - $lock = dba::selectFirst('locks', ['locked'], ['`name` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]); + $lock = DBA::selectFirst('locks', ['locked'], ['`name` = ? AND `expires` >= ?', $key, DateTimeFormat::utcNow()]); - if (DBM::is_result($lock)) { + if (DBA::isResult($lock)) { return $lock['locked'] !== false; } else { return false;