Index: trunk/packages/invirt-console-server/debian/changelog
===================================================================
--- trunk/packages/invirt-console-server/debian/changelog	(revision 1697)
+++ trunk/packages/invirt-console-server/debian/changelog	(revision 1699)
@@ -1,2 +1,8 @@
+invirt-console-server (0.1.0) unstable; urgency=low
+
+  * Add real caching to consolefs
+
+ -- Evan Broder <broder@mit.edu>  Mon, 17 Nov 2008 13:16:09 -0500
+
 invirt-console-server (0.0.13) unstable; urgency=low
 
Index: trunk/packages/invirt-console-server/files/usr/bin/invirt-consolefs
===================================================================
--- trunk/packages/invirt-console-server/files/usr/bin/invirt-consolefs	(revision 1697)
+++ trunk/packages/invirt-console-server/files/usr/bin/invirt-consolefs	(revision 1699)
@@ -27,5 +27,6 @@
 		"""
 		super(ConsoleFS, self).__init__(*args, **kw)
-		self.lasttime = time()
+		self.lasttime = 0
+		self.machines = []
 		self.fuse_args.add("allow_other", True)
 		
@@ -33,5 +34,5 @@
 		
 		syslog(LOG_DEBUG, 'Init complete.')
-
+	
 	def make_map(self):
 		m = Mapper()
@@ -42,11 +43,16 @@
 		return m
 	
-	def getMachines(self, **kw):
-		"""Get the list of VMs in the database, clearing the cache if it's 
-		older than 15 seconds"""
+	def recache(self):
+		"""Refresh the local cache of VMs if the cache is more than 15 minutes old
+		"""
 		if time() - self.lasttime > 15:
 			self.lasttime = time()
 			database.clear_cache()
-		return [machine.name for machine in database.Machine.query()]
+			self.machines = dict((machine.name, machine) for machine in database.session.query(database.Machine).all())
+
+	def getMachines(self, **kw):
+		"""Get the list of VMs in the database"""
+		self.recache()
+		return self.machines.keys()
 	
 	def getMirror(self, machine, path='', **kw):
@@ -68,5 +74,6 @@
 		"""Build the ACL for a machine and turn it into a .k5login file
 		"""
-		machine = database.Machine.query().filter_by(name=machine).one()
+		self.recache()
+		machine = self.machines[machine]
 		users = [acl.user for acl in machine.acl]
 		return "\n".join(map(self.userToPrinc, users) + [''])
