Hello community,
here is the log from the commit of package python-oslo.rootwrap for
openSUSE:Factory checked in at 2017-06-08 15:03:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oslo.rootwrap (Old)
and /work/SRC/openSUSE:Factory/.python-oslo.rootwrap.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-oslo.rootwrap"
Thu Jun 8 15:03:10 2017 rev:4 rq:501642 version:5.4.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-oslo.rootwrap/python-oslo.rootwrap.changes
2017-02-21 13:42:16.616618511 +0100
+++
/work/SRC/openSUSE:Factory/.python-oslo.rootwrap.new/python-oslo.rootwrap.changes
2017-06-08 15:03:11.409439584 +0200
@@ -1,0 +2,10 @@
+Wed Jun 7 09:51:00 UTC 2017 - [email protected]
+
+- update to version 5.4.1
+ - Avoid importing Linux specific modules on Windows
+ - Update UPPER_CONSTRAINTS_FILE for stable/ocata
+ - Allow rootwrap-daemon to timeout and exit
+ - [daemon] Close inherited filedescriptors after forking
+ - Update .gitreview for stable/ocata
+
+-------------------------------------------------------------------
Old:
----
oslo.rootwrap-5.4.0.tar.gz
New:
----
oslo.rootwrap-5.4.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-oslo.rootwrap.spec ++++++
--- /var/tmp/diff_new_pack.FW14NH/_old 2017-06-08 15:03:12.029352097 +0200
+++ /var/tmp/diff_new_pack.FW14NH/_new 2017-06-08 15:03:12.029352097 +0200
@@ -18,7 +18,7 @@
%global sname oslo.rootwrap
Name: python-oslo.rootwrap
-Version: 5.4.0
+Version: 5.4.1
Release: 0
Summary: Filtering shell commands to run as root from OpenStack services
License: Apache-2.0
++++++ oslo.rootwrap-5.4.0.tar.gz -> oslo.rootwrap-5.4.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/AUTHORS
new/oslo.rootwrap-5.4.1/AUTHORS
--- old/oslo.rootwrap-5.4.0/AUTHORS 2017-01-18 20:32:57.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/AUTHORS 2017-05-22 19:07:39.000000000 +0200
@@ -4,6 +4,7 @@
Cedric Brandily <[email protected]>
ChangBo Guo(gcb) <[email protected]>
Christian Berendt <[email protected]>
+Claudiu Belu <[email protected]>
Cyril Roelandt <[email protected]>
Davanum Srinivas <[email protected]>
Davanum Srinivas <[email protected]>
@@ -12,6 +13,7 @@
Doug Hellmann <[email protected]>
Doug Hellmann <[email protected]>
Flavio Percoco <[email protected]>
+IWAMOTO Toshihiro <[email protected]>
Ihar Hrachyshka <[email protected]>
Jakub Libosvar <[email protected]>
James Carey <[email protected]>
@@ -22,7 +24,9 @@
Mark McLoughlin <[email protected]>
Maru Newby <[email protected]>
Monty Taylor <[email protected]>
+OpenStack Release Bot <[email protected]>
Pádraig Brady <[email protected]>
+Ralf Haferkamp <[email protected]>
Roman Podolyaka <[email protected]>
Ronald Bradford <[email protected]>
Sean Dague <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/ChangeLog
new/oslo.rootwrap-5.4.1/ChangeLog
--- old/oslo.rootwrap-5.4.0/ChangeLog 2017-01-18 20:32:57.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/ChangeLog 2017-05-22 19:07:39.000000000 +0200
@@ -1,6 +1,15 @@
CHANGES
=======
+5.4.1
+-----
+
+* Allow rootwrap-daemon to timeout and exit
+* Avoid importing Linux specific modules on Windows
+* [daemon] Close inherited filedescriptors after forking
+* Update UPPER_CONSTRAINTS_FILE for stable/ocata
+* Update .gitreview for stable/ocata
+
5.4.0
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/PKG-INFO
new/oslo.rootwrap-5.4.1/PKG-INFO
--- old/oslo.rootwrap-5.4.0/PKG-INFO 2017-01-18 20:32:58.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/PKG-INFO 2017-05-22 19:07:39.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: oslo.rootwrap
-Version: 5.4.0
+Version: 5.4.1
Summary: Oslo Rootwrap
Home-page: http://docs.openstack.org/developer/oslo.rootwrap
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/etc/rootwrap.conf.sample
new/oslo.rootwrap-5.4.1/etc/rootwrap.conf.sample
--- old/oslo.rootwrap-5.4.0/etc/rootwrap.conf.sample 2017-01-18
20:31:15.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/etc/rootwrap.conf.sample 2017-05-22
19:05:28.000000000 +0200
@@ -25,3 +25,6 @@
# INFO means log all usage
# ERROR means only log unsuccessful attempts
syslog_log_level=ERROR
+
+# Rootwrap daemon exits after this seconds of inactivity
+daemon_timeout=600
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/oslo.rootwrap.egg-info/PKG-INFO
new/oslo.rootwrap-5.4.1/oslo.rootwrap.egg-info/PKG-INFO
--- old/oslo.rootwrap-5.4.0/oslo.rootwrap.egg-info/PKG-INFO 2017-01-18
20:32:57.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/oslo.rootwrap.egg-info/PKG-INFO 2017-05-22
19:07:39.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: oslo.rootwrap
-Version: 5.4.0
+Version: 5.4.1
Summary: Oslo Rootwrap
Home-page: http://docs.openstack.org/developer/oslo.rootwrap
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/oslo.rootwrap.egg-info/pbr.json
new/oslo.rootwrap-5.4.1/oslo.rootwrap.egg-info/pbr.json
--- old/oslo.rootwrap-5.4.0/oslo.rootwrap.egg-info/pbr.json 2017-01-18
20:32:57.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/oslo.rootwrap.egg-info/pbr.json 2017-05-22
19:07:39.000000000 +0200
@@ -1 +1 @@
-{"is_release": true, "git_version": "698ce0b"}
\ No newline at end of file
+{"git_version": "fdacd0e", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/oslo_rootwrap/client.py
new/oslo.rootwrap-5.4.1/oslo_rootwrap/client.py
--- old/oslo.rootwrap-5.4.0/oslo_rootwrap/client.py 2017-01-18
20:31:15.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/oslo_rootwrap/client.py 2017-05-22
19:05:28.000000000 +0200
@@ -62,7 +62,8 @@
process_obj = subprocess.Popen(self._start_command,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
+ stderr=subprocess.PIPE,
+ close_fds=True)
LOG.debug("Popen for %s command has been instantiated",
self._start_command)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/oslo_rootwrap/daemon.py
new/oslo.rootwrap-5.4.1/oslo_rootwrap/daemon.py
--- old/oslo.rootwrap-5.4.0/oslo_rootwrap/daemon.py 2017-01-18
20:31:15.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/oslo_rootwrap/daemon.py 2017-05-22
19:05:28.000000000 +0200
@@ -26,6 +26,7 @@
import sys
import tempfile
import threading
+import time
from oslo_rootwrap import cmd
from oslo_rootwrap import jsonrpc
@@ -44,8 +45,11 @@
def __init__(self, config, filters):
self.config = config
self.filters = filters
+ self.reset_timer()
+ self.prepare_timer(config)
def run_one_command(self, userargs, stdin=None):
+ self.reset_timer()
try:
obj = wrapper.start_subprocess(
self.filters, userargs,
@@ -73,7 +77,40 @@
err = os.fsdecode(err)
return obj.returncode, out, err
- def shutdown(self):
+ @classmethod
+ def reset_timer(cls):
+ cls.last_called = time.time()
+
+ @classmethod
+ def cancel_timer(cls):
+ try:
+ cls.timeout.cancel()
+ except RuntimeError:
+ pass
+
+ @classmethod
+ def prepare_timer(cls, config=None):
+ if config is not None:
+ cls.daemon_timeout = config.daemon_timeout
+ # Wait a bit longer to avoid rounding errors
+ timeout = max(
+ cls.last_called + cls.daemon_timeout - time.time(),
+ 0) + 1
+ if getattr(cls, 'timeout', None):
+ # Another timer is already initialized
+ return
+ cls.timeout = threading.Timer(timeout, cls.handle_timeout)
+ cls.timeout.start()
+
+ @classmethod
+ def handle_timeout(cls):
+ if cls.last_called < time.time() - cls.daemon_timeout:
+ cls.shutdown()
+
+ cls.prepare_timer()
+
+ @staticmethod
+ def shutdown():
# Suicide to force break of the main thread
os.kill(os.getpid(), signal.SIGINT)
@@ -144,6 +181,7 @@
except Exception:
# Most likely the socket have already been closed
LOG.debug("Failed to close connection")
+ RootwrapClass.cancel_timer()
LOG.info("Waiting for all client threads to finish.")
for thread in threading.enumerate():
if thread.daemon:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/oslo_rootwrap/filters.py
new/oslo.rootwrap-5.4.1/oslo_rootwrap/filters.py
--- old/oslo.rootwrap-5.4.0/oslo_rootwrap/filters.py 2017-01-18
20:31:15.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/oslo_rootwrap/filters.py 2017-05-22
19:05:29.000000000 +0200
@@ -14,9 +14,14 @@
# under the License.
import os
-import pwd
import re
import shutil
+import sys
+
+if sys.platform != 'win32':
+ # NOTE(claudiub): pwd is a Linux-specific library, and currently there is
+ # no Windows support for oslo.rootwrap.
+ import pwd
def _getuid(user):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo.rootwrap-5.4.0/oslo_rootwrap/tests/test_functional.py
new/oslo.rootwrap-5.4.1/oslo_rootwrap/tests/test_functional.py
--- old/oslo.rootwrap-5.4.0/oslo_rootwrap/tests/test_functional.py
2017-01-18 20:31:15.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/oslo_rootwrap/tests/test_functional.py
2017-05-22 19:05:29.000000000 +0200
@@ -21,6 +21,7 @@
import signal
import sys
import threading
+import time
try:
import eventlet
@@ -50,6 +51,7 @@
with open(self.config_file, 'w') as f:
f.write("""[DEFAULT]
filters_path=%s
+daemon_timeout=10
exec_dirs=/bin""" % (filters_dir,))
with open(filters_file, 'w') as f:
f.write("""[Filters]
@@ -200,6 +202,15 @@
# Expect client to successfully restart daemon and run simple request
self.test_run_once()
+ def test_daemon_timeout(self):
+ # Let the client start a daemon
+ self.execute(['echo'])
+ # Make daemon timeout
+ with mock.patch.object(self.client, '_restart') as restart:
+ time.sleep(15)
+ self.execute(['echo'])
+ restart.assert_called_once()
+
def _exec_thread(self, fifo_path):
try:
# Run a shell script that signals calling process through FIFO and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/oslo_rootwrap/wrapper.py
new/oslo.rootwrap-5.4.1/oslo_rootwrap/wrapper.py
--- old/oslo.rootwrap-5.4.0/oslo_rootwrap/wrapper.py 2017-01-18
20:31:15.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/oslo_rootwrap/wrapper.py 2017-05-22
19:05:29.000000000 +0200
@@ -16,8 +16,11 @@
import logging
import logging.handlers
import os
-import pwd
import signal
+import sys
+
+if sys.platform != 'win32':
+ import pwd
import six
from six import moves
@@ -88,6 +91,12 @@
else:
self.use_syslog = False
+ # daemon_timeout
+ if config.has_option("DEFAULT", "daemon_timeout"):
+ self.daemon_timeout = int(config.get("DEFAULT", "daemon_timeout"))
+ else:
+ self.daemon_timeout = 600
+
def setup_syslog(execname, facility, level):
rootwrap_logger = logging.getLogger()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo.rootwrap-5.4.0/tox.ini
new/oslo.rootwrap-5.4.1/tox.ini
--- old/oslo.rootwrap-5.4.0/tox.ini 2017-01-18 20:31:15.000000000 +0100
+++ new/oslo.rootwrap-5.4.1/tox.ini 2017-05-22 19:05:29.000000000 +0200
@@ -7,7 +7,7 @@
VIRTUAL_ENV={envdir}
BRANCH_NAME=master
CLIENT_NAME=oslo.rootwrap
-install_command = {toxinidir}/tools/tox_install.sh
{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
{opts} {packages}
+install_command = {toxinidir}/tools/tox_install.sh
{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/ocata}
{opts} {packages}
deps = -r{toxinidir}/test-requirements.txt
# Functional tests with Eventlet involve monkeypatching, so force them to be
# run in a separate process