Ignore:
Timestamp:
Nov 17, 2008, 1:05:51 PM (16 years ago)
Author:
broder
Message:

Add real caching to remconffs

Location:
trunk/packages/invirt-remote-server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/invirt-remote-server/debian/changelog

    r1665 r1697  
     1invirt-remote-server (0.1.0) unstable; urgency=low
     2
     3  * Add real caching to remconffs
     4
     5 -- Evan Broder <broder@mit.edu>  Mon, 17 Nov 2008 13:05:32 -0500
     6
    17invirt-remote-server (0.0.18) unstable; urgency=low
    28
  • trunk/packages/invirt-remote-server/files/usr/sbin/invirt-remconffs

    r1176 r1697  
    1919        |   `-- machinen
    2020        `-- conf
    21        
     21       
    2222        The machine list and the acls are drawn from a database.
    2323        """
     
    2828                """
    2929                super(RemConfFS, self).__init__(*args, **kw)
    30                 self.lasttime = time()
     30                self.lasttime = 0
    3131                self.fuse_args.add("allow_other", True)
    3232               
     
    3434               
    3535                syslog(LOG_DEBUG, 'Init complete.')
    36        
    37         def make_map(self):
    38                 m = Mapper()
    39                 m.connect('', controller='getroot')
    40                 m.connect('acl', controller='getmachines')
    41                 m.connect('acl/:machine', controller='getacl')
    42                 m.connect('conf', controller='getconf')
    43                 return m
    44        
    45         def getroot(self, **kw):
    46                 return ['acl', 'conf']
    47        
     36       
     37        def make_map(self):
     38                m = Mapper()
     39                m.connect('', controller='getroot')
     40                m.connect('acl', controller='getmachines')
     41                m.connect('acl/:machine', controller='getacl')
     42                m.connect('conf', controller='getconf')
     43                return m
     44       
     45        def recache(self):
     46                if time() - self.lasttime > 15:
     47                        self.lasttime = time()
     48                        database.clear_cache()
     49                        self.machines = dict((machine.name, machine) for machine in database.session.query(database.Machine).all())
     50       
     51        def getroot(self, **kw):
     52                return ['acl', 'conf']
     53       
    4854        def getacl(self, machine, **kw):
    4955                """Build the ACL file for a machine
    5056                """
    51                 machine = database.Machine.query().filter_by(name=machine).one()
     57                self.recache()
     58                machine = self.machines[machine]
    5259                users = [acl.user for acl in machine.acl]
    5360                return "\n".join(map(self.userToPrinc, users)
    5461                                 + ['include /etc/remctl/acl/web',
    55                                     ''])
    56        
     62                                        ''])
     63       
    5764        def getconf(self, **kw):
    5865                """Build the master conf file, with all machines
     
    6673                """Get the list of VMs in the database, clearing the cache if it's
    6774                older than 15 seconds"""
    68                 if time() - self.lasttime > 15:
    69                         self.lasttime = time()
    70                         database.clear_cache()
    71                 return [machine.name for machine in database.session.query(database.Machine).all()]
    72        
     75                self.recache()
     76                return self.machines.keys()
     77       
    7378        def userToPrinc(self, user):
    7479                """Convert Kerberos v4-style names to v5-style and append a default
     
    8590if __name__ == '__main__':
    8691        database.connect()
    87         routefs.main(RemConfFS)
     92        routefs.main(RemConfFS)
Note: See TracChangeset for help on using the changeset viewer.