1
0
Fork 0

Fallback to database lock if locking fails

This commit is contained in:
Michael 2020-11-16 19:46:20 +00:00
parent 0384bf3e76
commit deb6b7a7c3
2 changed files with 15 additions and 5 deletions

View file

@ -122,7 +122,7 @@ class LockFactory
try {
return new Lock\SemaphoreLock();
} catch (\Exception $exception) {
$this->logger->debug('Using Semaphore driver for locking failed.', ['exception' => $exception]);
$this->logger->warning('Using Semaphore driver for locking failed.', ['exception' => $exception]);
}
}
@ -135,7 +135,7 @@ class LockFactory
return new Lock\CacheLock($cache);
}
} catch (\Exception $exception) {
$this->logger->debug('Using Cache driver for locking failed.', ['exception' => $exception]);
$this->logger->warning('Using Cache driver for locking failed.', ['exception' => $exception]);
}
}

View file

@ -1905,10 +1905,16 @@ class Item
}
}
if (DI::lock()->acquire(self::LOCK_INSERT, 0)) {
$locked = DI::lock()->acquire(self::LOCK_INSERT, 0);
if ($locked || DBA::lock('item')) {
$condition = ['uri-id' => $item['uri-id'], 'uid' => $item['uid'], 'network' => $item['network']];
if (DBA::exists('item', $condition)) {
DI::lock()->release(self::LOCK_INSERT);
if ($locked) {
DI::lock()->release(self::LOCK_INSERT);
} else {
DBA::unlock();
}
Logger::notice('Item is already inserted - aborting', $condition);
return 0;
}
@ -1917,7 +1923,11 @@ class Item
// When the item was successfully stored we fetch the ID of the item.
$current_post = DBA::lastInsertId();
DI::lock()->release(self::LOCK_INSERT);
if ($locked) {
DI::lock()->release(self::LOCK_INSERT);
} else {
DBA::unlock();
}
} else {
Logger::warning('Item lock had not been acquired');
$result = false;