From d78345e694aaae893a0b0c7831d63ea631cbbbe5 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 6 Mar 2021 16:52:36 +0000 Subject: [PATCH] Issue 9968: Avoid blocking update calls --- database.sql | 3 ++- src/Model/Contact.php | 4 +++- static/dbstructure.config.php | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/database.sql b/database.sql index 7e1d996eb4..b033d40b5f 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2021.03-rc (Red Hot Poker) --- DB_UPDATE_VERSION 1408 +-- DB_UPDATE_VERSION 1409 -- ------------------------------------------ @@ -186,6 +186,7 @@ CREATE TABLE IF NOT EXISTS `contact` ( INDEX `blocked_uid` (`blocked`,`uid`), INDEX `uid_rel_network_poll` (`uid`,`rel`,`network`,`poll`(64),`archive`), INDEX `uid_network_batch` (`uid`,`network`,`batch`(64)), + INDEX `batch_contact-type` (`batch`(64),`contact-type`), INDEX `addr_uid` (`addr`(128),`uid`), INDEX `nurl_uid` (`nurl`(128),`uid`), INDEX `nick_uid` (`nick`(128),`uid`), diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 3b65f2af1f..e4cc88240e 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -855,7 +855,9 @@ class Contact if (!empty($contact['batch']) && !empty($contact['term-date']) && ($contact['term-date'] > DBA::NULL_DATETIME)) { $fields = ['failed' => false, 'term-date' => DBA::NULL_DATETIME, 'archive' => false]; $condition = ['uid' => 0, 'network' => Protocol::FEDERATED, 'batch' => $contact['batch'], 'contact-type' => self::TYPE_RELAY]; - DBA::update('contact', $fields, $condition); + if (!DBA::exists('contact', array_merge($condition, $fields))) { + DBA::update('contact', $fields, $condition); + } } $condition = ['`id` = ? AND (`term-date` > ? OR `archive`)', $contact['id'], DBA::NULL_DATETIME]; diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index 2af001e597..91356a018d 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -55,7 +55,7 @@ use Friendica\Database\DBA; if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1408); + define('DB_UPDATE_VERSION', 1409); } return [ @@ -245,6 +245,7 @@ return [ "blocked_uid" => ["blocked", "uid"], "uid_rel_network_poll" => ["uid", "rel", "network", "poll(64)", "archive"], "uid_network_batch" => ["uid", "network", "batch(64)"], + "batch_contact-type" => ["batch(64)", "contact-type"], "addr_uid" => ["addr(128)", "uid"], "nurl_uid" => ["nurl(128)", "uid"], "nick_uid" => ["nick(128)", "uid"],