X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=python%2Fvserver.py;h=f5803546cc717a4d5fd2bfb95c60311a196188b2;hb=dd635c41e68bce8433adab88d1a83d47668f3776;hp=c83c3deaf29fb001898fe65bb63eba1a1542d47d;hpb=23497a006f49fde1ce97ca5c18f5669699e514cb;p=util-vserver.git diff --git a/python/vserver.py b/python/vserver.py index c83c3de..f580354 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -58,6 +58,7 @@ class VServer: def __init__(self, name, vm_id = None, vm_running = False): self.name = name + self.limits_changed = False self.config_file = "/etc/vservers/%s.conf" % name self.dir = "%s/%s" % (vserverimpl.VSERVER_BASEDIR, name) if not (os.path.isdir(self.dir) and @@ -120,9 +121,18 @@ class VServer: func = lambda : self.__get_vserver_config(meth,resource_type) self.__dict__["get_%s_config"%meth] = func + def have_limits_changed(self): + return self.limits_changed + def __set_vserver_limit(self,resource_type,hard,soft,minimum): """Generic set resource limit function for vserver""" if self.is_running(): + changed = False + old_hard, old_soft, old_minimum = self.__get_vserver_limit(resource_type) + if old_hard != VC_LIM_KEEP and old_hard <> hard: changed = True + if old_soft != VC_LIM_KEEP and old_soft <> soft: changed = True + if old_minimum != VC_LIM_KEEP and old_minimum <> minimum: changed = True + self.limits_changed = self.limits_changed or changed ret = vserverimpl.setrlimit(self.ctx,resource_type,hard,soft,minimum) def __set_vserver_config(self,meth,resource_type,hard,soft,minimum): @@ -225,7 +235,6 @@ class VServer: return result def set_disklimit(self, block_limit): - # block_limit is in kB if block_limit == 0: vserverimpl.unsetdlimit(self.dir, self.ctx) @@ -247,8 +256,11 @@ class VServer: vserverimpl.DLIMIT_INF, # inode limit 2) # %age reserved for root + resources = {'VS_DISK_MAX': block_limit} + self.update_resources(resources) + def is_running(self): - return self.vm_running and vserverimpl.isrunning(self.ctx) + return vserverimpl.isrunning(self.ctx) def get_disklimit(self): @@ -365,8 +377,8 @@ class VServer: self.__do_chcontext(state_file) def start(self, wait, runlevel = 3): - self.vm_running = True + self.limits_changed = False child_pid = os.fork() if child_pid == 0: @@ -457,9 +469,9 @@ class VServer: return size def stop(self, signal = signal.SIGKILL): - vserverimpl.killall(self.ctx, signal) self.vm_running = False + self.limits_changed = False