summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodolfo Alonso Hernandez <ralonsoh@redhat.com>2020-05-13 15:21:33 +0000
committerRodolfo Alonso Hernandez <ralonsoh@redhat.com>2020-05-13 15:21:33 +0000
commitee39ce31af7357d335e5e1f8d9eefa3e2f5fe76d (patch)
tree8d361c40f308d59b94c44ca33d0472fe76aae1e7
parent0e42d495baeb5e97ae2d152e17c73fdb80fb4972 (diff)
downloadoslo-rootwrap-ee39ce31af7357d335e5e1f8d9eefa3e2f5fe76d.tar.gz
Avoid raising a RuntimeError during the shutdown
When the client stops, sends a shutdown command to the root daemon. If the socket is still in use, it will return a RuntimeError and stop the code execution. Instead of this, this exception is now captured and the shutdown command re-executed up to 3 times. In case of not succeeding, the process will continue the client shutdown. Change-Id: I0302b49e38523d6170be407d4563928cfcc3c1a3 Closes-Bug: #1878222
-rw-r--r--oslo_rootwrap/client.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/oslo_rootwrap/client.py b/oslo_rootwrap/client.py
index 0dd0742..a607be3 100644
--- a/oslo_rootwrap/client.py
+++ b/oslo_rootwrap/client.py
@@ -17,6 +17,7 @@ import logging
from multiprocessing import managers
from multiprocessing import util as mp_util
import threading
+import time
import weakref
import oslo_rootwrap
@@ -41,6 +42,7 @@ except AttributeError:
ClientManager = daemon.get_manager_class()
LOG = logging.getLogger(__name__)
+SHUTDOWN_RETRIES = 3
class Client(object):
@@ -108,10 +110,14 @@ class Client(object):
if process.poll() is None:
LOG.info('Stopping rootwrap daemon process with pid=%s',
process.pid)
- try:
- manager.rootwrap().shutdown()
- except (EOFError, IOError):
- pass # assume it is dead already
+ for _ in range(SHUTDOWN_RETRIES):
+ try:
+ manager.rootwrap().shutdown()
+ break
+ except (EOFError, IOError):
+ break # assume it is dead already
+ except RuntimeError:
+ time.sleep(0.2)
# We might want to wait for process to exit or kill it, but we
# can't provide sane timeout on 2.x and we most likely don't have
# permisions to do so