]> git.mxchange.org Git - friendica.git/commitdiff
Added lock for contacts, improved logging
authorMichael <heluecht@pirati.ca>
Fri, 30 Oct 2020 17:26:12 +0000 (17:26 +0000)
committerMichael <heluecht@pirati.ca>
Fri, 30 Oct 2020 17:26:12 +0000 (17:26 +0000)
src/Model/Contact.php
src/Model/Item.php

index 428bc3684e024a6d73dadaa5fed4bf13e8f76caf..74a9619c2fdeca224e3665b0c91b138b2686bc65 100644 (file)
@@ -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;
index 2be63d3989e01635774a3db6b46fd9515ff20831..46d28ee8227f7baf5db9d5b42f4284468fa95839 100644 (file)
@@ -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;
                }