From 9ffde01fc16f5c5ffa58a79a6b4ae51b3762ef4d Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 5 Dec 2017 21:30:38 +0000 Subject: [PATCH] DBClean now works with the conversation table as well --- boot.php | 4 ++-- database.sql | 5 +++-- include/dbstructure.php | 1 + src/Worker/DBClean.php | 44 ++++++++++++++++++++++++++++++----------- update.php | 2 +- 5 files changed, 40 insertions(+), 16 deletions(-) diff --git a/boot.php b/boot.php index 15dfec48b8..eda8a4037d 100644 --- a/boot.php +++ b/boot.php @@ -44,7 +44,7 @@ define('FRIENDICA_PLATFORM', 'Friendica'); define('FRIENDICA_CODENAME', 'Asparagus'); define('FRIENDICA_VERSION', '3.6-dev'); define('DFRN_PROTOCOL_VERSION', '2.23'); -define('DB_UPDATE_VERSION', 1235); +define('DB_UPDATE_VERSION', 1236); /** * @brief Constant with a HTML line break. @@ -686,7 +686,7 @@ function update_db(App $a) // Compare the current structure with the defined structure $t = Config::get('database', 'dbupdate_' . DB_UPDATE_VERSION); - if ($t !== false) { + if (!is_null($t)) { return; } diff --git a/database.sql b/database.sql index e4e891e482..09f1a83cc1 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 3.6-dev (Asparagus) --- DB_UPDATE_VERSION 1235 +-- DB_UPDATE_VERSION 1236 -- ------------------------------------------ @@ -216,7 +216,8 @@ CREATE TABLE IF NOT EXISTS `conversation` ( `source` mediumtext, `received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`item-uri`), - INDEX `conversation-uri` (`conversation-uri`) + INDEX `conversation-uri` (`conversation-uri`), + INDEX `received` (`received`) ) DEFAULT COLLATE utf8mb4_general_ci; -- diff --git a/include/dbstructure.php b/include/dbstructure.php index cb2883d40d..3c620d7d72 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -831,6 +831,7 @@ function db_definition() { "indexes" => array( "PRIMARY" => array("item-uri"), "conversation-uri" => array("conversation-uri"), + "received" => array("received"), ) ); $database["event"] = array( diff --git a/src/Worker/DBClean.php b/src/Worker/DBClean.php index 7030081dc9..dc2075f9a8 100644 --- a/src/Worker/DBClean.php +++ b/src/Worker/DBClean.php @@ -21,10 +21,10 @@ class DBClean { $days = Config::get('system', 'dbclean-expire-days', 0); if ($stage == 0) { - for ($i = 1; $i <= 9; $i++) { + for ($i = 1; $i <= 10; $i++) { // Execute the background script for a step when it isn't finished. // Execute step 8 and 9 only when $days is defined. - if (!Config::get('system', 'finished-dbclean-'.$i, false) && (($i < 8) || ($days > 0))) { + if (!Config::get('system', 'finished-dbclean-'.$i, false) && (($i < 8) || ($i > 9) || ($days > 0))) { Worker::add(PRIORITY_LOW, 'DBClean', $i); } } @@ -39,15 +39,16 @@ class DBClean { * * Values for $stage: * ------------------ - * 1: Old global item entries from item table without user copy. - * 2: Items without parents. - * 3: Orphaned data from thread table. - * 4: Orphaned data from notify table. - * 5: Orphaned data from notify-threads table. - * 6: Orphaned data from sign table. - * 7: Orphaned data from term table. - * 8: Expired threads. - * 9: Old global item entries from expired threads + * 1: Old global item entries from item table without user copy. + * 2: Items without parents. + * 3: Orphaned data from thread table. + * 4: Orphaned data from notify table. + * 5: Orphaned data from notify-threads table. + * 6: Orphaned data from sign table. + * 7: Orphaned data from term table. + * 8: Expired threads. + * 9: Old global item entries from expired threads. + * 10: Old conversations. */ private static function removeOrphans($stage = 0) { global $db; @@ -293,6 +294,27 @@ class DBClean { logger("Done deleting ".$count." old global item entries from expired threads. Last ID: ".$last_id); Config::set('system', 'dbclean-last-id-9', $last_id); + } elseif ($stage == 10) { + $last_id = Config::get('system', 'dbclean-last-id-10', 0); + + logger("Deleting old conversations. Last created: ".$last_id); + $r = dba::p("SELECT `received`, `item-uri` FROM `conversation` + WHERE `received` < UTC_TIMESTAMP() - INTERVAL 90 DAY + ORDER BY `received` LIMIT ".intval($limit)); + $count = dba::num_rows($r); + if ($count > 0) { + logger("found old conversations: ".$count); + while ($orphan = dba::fetch($r)) { + $last_id = $orphan["received"]; + dba::delete('conversation', array('item-uri' => $orphan["item-uri"])); + } + } else { + logger("No old conversations found"); + } + dba::close($r); + logger("Done deleting ".$count." conversations. Last created: ".$last_id); + + Config::set('system', 'dbclean-last-id-10', $last_id); } // Call it again if not all entries were purged diff --git a/update.php b/update.php index 326c08414e..12a04995c9 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@