while True:
db_lock.acquire()
while not dump_requested: db_cond.wait()
- db_copy = tools.deepcopy(db)
+ db_pickle = cPickle.dumps(db, cPickle.HIGHEST_PROTOCOL)
dump_requested = False
db_lock.release()
- try: tools.write_file(DB_FILE, lambda f: cPickle.dump(db_copy, f, -1))
+ try: tools.write_file(DB_FILE, lambda f: f.write(db_pickle))
except: logger.log_exc()
global db
try:
import time
import xmlrpclib
-import cf
+import conf_files
import logger
import sm
import tools
return
start_and_register_callback(sm)
- start_and_register_callback(cf)
+ start_and_register_callback(conf_files)
while True:
try: GetSlivers()
except: logger.log_exc()
self.init_disk_info()
self.disk_usage_initialized = True
vserver.VServer.set_disklimit(self, disk_max)
- except OSError: logger.log_exc()
+ except OSError:
+ logger.log('%s: failed to set max disk usage' % self.name)
+ logger.log_exc()
net_limits = (self.rspec['net_min'], self.rspec['net_max'], self.rspec['net2_min'], self.rspec['net2_max'], self.rspec['net_share'])
logger.log('%s: setting net limits to %s bps' % (self.name, net_limits[:-1]))
cpu_min = self.rspec['cpu_min']
cpu_share = self.rspec['cpu_share']
if self.rspec['enabled']:
- if cpu_min > 0:
+ if cpu_min >= 50: # at least 5%: keep people from shooting themselves in the foot
logger.log('%s: setting cpu share to %d%% guaranteed' % (self.name, cpu_min/10.0))
self.set_sched_config(cpu_min, vserver.SCHED_CPU_GUARANTEED)
else:
devnull = os.open(os.devnull, os.O_RDWR)
for fd in range(3): os.dup2(devnull, fd)
-def deepcopy(obj):
- """Return a deep copy of obj."""
- return cPickle.loads(cPickle.dumps(obj, -1))
-
def fork_as(su, function, *args):
"""fork(), cd / to avoid keeping unused directories open, close all nonstandard file descriptors (to avoid capturing open sockets), fork() again (to avoid zombies) and call <function> with arguments <args> in the grandchild process. If <su> is not None, set our group and user ids appropriately in the child process."""
child_pid = os.fork()