You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by lf...@apache.org on 2021/08/20 12:09:02 UTC

[incubator-datalab] branch DATALAB-1837 created (now 04c0443)

This is an automated email from the ASF dual-hosted git repository.

lfrolov pushed a change to branch DATALAB-1837
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git.


      at 04c0443  [DATALAB-1527]: remade manage_pkg to catch installation errors

This branch includes the following new commits:

     new 04c0443  [DATALAB-1527]: remade manage_pkg to catch installation errors

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org


[incubator-datalab] 01/01: [DATALAB-1527]: remade manage_pkg to catch installation errors

Posted by lf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lfrolov pushed a commit to branch DATALAB-1837
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git

commit 04c04432600e3e599e26715a962df485e1a4d8d3
Author: leonidfrolov <fr...@gmail.com>
AuthorDate: Fri Aug 20 15:07:43 2021 +0300

    [DATALAB-1527]: remade manage_pkg to catch installation errors
---
 .../src/general/lib/os/debian/common_lib.py        | 90 +++++++++++++++-------
 1 file changed, 62 insertions(+), 28 deletions(-)

diff --git a/infrastructure-provisioning/src/general/lib/os/debian/common_lib.py b/infrastructure-provisioning/src/general/lib/os/debian/common_lib.py
index 28c3bb5..7067218 100644
--- a/infrastructure-provisioning/src/general/lib/os/debian/common_lib.py
+++ b/infrastructure-provisioning/src/general/lib/os/debian/common_lib.py
@@ -29,7 +29,7 @@ import os
 import time
 import subprocess
 import datalab.fab
-def handle_dpkg_lock(error, parser, rerun=False):
+def handle_dpkg_lock(error, rerun=False):
     try:
         count = 0
         while 'no_lock' not in error and count < 10:
@@ -44,9 +44,15 @@ def handle_dpkg_lock(error, parser, rerun=False):
                 datalab.fab.conn.sudo('rm -f /var/lib/dpkg/lock')
 
             if rerun:
-                datalab.fab.conn.sudo('dpkg --configure -a 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({0})" /tmp/tee.tmp > '
-                                  '/tmp/dpkg.log; then echo "no_lock" > /tmp/dpkg.log;fi'.format(parser))
+                datalab.fab.conn.sudo('dpkg --configure -a 2>&1 | tee /tmp/tee.tmp; '
+                                      'if ! grep -w -E "({0})" /tmp/tee.tmp; '
+                                      'then echo "no_lock" > /tmp/dpkg.log;fi; '
+                                      'if ! grep -w -E "({1})" /tmp/tee.tmp; '
+                                      'then echo "no_error" >> /tmp/dpkg.log;fi'.format(lock_parser,
+                                                                                        error_parser))
                 error = datalab.fab.conn.sudo('cat /tmp/dpkg.log').stdout
+                if 'no_error' not in error:
+                    raise Exception
             else:
                 error = 'no_lock'
 
@@ -54,7 +60,7 @@ def handle_dpkg_lock(error, parser, rerun=False):
     except:
         sys.exit(1)
 
-def handle_apt_lock(error, parser, rerun=False):
+def handle_apt_lock(error, rerun=False):
     try:
         count = 0
         while 'no_lock' not in error and count < 10:
@@ -64,9 +70,15 @@ def handle_apt_lock(error, parser, rerun=False):
                 datalab.fab.conn.sudo('rm -f /var/lib/apt/lists/lock')
 
             if rerun:
-                datalab.fab.conn.sudo('apt update 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({0})" /tmp/tee.tmp > '
-                                      '/tmp/apt.log; then echo "no_lock" > /tmp/apt.log;fi'.format(parser))
+                datalab.fab.conn.sudo('apt update 2>&1 | tee /tmp/tee.tmp; '
+                                      'if ! grep -w -E "({0})" /tmp/tee.tmp; '
+                                      'then echo "no_lock" > /tmp/apt.log;fi; '
+                                      'if ! grep -w -E "({1})" /tmp/tee.tmp; '
+                                      'then echo "no_error" >> /tmp/apt.log;fi'.format(lock_parser,
+                                                                                       error_parser))
                 error = datalab.fab.conn.sudo('cat /tmp/apt.log').stdout
+                if 'no_error' not in error:
+                    raise Exception
             else:
                 error = 'no_lock'
 
@@ -74,7 +86,7 @@ def handle_apt_lock(error, parser, rerun=False):
     except:
         sys.exit(1)
 
-def handle_apt_get_lock(error, command, requisites, parser, rerun=False):
+def handle_apt_get_lock(error, rerun=False):
     try:
         count = 0
         while 'no_lock' not in error and count < 10:
@@ -86,9 +98,17 @@ def handle_apt_get_lock(error, command, requisites, parser, rerun=False):
             datalab.fab.conn.sudo('rm -f /var/lib/dpkg/lock')
 
             if rerun:
-                datalab.fab.conn.sudo('apt-get {0} {1} 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({2})" /tmp/tee.tmp > '
-                                      '/tmp/apt.log; then echo "no_lock" > /tmp/apt.log;fi'.format(command, requisites, parser))
-                error = datalab.fab.conn.sudo('cat /tmp/apt.log').stdout
+                datalab.fab.conn.sudo('apt-get {0} {1} 2>&1 | tee /tmp/tee.tmp; '
+                                      'if ! grep -w -E "({2})" /tmp/tee.tmp; '
+                                      'then echo "no_lock" > /tmp/apt_get.log;fi; '
+                                      'if ! grep -w -E "({3})" /tmp/tee.tmp; '
+                                      'then echo "no_error" >> /tmp/apt_get.log;fi'.format(command,
+                                                                                           requisites,
+                                                                                           lock_parser,
+                                                                                           error_parser))
+                error = datalab.fab.conn.sudo('cat /tmp/apt_get.log').stdout
+                if 'no_error' not in error:
+                    raise Exception
             else:
                 error = 'no_lock'
 
@@ -112,30 +132,44 @@ def manage_pkg(command, environment, requisites):
                         time.sleep(10)
                     else:
                         try:
-                            error_parser = "frontend is locked|locked|not get lock|unavailable"
-
-                            datalab.fab.conn.sudo('dpkg --configure -a 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({0})" /tmp/tee.tmp > '
-                                                  '/tmp/dpkg.log; then echo "no_lock" > /tmp/dpkg.log;fi'.format(error_parser))
+                            lock_parser = "frontend is locked|locked|not get lock|unavailable"
+                            error_parser = "Could not|No matching|Error:|E:|failed|Requires:"
+
+                            datalab.fab.conn.sudo('dpkg --configure -a 2>&1 | tee /tmp/tee.tmp; '
+                                                  'if ! grep -w -E "({0})" /tmp/tee.tmp; '
+                                                  'then echo "no_lock" > /tmp/dpkg.log;fi; '
+                                                  'if ! grep -w -E "({1})" /tmp/tee.tmp; '
+                                                  'then echo "no_error" >> /tmp/dpkg.log;fi'.format(lock_parser,
+                                                                                                    error_parser))
                             err = datalab.fab.conn.sudo('cat /tmp/dpkg.log').stdout.replace('\n','')
                             if 'no_lock' not in err:
-                                handle_dpkg_lock(err, error_parser, rerun=True)
-
-
-                            datalab.fab.conn.sudo('apt update 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({0})" /tmp/tee.tmp > '
-                                 '/tmp/apt.log; then echo "no_lock" > /tmp/apt.log;fi'.format(error_parser))
+                                handle_dpkg_lock(err, lock_parser, rerun=True)
+
+                            datalab.fab.conn.sudo('apt update 2>&1 | tee /tmp/tee.tmp; '
+                                                  'if ! grep -w -E "({0})" /tmp/tee.tmp; '
+                                                  'then echo "no_lock" > /tmp/apt.log;fi; '
+                                                  'if ! grep -w -E "({1})" /tmp/tee.tmp; '
+                                                  'then echo "no_error" >> /tmp/apt.log;fi'.format(lock_parser,
+                                                                                                   error_parser))
                             err = datalab.fab.conn.sudo('cat /tmp/apt.log').stdout
                             if 'no_lock' not in err:
-                                handle_dpkg_lock(err, error_parser)
-                                handle_apt_lock(err, error_parser, rerun=True)
-
-                            datalab.fab.conn.sudo('apt-get {0} {1} 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({2})" /tmp/tee.tmp > '
-                                 '/tmp/apt-get.log; then echo "no_lock" > /tmp/apt-get.log;fi'.format(command, requisites, error_parser))
-                            err = datalab.fab.conn.sudo('cat /tmp/apt-get.log').stdout
+                                handle_dpkg_lock(err, lock_parser)
+                                handle_apt_lock(err, lock_parser, rerun=True)
+
+                            datalab.fab.conn.sudo('apt-get {0} {1} 2>&1 | tee /tmp/tee.tmp; '
+                                                  'if ! grep -w -E "({2})" /tmp/tee.tmp; '
+                                                  'then echo "no_lock" > /tmp/apt_get.log;fi; '
+                                                  'if ! grep -w -E "({3})" /tmp/tee.tmp; '
+                                                  'then echo "no_error" >> /tmp/apt_get.log;fi'.format(command,
+                                                                                                       requisites,
+                                                                                                       lock_parser,
+                                                                                                       error_parser))
+                            err = datalab.fab.conn.sudo('cat /tmp/apt_get.log').stdout
 
                             if 'no_lock' not in err:
-                                handle_dpkg_lock(err, error_parser)
-                                handle_apt_lock(err, error_parser)
-                                handle_apt_get_lock(err, command, requisites, error_parser, rerun=True)
+                                handle_dpkg_lock(err)
+                                handle_apt_lock(err)
+                                handle_apt_get_lock(err, rerun=True)
 
                             allow = True
                         except Exception as err:

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org