Fallback to database lock if locking fails
This commit is contained in:
parent
0384bf3e76
commit
deb6b7a7c3
2 changed files with 15 additions and 5 deletions
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue