From da370c44baa17ccf75af8e393c738a91826ebc69 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 30 Oct 2020 17:26:12 +0000 Subject: [PATCH] Added lock for contacts, improved logging --- src/Model/Contact.php | 28 +++++++++++++++++----------- src/Model/Item.php | 9 +++++---- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 428bc3684..74a9619c2 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -91,6 +91,8 @@ class Contact * @} */ + const LOCK_INSERT = 'contact-insert'; + /** * Account types * @@ -1125,19 +1127,23 @@ class Contact $condition = ['nurl' => Strings::normaliseLink($data["url"]), 'uid' => $uid, 'deleted' => false]; // Before inserting we do check if the entry does exist now. - DBA::lock('contact'); - $contact = DBA::selectFirst('contact', ['id'], $condition, ['order' => ['id']]); - if (DBA::isResult($contact)) { - $contact_id = $contact['id']; - Logger::notice('Contact had been created (shortly) before', ['id' => $contact_id, 'url' => $url, 'uid' => $uid]); - } else { - DBA::insert('contact', $fields); - $contact_id = DBA::lastInsertId(); - if ($contact_id) { - Logger::info('Contact inserted', ['id' => $contact_id, 'url' => $url, 'uid' => $uid]); + if (DI::lock()->acquire(self::LOCK_INSERT, 0)) { + $contact = DBA::selectFirst('contact', ['id'], $condition, ['order' => ['id']]); + if (DBA::isResult($contact)) { + $contact_id = $contact['id']; + Logger::notice('Contact had been created (shortly) before', ['id' => $contact_id, 'url' => $url, 'uid' => $uid]); + } else { + DBA::insert('contact', $fields); + $contact_id = DBA::lastInsertId(); + if ($contact_id) { + Logger::info('Contact inserted', ['id' => $contact_id, 'url' => $url, 'uid' => $uid]); + } } + DI::lock()->release(self::LOCK_INSERT); + } else { + Logger::warning('Contact lock had not been acquired'); } - DBA::unlock(); + if (!$contact_id) { Logger::info('Contact was not inserted', ['url' => $url, 'uid' => $uid]); return 0; diff --git a/src/Model/Item.php b/src/Model/Item.php index 2be63d398..46d28ee82 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -71,7 +71,7 @@ class Item const PT_FETCHED = 75; const PT_PERSONAL_NOTE = 128; - const LOCK_ITEM = 'item-insert'; + const LOCK_INSERT = 'item-insert'; // Field list that is used to display the items const DISPLAY_FIELDLIST = [ @@ -1891,10 +1891,10 @@ class Item } } - if (DI::lock()->acquire(self::LOCK_ITEM, 0)) { + if (DI::lock()->acquire(self::LOCK_INSERT, 0)) { $condition = ['uri-id' => $item['uri-id'], 'uid' => $item['uid'], 'network' => $item['network']]; if (DBA::exists('item', $condition)) { - DI::lock()->release(self::LOCK_ITEM); + DI::lock()->release(self::LOCK_INSERT); Logger::notice('Item is already inserted - aborting', $condition); return 0; } @@ -1903,8 +1903,9 @@ class Item // When the item was successfully stored we fetch the ID of the item. $current_post = DBA::lastInsertId(); - DI::lock()->release(self::LOCK_ITEM); + DI::lock()->release(self::LOCK_INSERT); } else { + Logger::warning('Item lock had not been acquired'); $result = false; $current_post = 0; }