From bd0759d61f21da59f09a39ee74cb6bb523476222 Mon Sep 17 00:00:00 2001 From: Marc Fiuczynski Date: Thu, 30 Oct 2008 07:27:41 +0000 Subject: [PATCH 01/16] bump tag level and added changelog --- util-vserver-pl.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/util-vserver-pl.spec b/util-vserver-pl.spec index 092d1e8..15dee80 100644 --- a/util-vserver-pl.spec +++ b/util-vserver-pl.spec @@ -5,7 +5,7 @@ %define name util-vserver-pl %define version 0.3 -%define taglevel 14 +%define taglevel 15 %define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}} @@ -101,6 +101,11 @@ rm -fr %{buildroot} %{_mandir}/man8/vsh.8* %changelog +* Wed Oct 29 2008 Marc E. Fiuczynski - util-vserver-pl-0.3-15 +- added in support for rlimit MEM_LOCK +- fixed bug in reading -1 value from VSERVERCONF//rlimits/memlock.hard file +- reduced compilation warnings + * Tue Sep 23 2008 Thierry Parmentelat - util-vserver-pl-0.3-14 - configure/make check the version of libnl and can cope with either 1.1 or 1.0-pre6 - as centos does not have any of these, do build vip6-autod on fedora only -- 2.43.0 From f533b3af061c81188d517c3a92c213662588cc46 Mon Sep 17 00:00:00 2001 From: Marc Fiuczynski Date: Wed, 5 Nov 2008 22:07:34 +0000 Subject: [PATCH 02/16] added in a 'setup' boolean argument to indicate that set_resources is being called while setting up a vserver --- python/vserver.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/vserver.py b/python/vserver.py index 69e150c..577a44a 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -369,7 +369,7 @@ class VServer: state_file.close() if vserverimpl.chcontext(self.ctx, vserverimpl.text2bcaps(self.get_capabilities_config())): - self.set_resources() + self.set_resources(True) vserverimpl.setup_done(self.ctx) def __prep(self, runlevel): @@ -472,7 +472,7 @@ class VServer: self.log(traceback.format_exc()) os._exit(0) - def set_resources(self): + def set_resources(self,setup=False): """ Called when vserver context is entered for first time, should be overridden by subclass. """ -- 2.43.0 From 689cbb7f0e03bf8695d80247078855759545e53c Mon Sep 17 00:00:00 2001 From: Faiyaz Ahmed Date: Thu, 29 Jan 2009 20:34:06 +0000 Subject: [PATCH 03/16] support turning off all queueing --- python/bwlimit.py | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/python/bwlimit.py b/python/bwlimit.py index 18fdaac..7b3cf05 100644 --- a/python/bwlimit.py +++ b/python/bwlimit.py @@ -154,24 +154,24 @@ default_share = 1 # be off by a small fraction. suffixes = { "": 1, - "bit": 1, - "kibit": 1024, - "kbit": 1000, - "mibit": 1024*1024, - "mbit": 1000000, - "gibit": 1024*1024*1024, - "gbit": 1000000000, - "tibit": 1024*1024*1024*1024, - "tbit": 1000000000000, - "bps": 8, - "kibps": 8*1024, - "kbps": 8000, - "mibps": 8*1024*1024, - "mbps": 8000000, - "gibps": 8*1024*1024*1024, - "gbps": 8000000000, - "tibps": 8*1024*1024*1024*1024, - "tbps": 8000000000000 + "bit": 1, + "kibit": 1024, + "kbit": 1000, + "mibit": 1024*1024, + "mbit": 1000000, + "gibit": 1024*1024*1024, + "gbit": 1000000000, + "tibit": 1024*1024*1024*1024, + "tbit": 1000000000000, + "bps": 8, + "kibps": 8*1024, + "kbps": 8000, + "mibps": 8*1024*1024, + "mbps": 8000000, + "gibps": 8*1024*1024*1024, + "gbps": 8000000000, + "tibps": 8*1024*1024*1024*1024, + "tbps": 8000000000000 } @@ -321,6 +321,13 @@ def tc(cmd): return run(TC + " " + cmd) +def stop(dev = dev): + ''' + Turn off all queing. Stops all slice HTBS and reverts to pfifo_fast (the default). + ''' + tc("qdisc del dev %s root" % dev) + + def init(dev = dev, bwcap = bwmax): """ (Re)initialize the bandwidth limits on this node @@ -617,7 +624,7 @@ Usage: %s [OPTION]... [COMMAND] [ARGUMENT]... Options: - -d device Network interface (default: %s) + -d device Network interface (default: %s) -r rate Node bandwidth cap (default: %s) -q quantum Share multiplier (default: %d bytes) -n Print rates in numeric bits per second -- 2.43.0 From 6b5db2f29ebe205319fc40f27a8cd745bfa29ff1 Mon Sep 17 00:00:00 2001 From: Faiyaz Ahmed Date: Thu, 29 Jan 2009 20:45:52 +0000 Subject: [PATCH 04/16] dirty...dirty..dirty hack to get rid of r2q. --- python/bwlimit.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python/bwlimit.py b/python/bwlimit.py index 7b3cf05..58d3052 100644 --- a/python/bwlimit.py +++ b/python/bwlimit.py @@ -325,7 +325,10 @@ def stop(dev = dev): ''' Turn off all queing. Stops all slice HTBS and reverts to pfifo_fast (the default). ''' - tc("qdisc del dev %s root" % dev) + try: + for i in range(0,2): + tc("qdisc del dev %s root" % dev) + except: pass def init(dev = dev, bwcap = bwmax): -- 2.43.0 From b6b0bf740cd270164d39d8569fb26a68579390eb Mon Sep 17 00:00:00 2001 From: Faiyaz Ahmed Date: Thu, 29 Jan 2009 20:50:34 +0000 Subject: [PATCH 05/16] Tagging module util-vserver-pl - util-vserver-pl-0.3-16 supports disabling htbs. --- util-vserver-pl.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/util-vserver-pl.spec b/util-vserver-pl.spec index 15dee80..e14b3ea 100644 --- a/util-vserver-pl.spec +++ b/util-vserver-pl.spec @@ -5,7 +5,7 @@ %define name util-vserver-pl %define version 0.3 -%define taglevel 15 +%define taglevel 16 %define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}} @@ -101,6 +101,9 @@ rm -fr %{buildroot} %{_mandir}/man8/vsh.8* %changelog +* Thu Jan 29 2009 Faiyaz Ahmed - util-vserver-pl-0.3-16 +- supports disabling htbs. + * Wed Oct 29 2008 Marc E. Fiuczynski - util-vserver-pl-0.3-15 - added in support for rlimit MEM_LOCK - fixed bug in reading -1 value from VSERVERCONF//rlimits/memlock.hard file -- 2.43.0 From 67fc113228b1909f5c0ffadfeea3cfa0141ab673 Mon Sep 17 00:00:00 2001 From: Faiyaz Ahmed Date: Tue, 28 Jul 2009 21:30:17 +0000 Subject: [PATCH 06/16] Var is never cleaned IN the context. Fixed. THis still does not fix RH initscripts. --- python/vserver.py | 49 ++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/python/vserver.py b/python/vserver.py index 577a44a..4fc552d 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -372,37 +372,44 @@ class VServer: self.set_resources(True) vserverimpl.setup_done(self.ctx) + def __prep(self, runlevel): """ Perform all the crap that the vserver script does before actually executing the startup scripts. """ - # remove /var/run and /var/lock/subsys files - # but don't remove utmp from the top-level /var/run - RUNDIR = "/var/run" - LOCKDIR = "/var/lock/subsys" - filter_fn = lambda fs: filter(lambda f: f != 'utmp', fs) - garbage = reduce((lambda (out, ff), (dir, subdirs, files): - (out + map((dir + "/").__add__, ff(files)), - lambda fs: fs)), - list(os.walk(RUNDIR)), - ([], filter_fn))[0] - garbage += filter(os.path.isfile, map((LOCKDIR + "/").__add__, - os.listdir(LOCKDIR))) - if False: - for f in garbage: - os.unlink(f) # set the initial runlevel - vserverimpl.setrunlevel(RUNDIR + "/utmp", runlevel) + vserverimpl.setrunlevel(self.dir + "/utmp", runlevel) # mount /proc and /dev/pts self.__do_mount("none", self.dir, "/proc", "proc") # XXX - magic mount options self.__do_mount("none", self.dir, "/dev/pts", "devpts", 0, "gid=5,mode=0620") - def __do_mount(self, *mount_args): + def __cleanvar(self): + """ + Clean the /var/ directory so RH startup scripts can run + """ + + RUNDIR = "/var/run" + LOCKDIR = "/var/lock/subsys" + + filter = ["utmp"] + garbage = [] + for topdir in [RUNDIR, LOCKDIR]: + #os.walk() = (dirpath, dirnames, filenames) + for root, dirs, files in os.walk(topdir): + for file in files: + if not file in filter: + garbage.append(root + "/" + file) + + for f in garbage: os.unlink(f) + return garbage + + + def __do_mount(self, *mount_args): try: vserverimpl.mount(*mount_args) except OSError, ex: @@ -411,11 +418,13 @@ class VServer: return raise ex + def enter(self): self.config.cache_it() self.__do_chroot() self.__do_chcontext(None) + def start(self, runlevel = 3): if (os.fork() != 0): @@ -445,13 +454,17 @@ class VServer: self.config.cache_it() self.__do_chroot() + removed = self.__cleanvar() + log = open("/var/log/boot.log", "a", 0) if log.fileno() != 1: os.dup2(log.fileno(), 1) os.dup2(1, 2) + print >>log, ("%s: removing %s" % + (time.asctime(time.gmtime()), removed)) print >>log, ("%s: starting the virtual server %s" % - (time.asctime(time.gmtime()), self.name)) + (time.asctime(time.gmtime()), self.name)) # execute each init script in turn # XXX - we don't support all scripts that vserver script does self.__do_chcontext(state_file) -- 2.43.0 From 8c938b9ba948fdb03ead8d12ec2a968e3ad5f999 Mon Sep 17 00:00:00 2001 From: Faiyaz Ahmed Date: Tue, 4 Aug 2009 16:12:33 +0000 Subject: [PATCH 07/16] setting runlevels was set to the wrong path. FIXED --- python/vserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/vserver.py b/python/vserver.py index 4fc552d..8aa410e 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -380,7 +380,7 @@ class VServer: # set the initial runlevel - vserverimpl.setrunlevel(self.dir + "/utmp", runlevel) + vserverimpl.setrunlevel(self.dir + "/var/run/utmp", runlevel) # mount /proc and /dev/pts self.__do_mount("none", self.dir, "/proc", "proc") -- 2.43.0 From 9de46d6b3690d81304be4c0c7484492aea91aee1 Mon Sep 17 00:00:00 2001 From: Faiyaz Ahmed Date: Tue, 4 Aug 2009 16:16:03 +0000 Subject: [PATCH 08/16] Setting tag util-vserver-pl-0.3-17 Fix runlevel clean up after reboot. Fix runlevel setup to reflect proper runlevel. --- util-vserver-pl.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/util-vserver-pl.spec b/util-vserver-pl.spec index e14b3ea..eba5b40 100644 --- a/util-vserver-pl.spec +++ b/util-vserver-pl.spec @@ -5,7 +5,7 @@ %define name util-vserver-pl %define version 0.3 -%define taglevel 16 +%define taglevel 17 %define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}} @@ -101,6 +101,10 @@ rm -fr %{buildroot} %{_mandir}/man8/vsh.8* %changelog +* Tue Aug 04 2009 Faiyaz Ahmed - util-vserver-pl-0.3-17 +- Fix runlevel clean up after reboot. +- Fix runlevel setup to reflect proper runlevel. + * Thu Jan 29 2009 Faiyaz Ahmed - util-vserver-pl-0.3-16 - supports disabling htbs. -- 2.43.0 From 7be1602d61396bc4224b79c86dbeae8b7a44a153 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bar=C4=B1=C5=9F=20Metin?= Date: Wed, 14 Oct 2009 08:46:32 +0000 Subject: [PATCH 09/16] in bwlimit.set() do not use the global 'dev' but get and pass it to bwlimit.on() --- python/bwlimit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/bwlimit.py b/python/bwlimit.py index 58d3052..aeaa704 100644 --- a/python/bwlimit.py +++ b/python/bwlimit.py @@ -573,8 +573,8 @@ def on(xid, dev = dev, share = None, minrate = None, maxrate = None, minexemptra (dev, exempt_minor | xid, exempt_minor | xid)) -def set(xid, share = None, minrate = None, maxrate = None, minexemptrate = None, maxexemptrate = None): - on(xid = xid, share = share, +def set(xid, share = None, minrate = None, maxrate = None, minexemptrate = None, maxexemptrate = None, dev = dev ): + on(xid = xid, dev = dev, share = share, minrate = minrate, maxrate = maxrate, minexemptrate = minexemptrate, maxexemptrate = maxexemptrate) -- 2.43.0 From 21f5bb29128ab5ca5f52acbdcc10771cf154bdca Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bar=C4=B1=C5=9F=20Metin?= Date: Tue, 20 Oct 2009 12:53:58 +0000 Subject: [PATCH 10/16] bwlimit.set() now accepts the device and don't assume that it's eth0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Setting tag util-vserver-pl-0.3-18 --This line, and those below, will be ignored-- Please write a changelog for this new tag in the section above DIFF========= Index: python/bwlimit.py =================================================================== --- python/bwlimit.py (.../tags/util-vserver-pl-0.3-17) (révision 15382) +++ python/bwlimit.py (.../trunk) (révision 15382) @@ -573,8 +573,8 @@ (dev, exempt_minor | xid, exempt_minor | xid)) -def set(xid, share = None, minrate = None, maxrate = None, minexemptrate = None, maxexemptrate = None): - on(xid = xid, share = share, +def set(xid, share = None, minrate = None, maxrate = None, minexemptrate = None, maxexemptrate = None, dev = dev ): + on(xid = xid, dev = dev, share = share, minrate = minrate, maxrate = maxrate, minexemptrate = minexemptrate, maxexemptrate = maxexemptrate) --- util-vserver-pl.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/util-vserver-pl.spec b/util-vserver-pl.spec index eba5b40..3f22374 100644 --- a/util-vserver-pl.spec +++ b/util-vserver-pl.spec @@ -5,7 +5,7 @@ %define name util-vserver-pl %define version 0.3 -%define taglevel 17 +%define taglevel 18 %define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}} @@ -101,6 +101,9 @@ rm -fr %{buildroot} %{_mandir}/man8/vsh.8* %changelog +* Tue Oct 20 2009 Baris Metin - util-vserver-pl-0.3-18 +- bwlimit.set() now accepts the device and don't assume that it's eth0 + * Tue Aug 04 2009 Faiyaz Ahmed - util-vserver-pl-0.3-17 - Fix runlevel clean up after reboot. - Fix runlevel setup to reflect proper runlevel. -- 2.43.0 From ecf0a3d24dc06f44a39a385af43fd804b2e45efa Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Sat, 24 Oct 2009 21:38:07 +0000 Subject: [PATCH 11/16] Optimize the 0.0.0.0 case, and get it working on 2.3 kernels. --- python/vserver.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/python/vserver.py b/python/vserver.py index 8aa410e..081fd8a 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -129,6 +129,26 @@ class VServerConfig: os.path.walk(self.dir, add_to_cache, self.cache) +def adjust_lim(goal, curr): + gh = goal[0] + gs = goal[1] + gm = goal[2] + soft = curr[0] + hard = curr[1] + if gm != VC_LIM_KEEP: + if gm > soft: + soft = gm + if gm > hard: + hard = gm + if gs != VC_LIM_KEEP: + if gs > soft: + soft = gs + if gh != VC_LIM_KEEP: + if gh > hard: + hard = gh + return (soft, hard) + + class VServer: INITSCRIPTS = [('/etc/rc.vinit', 'start'), @@ -181,6 +201,9 @@ class VServer: resource_type = RLIMITS[type] try: vserverimpl.setrlimit(self.ctx, resource_type, hard, soft, min) + lim = resource.getrlimit(resource_type) + lim = adjust_lim((hard, soft, min), lim) + resource.setrlimit(resource_type, lim) except OSError, e: self.log("Error: setrlimit(%d, %s, %d, %d, %d): %s" % (self.ctx, type.lower(), hard, soft, min)) -- 2.43.0 From cc7e93836eb8152b116c460ff3293a9b4b40041a Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Sat, 24 Oct 2009 21:59:43 +0000 Subject: [PATCH 12/16] Only handle the values that translate. --- python/vserver.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/python/vserver.py b/python/vserver.py index 081fd8a..6e5c709 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -201,9 +201,10 @@ class VServer: resource_type = RLIMITS[type] try: vserverimpl.setrlimit(self.ctx, resource_type, hard, soft, min) - lim = resource.getrlimit(resource_type) - lim = adjust_lim((hard, soft, min), lim) - resource.setrlimit(resource_type, lim) + if hasattr(resource, 'RLIMIT_' + type): + lim = resource.getrlimit(resource_type) + lim = adjust_lim((hard, soft, min), lim) + resource.setrlimit(resource_type, lim) except OSError, e: self.log("Error: setrlimit(%d, %s, %d, %d, %d): %s" % (self.ctx, type.lower(), hard, soft, min)) -- 2.43.0 From 2c2adaa008b660087eceabb98b42f98ab7cb3ce3 Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Mon, 26 Oct 2009 05:40:02 +0000 Subject: [PATCH 13/16] infinity is greater than anything. --- python/vserver.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/vserver.py b/python/vserver.py index 6e5c709..c5464c5 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -136,15 +136,15 @@ def adjust_lim(goal, curr): soft = curr[0] hard = curr[1] if gm != VC_LIM_KEEP: - if gm > soft: + if gm > soft or gm == resource.RLIM_INFINITY: soft = gm - if gm > hard: + if gm > hard or gs == resource.RLIM_INFINITY: hard = gm if gs != VC_LIM_KEEP: - if gs > soft: + if gs > soft or gs == resource.RLIM_INFINITY: soft = gs if gh != VC_LIM_KEEP: - if gh > hard: + if gh > hard or gh == resource.RLIM_INFINITY: hard = gh return (soft, hard) -- 2.43.0 From a36ce891b08744aa8ba58ac8fc244a07e146a015 Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Wed, 28 Oct 2009 01:33:54 +0000 Subject: [PATCH 14/16] Fix typo. --- python/vserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/vserver.py b/python/vserver.py index c5464c5..f66721d 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -138,7 +138,7 @@ def adjust_lim(goal, curr): if gm != VC_LIM_KEEP: if gm > soft or gm == resource.RLIM_INFINITY: soft = gm - if gm > hard or gs == resource.RLIM_INFINITY: + if gm > hard or gm == resource.RLIM_INFINITY: hard = gm if gs != VC_LIM_KEEP: if gs > soft or gs == resource.RLIM_INFINITY: -- 2.43.0 From ed4def0d0d22aee8bfe687673378e10563fcd3e2 Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Wed, 28 Oct 2009 01:44:34 +0000 Subject: [PATCH 15/16] Setting tag util-vserver-pl-0.3-19 Set ulimits for NM too. --- util-vserver-pl.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/util-vserver-pl.spec b/util-vserver-pl.spec index 3f22374..90ac229 100644 --- a/util-vserver-pl.spec +++ b/util-vserver-pl.spec @@ -5,7 +5,7 @@ %define name util-vserver-pl %define version 0.3 -%define taglevel 18 +%define taglevel 19 %define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}} @@ -101,6 +101,9 @@ rm -fr %{buildroot} %{_mandir}/man8/vsh.8* %changelog +* Wed Oct 28 2009 Daniel Hokka Zakrisson - util-vserver-pl-0.3-19 +- Set ulimits for NM too. + * Tue Oct 20 2009 Baris Metin - util-vserver-pl-0.3-18 - bwlimit.set() now accepts the device and don't assume that it's eth0 -- 2.43.0 From a912225d00572142cdbea2f380e7a78073044c70 Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Thu, 12 Nov 2009 21:18:31 +0000 Subject: [PATCH 16/16] Log error as well. --- python/vserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/vserver.py b/python/vserver.py index f66721d..569b979 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -321,7 +321,7 @@ class VServer: vserverimpl.DLIMIT_INF, # inode limit 2) # %age reserved for root except OSError, e: - self.log("Unexpected error with setdlimit for context %d" % self.ctx) + self.log("Unexpected error with setdlimit for context %d: %s" % (self.ctx, e)) self.config.update('dlimits/0/space_total', block_limit) -- 2.43.0