Make package details cache TTL configurable

Message ID 20191007162419.50742-1-lfleischer@archlinux.org
State New
Headers show
Series Make package details cache TTL configurable | expand

Commit Message

Lukas Fleischer Oct. 7, 2019, 4:24 p.m. UTC
The TTL for package details can be much longer than for generic values
since they never change. Note that when an update is pushed via Git, all
packages belonging to that package base are deleted and new packages are
created.

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
---
 conf/config.defaults      |  1 +
 web/lib/aurjson.class.php |  6 ++++--
 web/lib/pkgfuncs.inc.php  | 15 ++++++++++-----
 3 files changed, 15 insertions(+), 7 deletions(-)

Patch

diff --git a/conf/config.defaults b/conf/config.defaults
index c8bc3a7..c519eae 100644
--- a/conf/config.defaults
+++ b/conf/config.defaults
@@ -38,6 +38,7 @@  render-comment-cmd = /usr/local/bin/aurweb-rendercomment
 localedir = /srv/http/aurweb/aur.git/web/locale/
 # memcache or apc
 cache = none
+cache_pkginfo_ttl = 86400
 memcache_servers = 127.0.0.1:11211
 
 [ratelimit]
diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php
index bfb8cd1..1c31a65 100644
--- a/web/lib/aurjson.class.php
+++ b/web/lib/aurjson.class.php
@@ -292,7 +292,8 @@  class AurJSON {
 			"FROM Licenses INNER JOIN PackageLicenses " .
 			"ON PackageLicenses.PackageID = " . $pkgid . " " .
 			"AND PackageLicenses.LicenseID = Licenses.ID";
-		$rows = db_cache_result($query, 'extended-fields:' . $pkgid, PDO::FETCH_ASSOC);
+		$ttl = config_get_int('options', 'cache_pkginfo_ttl');
+		$rows = db_cache_result($query, 'extended-fields:' . $pkgid, PDO::FETCH_ASSOC, $ttl);
 
 		$type_map = array(
 			'depends' => 'Depends',
@@ -315,7 +316,8 @@  class AurJSON {
 			$query = "SELECT Keyword FROM PackageKeywords " .
 				"WHERE PackageBaseID = " . intval($base_id) . " " .
 				"ORDER BY Keyword ASC";
-			$rows = db_cache_result($query, 'keywords:' . intval($base_id));
+			$ttl = config_get_int('options', 'cache_pkginfo_ttl');
+			$rows = db_cache_result($query, 'keywords:' . intval($base_id), PDO::FETCH_NUM, $ttl);
 			$data['Keywords'] = array_map(function ($x) { return $x[0]; }, $rows);
 		}
 
diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index be4bb06..b5035df 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -165,7 +165,8 @@  function pkg_licenses($pkgid) {
 	$q = "SELECT l.Name FROM Licenses l ";
 	$q.= "INNER JOIN PackageLicenses pl ON pl.LicenseID = l.ID ";
 	$q.= "WHERE pl.PackageID = ". $pkgid;
-	$rows = db_cache_result($q, 'licenses:' . $pkgid);
+	$ttl = config_get_int('options', 'cache_pkginfo_ttl');
+	$rows = db_cache_result($q, 'licenses:' . $pkgid, PDO::FETCH_NUM, $ttl);
 	return array_map(function ($x) { return $x[0]; }, $rows);
 }
 
@@ -184,7 +185,8 @@  function pkg_groups($pkgid) {
 	$q = "SELECT g.Name FROM `Groups` g ";
 	$q.= "INNER JOIN PackageGroups pg ON pg.GroupID = g.ID ";
 	$q.= "WHERE pg.PackageID = ". $pkgid;
-	$rows = db_cache_result($q, 'groups:' . $pkgid);
+	$ttl = config_get_int('options', 'cache_pkginfo_ttl');
+	$rows = db_cache_result($q, 'groups:' . $pkgid, PDO::FETCH_NUM, $ttl);
 	return array_map(function ($x) { return $x[0]; }, $rows);
 }
 
@@ -208,7 +210,8 @@  function pkg_providers($name) {
 	$q.= "UNION ";
 	$q.= "SELECT 0, Name FROM OfficialProviders ";
 	$q.= "WHERE Provides = " . $dbh->quote($name);
-	return db_cache_result($q, 'providers:' . $name);
+	$ttl = config_get_int('options', 'cache_pkginfo_ttl');
+	return db_cache_result($q, 'providers:' . $name, PDO::FETCH_NUM, $ttl);
 }
 
 /**
@@ -231,7 +234,8 @@  function pkg_dependencies($pkgid, $limit) {
 	$q.= "LEFT JOIN DependencyTypes dt ON dt.ID = pd.DepTypeID ";
 	$q.= "WHERE pd.PackageID = ". $pkgid . " ";
 	$q.= "ORDER BY pd.DepName LIMIT " . intval($limit);
-	return db_cache_result($q, 'dependencies:' . $pkgid);
+	$ttl = config_get_int('options', 'cache_pkginfo_ttl');
+	return db_cache_result($q, 'dependencies:' . $pkgid, PDO::FETCH_NUM, $ttl);
 }
 
 /**
@@ -251,7 +255,8 @@  function pkg_relations($pkgid) {
 	$q.= "LEFT JOIN RelationTypes rt ON rt.ID = pr.RelTypeID ";
 	$q.= "WHERE pr.PackageID = ". $pkgid . " ";
 	$q.= "ORDER BY pr.RelName";
-	return db_cache_result($q, 'relations:' . $pkgid);
+	$ttl = config_get_int('options', 'cache_pkginfo_ttl');
+	return db_cache_result($q, 'relations:' . $pkgid, PDO::FETCH_NUM, $ttl);
 }
 
 /**