From 51fe22830c51a1cb04765d84d30531db38760ca9 Mon Sep 17 00:00:00 2001 From: Costin Grigoras <Costin.Grigoras@cern.ch> Date: Sat, 8 Apr 2023 08:04:57 +0200 Subject: [PATCH] Query timeouts and only cache confirmed DB operations --- src/main/java/alien/api/catalogue/GetAliEnv.java | 9 +++++++-- src/main/java/alien/api/catalogue/SetAliEnv.java | 8 ++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/alien/api/catalogue/GetAliEnv.java b/src/main/java/alien/api/catalogue/GetAliEnv.java index f1c6f8140..fdf3db406 100644 --- a/src/main/java/alien/api/catalogue/GetAliEnv.java +++ b/src/main/java/alien/api/catalogue/GetAliEnv.java @@ -48,7 +48,12 @@ public class GetAliEnv extends Request implements Cacheable { public void run() { try (DBFunctions db = ConfigUtils.getDB("admin")) { if (db != null) { - db.query("SELECT cachedOutput FROM alienv_cache WHERE packageNames=? AND keyModifier=? AND expires>UNIX_TIMESTAMP();", false, packageNames, keyModifier); + db.setQueryTimeout(15); + if (!db.query("SELECT cachedOutput FROM alienv_cache WHERE packageNames=? AND keyModifier=? AND expires>UNIX_TIMESTAMP();", false, packageNames, keyModifier)) { + cachedAliEnvOutput = null; + monitor.incrementCounter("alienv_query_error"); + return; + } if (db.moveNext()) { cachedAliEnvOutput = db.gets(1); @@ -72,7 +77,7 @@ public class GetAliEnv extends Request implements Cacheable { @Override public long getTimeout() { - return 1000 * 60 * 60; + return 1000 * 60 * (cachedAliEnvOutput != null ? 60 : 0); } @Override diff --git a/src/main/java/alien/api/catalogue/SetAliEnv.java b/src/main/java/alien/api/catalogue/SetAliEnv.java index ffbf791ac..693c07daf 100644 --- a/src/main/java/alien/api/catalogue/SetAliEnv.java +++ b/src/main/java/alien/api/catalogue/SetAliEnv.java @@ -25,6 +25,7 @@ public class SetAliEnv extends Request implements Cacheable { private final String packageNames; private final String keyModifier; private String cachedAliEnvOutput; + private transient boolean queryOk = false; /** * @param packageNames list of package names @@ -49,7 +50,10 @@ public class SetAliEnv extends Request implements Cacheable { @Override public void run() { try (DBFunctions db = ConfigUtils.getDB("admin")) { - db.query("replace into alienv_cache (packageNames, keyModifier, expires, cachedOutput) values (?, ?, UNIX_TIMESTAMP()+60*60*12, ?);", false, packageNames, keyModifier, cachedAliEnvOutput); + db.setQueryTimeout(5); + if (db.query("replace into alienv_cache (packageNames, keyModifier, expires, cachedOutput) values (?, ?, UNIX_TIMESTAMP()+60*60*12, ?);", false, packageNames, keyModifier, + cachedAliEnvOutput)) + queryOk = true; } monitor.incrementCounter("alienv_cache_set"); @@ -70,6 +74,6 @@ public class SetAliEnv extends Request implements Cacheable { @Override public long getTimeout() { - return 1000 * 60 * 15; + return 1000 * 60 * (queryOk ? 15 : 0); } } -- GitLab