patch by Thomas Dreibholz - ovs-vsctl and not ovs-ovsctl
[nodemanager.git] / database.py
index dc68af8..0680b6c 100644 (file)
@@ -13,15 +13,22 @@ In order to maintain service when the node reboots during a network
 partition, the database is constantly being dumped to disk.
 """
 
+import sys
+
 import cPickle
 import threading
 import time
 
-import accounts
+import account
 import logger
 import tools
 import bwmon
 
+# hopefully temporary
+# is there a good reason to have this done here and not in a plugin ?
+try:    from coresched_lxc import CoreSched
+except: from coresched_vs  import CoreSched
+
 # We enforce minimum allocations to keep the clueless from hosing their slivers.
 # Disallow disk loans because there's currently no way to punish slivers over quota.
 MINIMUM_ALLOCATION = {'cpu_pct': 0,
@@ -118,19 +125,25 @@ It may be necessary in the future to do something smarter."""
 
         self._compute_effective_rspecs()
 
+        try:
+            coresched = CoreSched()
+            coresched.adjustCores(self)
+        except:
+            logger.log_exc("database: exception while doing core sched")
+
         # create and destroy accounts as needed
         logger.verbose("database: sync : fetching accounts")
-        existing_acct_names = accounts.all()
+        existing_acct_names = account.all()
         for name in existing_acct_names:
             if name not in self:
                 logger.verbose("database: sync : ensure_destroy'ing %s"%name)
-                accounts.get(name).ensure_destroyed()
+                account.get(name).ensure_destroyed()
         for name, rec in self.iteritems():
             # protect this; if anything fails for a given sliver
             # we still need the other ones to be handled
             try:
-                sliver = accounts.get(name)
-                logger.verbose("database: sync : looping on %s (shell account class from pwd %s)" %(name,sliver._get_class()))
+                sliver = account.get(name)
+                logger.verbose("database: sync : looping on %s (shell account class from pwd %s)" %(name, sliver._get_class()))
                 # Make sure we refresh accounts that are running
                 if rec['instantiation'] == 'plc-instantiated':
                     logger.verbose ("database: sync : ensure_create'ing 'instantiation' sliver %s"%name)
@@ -145,8 +158,10 @@ It may be necessary in the future to do something smarter."""
                     if sliver.is_running():
                         logger.verbose ("database: sync : ensure_create'ing 'delegated' sliver %s"%name)
                         sliver.ensure_created(rec)
+            except SystemExit as e:
+                sys.exit(e)
             except:
-                logger.log_exc("database: sync failed to handle sliver",name=name)
+                logger.log_exc("database: sync failed to handle sliver", name=name)
 
         # Wake up bwmom to update limits.
         bwmon.lock.set()