1
0
Fork 0

Delete the cache entry when the post is changed or deleted

This commit is contained in:
Michael 2022-09-06 21:51:47 +00:00
parent 7c9f10e58f
commit da658cbf1d
6 changed files with 38 additions and 9 deletions

View file

@ -1012,10 +1012,13 @@ CREATE TABLE IF NOT EXISTS `openwebauth-token` (
-- --
CREATE TABLE IF NOT EXISTS `pagecache` ( CREATE TABLE IF NOT EXISTS `pagecache` (
`page` varbinary(255) NOT NULL COMMENT 'Page', `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', `content` mediumtext COMMENT 'Page content',
`fetched` datetime COMMENT 'date when the page had been fetched', `fetched` datetime COMMENT 'date when the page had been fetched',
PRIMARY KEY(`page`), PRIMARY KEY(`page`),
INDEX `fetched` (`fetched`) 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'; ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Stores temporary data';
-- --

View file

@ -6,11 +6,12 @@ Stores temporary data
Fields Fields
------ ------
| Field | Description | Type | Null | Key | Default | Extra | | Field | Description | Type | Null | Key | Default | Extra |
| ------- | ----------------------------------- | -------------- | ---- | --- | ------- | ----- | | ------- | ------------------------------------------------------------------ | -------------- | ---- | --- | ------- | ----- |
| page | Page | varbinary(255) | NO | PRI | NULL | | | page | Page | varbinary(255) | NO | PRI | NULL | |
| content | Page content | mediumtext | YES | | NULL | | | uri-id | Id of the item-uri table that contains the uri the page belongs to | int unsigned | YES | | NULL | |
| fetched | date when the page had been fetched | datetime | YES | | NULL | | | content | Page content | mediumtext | YES | | NULL | |
| fetched | date when the page had been fetched | datetime | YES | | NULL | |
Indexes Indexes
------------ ------------
@ -19,6 +20,13 @@ Indexes
| ------- | ------- | | ------- | ------- |
| PRIMARY | page | | PRIMARY | page |
| fetched | fetched | | 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) Return to [database documentation](help/database)

View file

@ -196,6 +196,8 @@ class Item
$notify_items = []; $notify_items = [];
while ($item = DBA::fetch($items)) { while ($item = DBA::fetch($items)) {
ActivityPub\PageCache::deleteByUriId($item['uri-id']);
if (!empty($fields['body'])) { if (!empty($fields['body'])) {
Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']); Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']);
@ -319,6 +321,8 @@ class Item
// clean up categories and tags so they don't end up as orphans // clean up categories and tags so they don't end up as orphans
Post\Category::deleteByURIId($item['uri-id'], $item['uid']); 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 * If item is a link to a photo resource, nuke all the associated photos
* (visitors will not have photo resources) * (visitors will not have photo resources)

View file

@ -136,7 +136,7 @@ class Objects extends BaseModule
} }
if (in_array($item['private'], [Item::PUBLIC, Item::UNLISTED])) { if (in_array($item['private'], [Item::PUBLIC, Item::UNLISTED])) {
PageCache::add($_SERVER['REQUEST_URI'], $data); PageCache::add($_SERVER['REQUEST_URI'], $item['uri-id'], $data);
} }
// Relaxed CORS header for public items // Relaxed CORS header for public items

View file

@ -36,17 +36,18 @@ class PageCache
* Add content to the page cache * Add content to the page cache
* *
* @param string $page * @param string $page
* @param int $uriid
* @param mixed $content * @param mixed $content
* @return void * @return void
*/ */
public static function add(string $page, $content) public static function add(string $page, int $uriid, $content)
{ {
if (!DI::config()->get('system', 'pagecache')) { if (!DI::config()->get('system', 'pagecache')) {
return; return;
} }
DBA::delete('pagecache', ["`fetched` < ?", DateTimeFormat::utc('now - 5 minutes')]); DBA::delete('pagecache', ["`fetched` < ?", DateTimeFormat::utc('now - 5 minutes')]);
DBA::insert('pagecache', ['page' => $page, 'content' => serialize($content), 'fetched' => DateTimeFormat::utcNow()], Database::INSERT_UPDATE); DBA::insert('pagecache', ['page' => $page, 'uri-id' => $uriid, 'content' => serialize($content), 'fetched' => DateTimeFormat::utcNow()], Database::INSERT_UPDATE);
Logger::debug('Page added', ['page' => $page]); Logger::debug('Page added', ['page' => $page]);
} }
@ -70,4 +71,15 @@ class PageCache
return unserialize($pagecache['content']); 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]);
}
} }

View file

@ -1055,12 +1055,14 @@ return [
"comment" => "Stores temporary data", "comment" => "Stores temporary data",
"fields" => [ "fields" => [
"page" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "Page"], "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"], "content" => ["type" => "mediumtext", "comment" => "Page content"],
"fetched" => ["type" => "datetime", "comment" => "date when the page had been fetched"], "fetched" => ["type" => "datetime", "comment" => "date when the page had been fetched"],
], ],
"indexes" => [ "indexes" => [
"PRIMARY" => ["page"], "PRIMARY" => ["page"],
"fetched" => ["fetched"], "fetched" => ["fetched"],
"uri-id" => ["uri-id"],
], ],
], ],
"parsed_url" => [ "parsed_url" => [