From patchwork Sun Oct 6 17:51:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Fleischer X-Patchwork-Id: 1252 Return-Path: Delivered-To: patchwork@archlinux.org Received: from apollo.archlinux.org (localhost [127.0.0.1]) by apollo.archlinux.org (Postfix) with ESMTP id 9F3401441DA67 for ; Sun, 6 Oct 2019 17:51:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on apollo X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1, MAILING_LIST_MULTI=-1,RCVD_IN_DNSWL_MED=-2.3,SPF_HELO_NONE=0.001, T_DMARC_POLICY_NONE=0.01 autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-BL-Results: [127.0.9.2] Received: from orion.archlinux.org (orion.archlinux.org [IPv6:2a01:4f8:160:6087::1]) by apollo.archlinux.org (Postfix) with ESMTPS for ; Sun, 6 Oct 2019 17:51:19 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id A7D7115AB89A3F; Sun, 6 Oct 2019 17:51:18 +0000 (UTC) Received: from luna.archlinux.org (luna.archlinux.org [5.9.250.164]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits)) (No client certificate requested) by orion.archlinux.org (Postfix) with ESMTPS; Sun, 6 Oct 2019 17:51:18 +0000 (UTC) Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id 80EFA2CAD8; Sun, 6 Oct 2019 17:51:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=archlinux.org; s=luna2; t=1570384278; bh=oy4pK3TBq780vaJPZg/O3L4byhNXYo1im3ujcShHQaU=; h=From:To:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe; b=djEhX4wIW4WM2NUFEgBtZXO1ztQBoOf1oumnkDCIXS/dETi8OyovFF45CRA8GLooh V5u5f0OS6FR5XvfPWiQLwQPf6Cn2SYtRmO+tMgnF6qJM2eMWPx5s/aZF8PWkolqnl/ AJxEb3e187G5UduzLda+9wAlnUqw/KUBLqAk+DCL8i+UrcWJFVmZKylTbn4MgDYlC6 4mR1aJmGR6cjzaD2e2G7ChmetSHh2bEwQvDCgXgjX/r1txmh+OC75kazI2W3b/l988 JCoZmB30vwldctKSflbEgBRX+5y0dBqpAHcu+S81Ix1v1JudNIiAU1b9SOtjmRiF+v Sv0pG/G1Uc/GLecKyfrMHGSY0DV2P3AtPWUykomHEh2MaNc8/zCdVJH2OPl+d4zyVu TlbzcpgZk6GRpmIVXLJWJLRMO9gYieASq8UjdK5IZ1tMPrmzU9/OxJrRvIwdxdbZ4U 0FwE0TbgjzDzqe9q2dh2v8va/pMW0rl0zrmirt2zuQ11migC7c7l3uOUckx4FPH2Bj TNBB+Pkil5n8zKf47nwXMZuB1ewIt+yAbKnC8EK/qQm3eHlG8sj5e3Q006KPbS3YQ6 lD048c+Vf8ssbNU5HuQM6CazjNvXMAvacwI9ucFAPJjQSnoQRtlEitKSHQTtI3pjzh VjMndetAr/GIrGTHraOz2G5I= Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id A802D2BDCE for ; Sun, 6 Oct 2019 17:51:15 +0000 (UTC) Received: from orion.archlinux.org (orion.archlinux.org [88.198.91.70]) by luna.archlinux.org (Postfix) with ESMTPS for ; Sun, 6 Oct 2019 17:51:15 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id 967E015AB89A39 for ; Sun, 6 Oct 2019 17:51:14 +0000 (UTC) Received: from localhost (unknown [72.138.14.22]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: lfleischer) by orion.archlinux.org (Postfix) with ESMTPSA id 26C3815AB89A38 for ; Sun, 6 Oct 2019 17:51:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=archlinux.org; s=orion; t=1570384274; bh=oy4pK3TBq780vaJPZg/O3L4byhNXYo1im3ujcShHQaU=; h=From:To:Subject:Date:In-Reply-To:References; b=Csr4mSJw0aHUw1IWt9qnwGQud5vm2vxDVxYNRIXNCBzcHDlxwvjbfd6WL+uLS0g6x 53lFzW5k9cjJlWUCRkFYn3oKRyOCQ9GkfQb5LJcprKPaKZ5sbJPZAqDqVKuVYk5TW0 yeCsjEM+GiZM90Y9S/qVykTww7Ixe6Y4LGWuxedPOKK9h/f8qLykFHo66R/32KF872 3lDmbtnDlqdtSon8mP9P1rEZ+hUbXLb9bokBwBenyfod0P5bOIECEP+tNGhr114+T8 JOaQhb9sGy2qnu/4lcUhf5q3jB+cPzeTMikKbkY1Zu+DzD5ld+BUFGhOUSYG2B1Zhe GKQEW0WFydu4KumvG6d1iWSGtxQGsdtMWdHNG/wvswOL5e3Lz/LHklmQm+l1SZsXiX 9S+MVKlIP+AA6iRr1HA3NVmCRxZTfv1jjM4+jt8guYP9xXy9SWjFkulPnzzb+5UF8X yKjAmmZ+rbJGufi9u9KIzdpAgbd3w5Qs/SkKIbyazkq5M7CT9WZiY6kM1aV88MwX4V 8oC4wIzXLhepV5MBUTgbAMV8cZa/o3Xqi9gx27N5wWHyri2OefBSWtCHn7rJcXnOqA AYPLYABK2ZobFB2OfisjTwFNPqLfbX41gQtTS9XLcyb30AwuB73b6cc6fkhqlUF1r7 JdNBON6YviEZoM8kjZMhBgQA= From: Lukas Fleischer To: aur-dev@archlinux.org Subject: [PATCH v2] Cache package provider and dependency information Date: Sun, 6 Oct 2019 13:51:36 -0400 Message-Id: <20191006175136.9792-1-lfleischer@archlinux.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191006172156.6842-1-lfleischer@archlinux.org> References: <20191006172156.6842-1-lfleischer@archlinux.org> MIME-Version: 1.0 X-BeenThere: aur-dev@archlinux.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Arch User Repository \(AUR\) Development" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: aur-dev-bounces@archlinux.org Sender: "aur-dev" The package provider and dependency queries are quite CPU-intensive and usually yield rather small result sets. Cache these values if the global caching mechanism is enabled. Signed-off-by: Lukas Fleischer --- Add $fetch_style parameter to db_cache_result(). web/lib/cachefuncs.inc.php | 17 ++++++++++++++++ web/lib/pkgfuncs.inc.php | 40 +++++++++++--------------------------- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/web/lib/cachefuncs.inc.php b/web/lib/cachefuncs.inc.php index 881ad8f..b2b96c2 100644 --- a/web/lib/cachefuncs.inc.php +++ b/web/lib/cachefuncs.inc.php @@ -79,4 +79,21 @@ function db_cache_value($dbq, $key, $ttl=600) { return $value; } +# Run a simple db query, retrieving and/or caching the result set if APC is +# available for use. Accepts an optional TTL value (defaults to 600 seconds). +function db_cache_result($dbq, $key, $fetch_style=PDO::FETCH_NUM, $ttl=600) { + $dbh = DB::connect(); + $status = false; + $value = get_cache_value($key, $status); + if (!$status) { + $result = $dbh->query($dbq); + if (!$result) { + return false; + } + $value = $result->fetchAll($fetch_style); + set_cache_value($key, $value, $ttl); + } + return $value; +} + ?> diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php index 00f0cc4..44e4167 100644 --- a/web/lib/pkgfuncs.inc.php +++ b/web/lib/pkgfuncs.inc.php @@ -222,17 +222,7 @@ function pkg_providers($name) { $q.= "UNION "; $q.= "SELECT 0, Name FROM OfficialProviders "; $q.= "WHERE Provides = " . $dbh->quote($name); - $result = $dbh->query($q); - - if (!$result) { - return array(); - } - - $providers = array(); - while ($row = $result->fetch(PDO::FETCH_NUM)) { - $providers[] = $row; - } - return $providers; + return db_cache_result($q, 'providers:' . $name); } /** @@ -244,26 +234,18 @@ function pkg_providers($name) { * @return array All package dependencies for the package */ function pkg_dependencies($pkgid, $limit) { - $deps = array(); $pkgid = intval($pkgid); - if ($pkgid > 0) { - $dbh = DB::connect(); - $q = "SELECT pd.DepName, dt.Name, pd.DepDesc, "; - $q.= "pd.DepCondition, pd.DepArch, p.ID "; - $q.= "FROM PackageDepends pd "; - $q.= "LEFT JOIN Packages p ON pd.DepName = p.Name "; - $q.= "LEFT JOIN DependencyTypes dt ON dt.ID = pd.DepTypeID "; - $q.= "WHERE pd.PackageID = ". $pkgid . " "; - $q.= "ORDER BY pd.DepName LIMIT " . intval($limit); - $result = $dbh->query($q); - if (!$result) { - return array(); - } - while ($row = $result->fetch(PDO::FETCH_NUM)) { - $deps[] = $row; - } + if (!$pkgid) { + return array(); } - return $deps; + $q = "SELECT pd.DepName, dt.Name, pd.DepDesc, "; + $q.= "pd.DepCondition, pd.DepArch, p.ID "; + $q.= "FROM PackageDepends pd "; + $q.= "LEFT JOIN Packages p ON pd.DepName = p.Name "; + $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:' . $name); } /**