From a0b99f61eab0318c7ab4fb7f491e5b117066645c Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 7 Sep 2022 19:46:24 +0000 Subject: [PATCH] Use the cached activity function --- database.sql | 14 ---- doc/database.md | 1 - doc/database/db_pagecache.md | 32 --------- src/Model/Item.php | 4 -- src/Module/ActivityPub/Objects.php | 16 +---- src/Protocol/ActivityPub/PageCache.php | 85 ------------------------ src/Protocol/ActivityPub/Transmitter.php | 6 +- src/Worker/OptimizeTables.php | 1 - static/dbstructure.config.php | 16 +---- static/defaults.config.php | 4 -- 10 files changed, 6 insertions(+), 173 deletions(-) delete mode 100644 doc/database/db_pagecache.md delete mode 100644 src/Protocol/ActivityPub/PageCache.php diff --git a/database.sql b/database.sql index e1ca686d47..3503efd15d 100644 --- a/database.sql +++ b/database.sql @@ -1007,20 +1007,6 @@ CREATE TABLE IF NOT EXISTS `openwebauth-token` ( FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Store OpenWebAuth token to verify contacts'; --- --- TABLE pagecache --- -CREATE TABLE IF NOT EXISTS `pagecache` ( - `page` varbinary(255) NOT NULL COMMENT 'Page', - `uri-id` int unsigned COMMENT 'Id of the item-uri table that contains the uri the page belongs to', - `content` mediumtext COMMENT 'Page content', - `fetched` datetime COMMENT 'date when the page had been fetched', - PRIMARY KEY(`page`), - INDEX `fetched` (`fetched`), - INDEX `uri-id` (`uri-id`), - FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE -) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Stores temporary data'; - -- -- TABLE parsed_url -- diff --git a/doc/database.md b/doc/database.md index 1a01df337c..5aed24e91a 100644 --- a/doc/database.md +++ b/doc/database.md @@ -47,7 +47,6 @@ Database Tables | [notify-threads](help/database/db_notify-threads) | | | [oembed](help/database/db_oembed) | cache for OEmbed queries | | [openwebauth-token](help/database/db_openwebauth-token) | Store OpenWebAuth token to verify contacts | -| [pagecache](help/database/db_pagecache) | Stores temporary data | | [parsed_url](help/database/db_parsed_url) | cache for 'parse_url' queries | | [pconfig](help/database/db_pconfig) | personal (per user) configuration storage | | [permissionset](help/database/db_permissionset) | | diff --git a/doc/database/db_pagecache.md b/doc/database/db_pagecache.md deleted file mode 100644 index 2be2df298d..0000000000 --- a/doc/database/db_pagecache.md +++ /dev/null @@ -1,32 +0,0 @@ -Table pagecache -=========== - -Stores temporary data - -Fields ------- - -| Field | Description | Type | Null | Key | Default | Extra | -| ------- | ------------------------------------------------------------------ | -------------- | ---- | --- | ------- | ----- | -| page | Page | varbinary(255) | NO | PRI | NULL | | -| uri-id | Id of the item-uri table that contains the uri the page belongs to | int unsigned | YES | | NULL | | -| content | Page content | mediumtext | YES | | NULL | | -| fetched | date when the page had been fetched | datetime | YES | | NULL | | - -Indexes ------------- - -| Name | Fields | -| ------- | ------- | -| PRIMARY | page | -| fetched | fetched | -| uri-id | uri-id | - -Foreign Keys ------------- - -| Field | Target Table | Target Field | -|-------|--------------|--------------| -| uri-id | [item-uri](help/database/db_item-uri) | id | - -Return to [database documentation](help/database) diff --git a/src/Model/Item.php b/src/Model/Item.php index bd5591ef39..78bc8c64d1 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -196,8 +196,6 @@ class Item $notify_items = []; while ($item = DBA::fetch($items)) { - ActivityPub\PageCache::deleteByUriId($item['uri-id']); - if (!empty($fields['body'])) { Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']); @@ -321,8 +319,6 @@ class Item // clean up categories and tags so they don't end up as orphans Post\Category::deleteByURIId($item['uri-id'], $item['uid']); - ActivityPub\PageCache::deleteByUriId($item['uri-id']); - /* * If item is a link to a photo resource, nuke all the associated photos * (visitors will not have photo resources) diff --git a/src/Module/ActivityPub/Objects.php b/src/Module/ActivityPub/Objects.php index b0834929c4..96b3f638e7 100644 --- a/src/Module/ActivityPub/Objects.php +++ b/src/Module/ActivityPub/Objects.php @@ -31,7 +31,6 @@ use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Network\HTTPException; use Friendica\Protocol\ActivityPub; -use Friendica\Protocol\ActivityPub\PageCache; use Friendica\Util\HTTPSignature; use Friendica\Util\Network; use Friendica\Util\Strings; @@ -51,13 +50,6 @@ class Objects extends BaseModule DI::baseUrl()->redirect(str_replace('objects/', 'display/', DI::args()->getQueryString())); } - $data = PageCache::fetch($_SERVER['REQUEST_URI']); - if (!empty($data)) { - header('Access-Control-Allow-Origin: *'); - - System::jsonExit($data, 'application/activity+json'); - } - $itemuri = DBA::selectFirst('item-uri', ['id'], ['guid' => $this->parameters['guid']]); if (DBA::isResult($itemuri)) { @@ -106,7 +98,7 @@ class Objects extends BaseModule Network::checkEtagModified($etag, $last_modified); if (empty($this->parameters['activity']) && ($item['gravity'] != GRAVITY_ACTIVITY)) { - $activity = ActivityPub\Transmitter::createActivityFromItem($item['id'], true); + $activity = ActivityPub\Transmitter::createCachedActivityFromItem($item['id'], false, true); if (empty($activity['type'])) { throw new HTTPException\NotFoundException(); } @@ -123,7 +115,7 @@ class Objects extends BaseModule } elseif (empty($this->parameters['activity']) || in_array($this->parameters['activity'], ['Create', 'Announce', 'Update', 'Like', 'Dislike', 'Accept', 'Reject', 'TentativeAccept', 'Follow', 'Add'])) { - $data = ActivityPub\Transmitter::createActivityFromItem($item['id']); + $data = ActivityPub\Transmitter::createCachedActivityFromItem($item['id']); if (empty($data)) { throw new HTTPException\NotFoundException(); } @@ -135,10 +127,6 @@ class Objects extends BaseModule throw new HTTPException\NotFoundException(); } - if (in_array($item['private'], [Item::PUBLIC, Item::UNLISTED])) { - PageCache::add($_SERVER['REQUEST_URI'], $item['uri-id'], $data); - } - // Relaxed CORS header for public items header('Access-Control-Allow-Origin: *'); diff --git a/src/Protocol/ActivityPub/PageCache.php b/src/Protocol/ActivityPub/PageCache.php deleted file mode 100644 index d9e82d713c..0000000000 --- a/src/Protocol/ActivityPub/PageCache.php +++ /dev/null @@ -1,85 +0,0 @@ -. - * - */ - -namespace Friendica\Protocol\ActivityPub; - -use Friendica\Core\Logger; -use Friendica\Database\Database; -use Friendica\Database\DBA; -use Friendica\DI; -use Friendica\Util\DateTimeFormat; - -/** - * This class handles the page cache - */ -class PageCache -{ - /** - * Add content to the page cache - * - * @param string $page - * @param int $uriid - * @param mixed $content - * @return void - */ - public static function add(string $page, int $uriid, $content) - { - if (!DI::config()->get('system', 'pagecache')) { - return; - } - - DBA::delete('pagecache', ["`fetched` < ?", DateTimeFormat::utc('now - 5 minutes')]); - DBA::insert('pagecache', ['page' => $page, 'uri-id' => $uriid, 'content' => serialize($content), 'fetched' => DateTimeFormat::utcNow()], Database::INSERT_UPDATE); - - Logger::debug('Page added', ['page' => $page]); - } - - /** - * Fetch data from the page cache - * - * @param string $page - * @return mixed - */ - public static function fetch(string $page) - { - $pagecache = DBA::selectFirst('pagecache', [], ['page' => $page]); - if (empty($pagecache['content'])) { - return null; - } - - DBA::update('pagecache', ['fetched' => DateTimeFormat::utcNow()], ['page' => $page]); - - Logger::debug('Page fetched', ['page' => $page]); - - return unserialize($pagecache['content']); - } - - /** - * Delete the pagecache via its connected uri-id - * - * @param integer $uriid - * @return void - */ - public static function deleteByUriId(int $uriid) - { - DBA::delete('pagecache', ['uri-id' => $uriid]); - } -} diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index 18d0cc65f2..162745c396 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -1185,9 +1185,9 @@ class Transmitter * @return array|false activity or false on failure * @throws \Exception */ - public static function createCachedActivityFromItem(int $item_id, bool $force = false) + public static function createCachedActivityFromItem(int $item_id, bool $force = false, bool $object_mode = false) { - $cachekey = 'APDelivery:createActivity:' . $item_id; + $cachekey = 'APDelivery:createActivity:' . $item_id . ':' . (int)$object_mode; if (!$force) { $data = DI::cache()->get($cachekey); @@ -1196,7 +1196,7 @@ class Transmitter } } - $data = self::createActivityFromItem($item_id); + $data = self::createActivityFromItem($item_id, $object_mode); DI::cache()->set($cachekey, $data, Duration::QUARTER_HOUR); return $data; diff --git a/src/Worker/OptimizeTables.php b/src/Worker/OptimizeTables.php index cfe8295aac..cfbdca7fe5 100644 --- a/src/Worker/OptimizeTables.php +++ b/src/Worker/OptimizeTables.php @@ -43,7 +43,6 @@ class OptimizeTables DBA::e("OPTIMIZE TABLE `cache`"); DBA::e("OPTIMIZE TABLE `locks`"); DBA::e("OPTIMIZE TABLE `oembed`"); - DBA::e("OPTIMIZE TABLE `pagecache`"); DBA::e("OPTIMIZE TABLE `parsed_url`"); DBA::e("OPTIMIZE TABLE `session`"); diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index 1e7fae786f..9f1ab15858 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', 1483); + define('DB_UPDATE_VERSION', 1482); } return [ @@ -1051,20 +1051,6 @@ return [ "uid" => ["uid"], ] ], - "pagecache" => [ - "comment" => "Stores temporary data", - "fields" => [ - "page" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "Page"], - "uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table that contains the uri the page belongs to"], - "content" => ["type" => "mediumtext", "comment" => "Page content"], - "fetched" => ["type" => "datetime", "comment" => "date when the page had been fetched"], - ], - "indexes" => [ - "PRIMARY" => ["page"], - "fetched" => ["fetched"], - "uri-id" => ["uri-id"], - ], - ], "parsed_url" => [ "comment" => "cache for 'parse_url' queries", "fields" => [ diff --git a/static/defaults.config.php b/static/defaults.config.php index bfd2f8d44c..7625de0bd4 100644 --- a/static/defaults.config.php +++ b/static/defaults.config.php @@ -478,10 +478,6 @@ return [ // Don't show smilies. 'no_smilies' => false, - // pagecache (Boolean) - // Cache frequently fetched pages. - 'pagecache' => false, - // paranoia (Boolean) // Log out users if their IP address changed. 'paranoia' => false,