Alon Bar-Lev has uploaded a new change for review.

Change subject: bootstrap: perform reboot asynchronously
......................................................................

bootstrap: perform reboot asynchronously

The use of /sbin/reboot may cause reboot to be performed at the middle
of script execution.

Reboot should be delayed in background so that script will have a fair
chance to terminate properly.

Change-Id: I0abb02ae4d5033a8b9f2d468da86fcdc53e2e1c2
Signed-off-by: Alon Bar-Lev <[email protected]>
---
M vdsm_reg/deployUtil.py.in
1 file changed, 39 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/83/7783/1

diff --git a/vdsm_reg/deployUtil.py.in b/vdsm_reg/deployUtil.py.in
index ebc7d36..b72cb44 100644
--- a/vdsm_reg/deployUtil.py.in
+++ b/vdsm_reg/deployUtil.py.in
@@ -166,13 +166,47 @@
 
 def reboot():
     """
-        This function reboots the machine.
+        This function reboots the machine async
     """
-    fReturn = True
+    fReturn = False
 
-    out, err, ret = _logExec([EX_REBOOT])
-    if ret:
-        fReturn = False
+    # Default maximum for the number of available file descriptors.
+    MAXFD = 1024
+
+    import resource  # Resource usage information.
+    maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
+    if (maxfd == resource.RLIM_INFINITY):
+        maxfd = MAXFD
+
+    try:
+        pid = os.fork()
+        if pid == 0:
+            try:
+                os.setsid()
+                for fd in range(0, maxfd):
+                    try:
+                        os.close(fd)
+                    except OSError:  # ERROR, fd wasn't open to begin with 
(ignored)
+                        pass
+
+                os.open(os.devnull, os.O_RDWR)  # standard input (0)
+                os.dup2(0, 1)  # standard output (1)
+                os.dup2(0, 2)  # standard error (2)
+
+                if os.fork() != 0:
+                    os._exit(0)
+
+                time.sleep(10)
+                os.execl(EX_REBOOT, EX_REBOOT)
+            finally:
+                os._exit(1)
+
+        pid, status = os.waitpid(pid, 0)
+
+        if os.WIFEXITED(status) and os.WEXITSTATUS(status) == 0:
+            fReturn = True
+    except OSError:
+        pass
 
     return fReturn
 


--
To view, visit http://gerrit.ovirt.org/7783
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0abb02ae4d5033a8b9f2d468da86fcdc53e2e1c2
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Alon Bar-Lev <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to