In Telef\'{o}nica we have a very slow ldap server which takes 5 seconds to
respond. Even with the configurable caching, addingg an option to pull the
administrative database from a local file if specifed.
git-svn-id: https://svn.apache.org/repos/asf/incubator/tashi/trunk@1455136 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/etc/TashiDefaults.cfg b/etc/TashiDefaults.cfg
index d28b73b..14d18f2 100644
--- a/etc/TashiDefaults.cfg
+++ b/etc/TashiDefaults.cfg
@@ -62,6 +62,10 @@
[GetentOverride]
baseData = tashi.clustermanager.data.Pickled
fetchThreshold = 60.0
+# Use local version of getent file
+;getentFromLocalFile = False
+;getentLocalFile = /var/tmp/getent.tmp
+
[LdapOverride]
baseData = tashi.clustermanager.data.Pickled
diff --git a/src/tashi/clustermanager/data/getentoverride.py b/src/tashi/clustermanager/data/getentoverride.py
index 2cd5e69..0a88696 100644
--- a/src/tashi/clustermanager/data/getentoverride.py
+++ b/src/tashi/clustermanager/data/getentoverride.py
@@ -29,6 +29,8 @@
self.log = logging.getLogger(__name__)
self.baseDataObject = instantiateImplementation(config.get("GetentOverride", "baseData"), config)
self.dfs = instantiateImplementation(config.get("ClusterManager", "dfs"), config)
+ self.useLocal = config.get("GetentOverride", "getentFromLocalFile")
+ self.localFileName = config.get("GetentOverride", "getentLocalFile")
self.users = {}
self.lastUserUpdate = 0.0
@@ -105,7 +107,18 @@
now = time.time()
if (now - self.lastUserUpdate > self.fetchThreshold):
myUsers = {}
- p = subprocess.Popen("getent passwd".split(), stdout=subprocess.PIPE)
+ # Use local getent file instead of querying the administrative db
+ if self.useLocal:
+ if os.path.exists(self.localFileName):
+ cmd = "cat %s" % self.localFileName
+ p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
+ else:
+ self.log.warning("getent cache file not found (%s)" % (self.localFileName))
+ p = subprocess.Popen("getent passwd".split(), stdout=subprocess.PIPE)
+ # Query administrative database
+ else:
+ p = subprocess.Popen("getent passwd".split(), stdout=subprocess.PIPE)
+
try:
for l in p.stdout.xreadlines():
ws = l.strip().split(":")