]> git.ipfire.org Git - ipfire.org.git/commitdiff
wiki: Migrate from memcache to redis
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 25 Oct 2023 15:06:59 +0000 (15:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 25 Oct 2023 15:06:59 +0000 (15:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/wiki.py
src/web/docs.py

index ef83e1e364279b1cc9a895b3b4c81e72ebc0be31..204544cb7eb946f4c5a1a69d3b9990ebe39481b6 100644 (file)
@@ -55,22 +55,12 @@ class Wiki(misc.Object):
                return page and not page.was_deleted()
 
        def get_page_title(self, page, default=None):
-               # Try to retrieve title from cache
-               title = self.memcache.get("wiki:title:%s" % page)
-               if title:
-                       return title
-
-               # If the title has not been in the cache, we will
-               # have to look it up
                doc = self.get_page(page)
                if doc:
                        title = doc.title
                else:
                        title = os.path.basename(page)
 
-               # Save in cache for forever
-               self.memcache.set("wiki:title:%s" % page, title)
-
                return title
 
        def get_page(self, page, revision=None):
@@ -111,9 +101,6 @@ class Wiki(misc.Object):
                page = self._get_page("INSERT INTO wiki(page, author_uid, markdown, changes, address) \
                        VALUES(%s, %s, %s, %s, %s) RETURNING *", page, author.uid, content or None, changes, address)
 
-               # Update cache
-               self.memcache.set("wiki:title:%s" % page.page, page.title)
-
                # Send email to all watchers
                page._send_watcher_emails(excludes=[author])
 
@@ -561,13 +548,18 @@ class File(misc.Object):
                if res:
                        return bytes(res.data)
 
-       def get_thumbnail(self, size):
+       async def get_thumbnail(self, size):
                assert self.is_bitmap_image()
 
-               cache_key = "-".join((self.path, util.normalize(self.filename), self.created_at.isoformat(), "%spx" % size))
+               cache_key = "-".join((
+                       self.path,
+                       util.normalize(self.filename),
+                       self.created_at.isoformat(),
+                       "%spx" % size,
+               ))
 
                # Try to fetch the data from the cache
-               thumbnail = self.memcache.get(cache_key)
+               thumbnail = await self.backend.cache.get(cache_key)
                if thumbnail:
                        return thumbnail
 
@@ -575,7 +567,7 @@ class File(misc.Object):
                thumbnail = util.generate_thumbnail(self.blob, size)
 
                # Put it into the cache for forever
-               self.memcache.set(cache_key, thumbnail)
+               await self.backend.cache.set(cache_key, thumbnail)
 
                return thumbnail
 
index c4b77ba30e7cec1bc61af5f67c48ec04ec44bf74..41fc6332f105b01066ba7afd01c1fc315b771164 100644 (file)
@@ -109,7 +109,7 @@ class FileHandler(base.BaseHandler):
        def action(self):
                return self.get_argument("action", None)
 
-       def get(self, path):
+       async def get(self, path):
                # Check permissions
                if not self.backend.wiki.check_acl(path, self.current_user):
                        raise tornado.web.HTTPError(403, "Access to %s not allowed for %s" % (path, self.current_user))
@@ -138,7 +138,7 @@ class FileHandler(base.BaseHandler):
 
                # Check if image should be resized
                if size and file.is_bitmap_image():
-                       blob = file.get_thumbnail(size)
+                       blob = await file.get_thumbnail(size)
                else:
                        blob = file.blob