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

Change subject: packaging: sync miniyum with otopi
......................................................................

packaging: sync miniyum with otopi

queryLocalCache is not actually needed, was left over from legacy
upgrade. Yum standard query provides the same functionality.

Disable parallel fetch so we can monitor progress.

Support plugin enable/disable so in future we will be able to check for
engine update without touching the versionlock file.

Change-Id: Ife4f8b5fe4c683b936c00d233bf18ad7d377f07a
Signed-off-by: Alon Bar-Lev <[email protected]>
---
M packaging/fedora/setup/common_utils.py
M packaging/fedora/setup/engine-upgrade.py
M packaging/fedora/setup/miniyum.py
3 files changed, 68 insertions(+), 27 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/25/10725/1

diff --git a/packaging/fedora/setup/common_utils.py 
b/packaging/fedora/setup/common_utils.py
index 581e4fe..62d4828 100755
--- a/packaging/fedora/setup/common_utils.py
+++ b/packaging/fedora/setup/common_utils.py
@@ -19,7 +19,7 @@
 import time
 import tempfile
 import csv
-from miniyum import MiniYum
+import miniyum
 
 """
 ENUM implementation for python (from the vdsm team)
@@ -289,7 +289,7 @@
         parentNode.addChild(newNode.xpathEval('/*')[0])
 
 
-class MiniYumSink(object):
+class MiniYumSink(miniyum.MiniYumSinkBase):
     """miniyum user interaction sink.
 
     We want logging to go into our own internal log.
@@ -312,6 +312,7 @@
             raise
 
     def __init__(self):
+        super(MiniYumSink, self).__init__()
         self._fds = None
         self._fds = self._currentfds()
 
@@ -321,16 +322,19 @@
                 os.close(fd)
 
     def verbose(self, msg):
+        super(MiniYumSink, self).verbose(msg)
         logging.debug("YUM: VERB: %s" % msg)
 
     def info(self, msg):
+        super(MiniYumSink, self).info(msg)
         logging.info("YUM: OK:   %s" % msg)
 
     def error(self, msg):
+        super(MiniYumSink, self).error(msg)
         logging.error("YUM: FAIL: %s" % msg)
 
     def keepAlive(self, msg):
-        pass
+        super(MiniYumSink, self).keepAlive(msg)
 
     def askForGPGKeyImport(self, userid, hexkeyid):
         logging.warning("YUM: APPROVE-GPG: userid=%s, hexkeyid=%s" % (
@@ -345,9 +349,6 @@
         for i in range(3):
             os.dup2(save[i], i)
         return ret
-
-    def reexec(self):
-        pass
 
 def getXmlNode(xml, xpath):
     nodes = xml.xpathEval(xpath)
@@ -1270,10 +1271,10 @@
 
     # TODO
     # Do not create miniyum here, pass it via argument
-    miniyum = MiniYum(sink=MiniYumSink())
+    localminiyum = miniyum.MiniYum(sink=MiniYumSink())
 
     res = [
-        p for p in miniyum.queryPackages(patterns=[rpmName])
+        p for p in localminiyum.queryPackages(patterns=[rpmName])
         if p['operation'] == 'installed'
     ]
 
diff --git a/packaging/fedora/setup/engine-upgrade.py 
b/packaging/fedora/setup/engine-upgrade.py
index de0c203..62aa5a8 100755
--- a/packaging/fedora/setup/engine-upgrade.py
+++ b/packaging/fedora/setup/engine-upgrade.py
@@ -331,7 +331,7 @@
             for query in 
self._miniyum.queryPackages(patterns=[package['name']]):
                 if query['operation'] == 'installed':
                     logging.debug("Checking package %s", query['display_name'])
-                    if not 
self._miniyum.queryLocalCachePackages(patterns=[query['display_name']]):
+                    if not 
self._miniyum.queryPackages(patterns=[query['display_name']], showdups=True):
                         logging.debug("package %s not available in cache" % 
query['display_name'])
                         return False
 
diff --git a/packaging/fedora/setup/miniyum.py 
b/packaging/fedora/setup/miniyum.py
index 430688a..b86715b 100755
--- a/packaging/fedora/setup/miniyum.py
+++ b/packaging/fedora/setup/miniyum.py
@@ -41,6 +41,13 @@
 class MiniYumSinkBase(object):
     """Sink base."""
 
+    @property
+    def failed(self):
+        return self._failed
+
+    def clearError(self):
+        self._failed = False
+
     def verbose(self, msg):
         """verbose log.
 
@@ -66,7 +73,7 @@
         msg -- message to print
 
         """
-        pass
+        self._failed = True
 
     def keepAlive(self, msg):
         """keepAlive log.
@@ -437,7 +444,18 @@
 
         return ret
 
-    def __init__(self, sink=None, blockStdHandles=True, extraLog=None):
+    @property
+    def sink(self):
+        return self._sink
+
+    def __init__(
+        self,
+        sink=None,
+        blockStdHandles=True,
+        extraLog=None,
+        disabledPlugins=None,
+        enabledPlugins=None,
+    ):
         """Constructor.
 
         Keyword arguments:
@@ -462,7 +480,25 @@
 
             with self._disableOutput:
                 self._yb = self._YumBase(self._sink)
+                if disabledPlugins is not None:
+                    self._yb.preconf.disabled_plugins = disabledPlugins
+                if enabledPlugins is not None:
+                    self._yb.preconf.enabled_plugins = enabledPlugins
 
+                #
+                # DO NOT use async which is the
+                # hardcoded default as we will not
+                # be able to monitor progress
+                #
+                from urlgrabber import grabber
+                if hasattr(grabber, 'parallel_wait'):
+                    for repo in self._yb.repos.listEnabled():
+                        repo._async = False
+
+                #
+                # Set progress bar hook, useless if
+                # async/parallel is enabled.
+                #
                 self._yb.repos.setProgressBar(
                     self._DownloadCallback(self._sink)
                 )
@@ -784,13 +820,14 @@
             self._sink.error(e)
             raise
 
-    def queryPackages(self, pkgnarrow='all', patterns=None):
+    def queryPackages(self, pkgnarrow='all', patterns=None, showdups=None):
         try:
             with self._disableOutput:
                 ret = []
                 holder = self._yb.doPackageLists(
                     pkgnarrow=pkgnarrow,
-                    patterns=patterns
+                    patterns=patterns,
+                    showdups=showdups,
                 )
                 for op, l in (
                     ('available', holder.available),
@@ -819,20 +856,10 @@
             self._sink.error(e)
             raise
 
-    def queryLocalCachePackages(self, patterns=None):
-        try:
-            with self._disableOutput:
-                return [
-                    self._get_package_info(p)
-                    for p in self._yb.pkgSack.returnPackages(patterns=patterns)
-                ]
-
-        except Exception as e:
-            self._sink.error(e)
-            raise
-
     def processTransaction(self):
         """Process built transaction."""
+
+        self._sink.clearError()
 
         try:
             with self._disableOutput:
@@ -848,17 +875,23 @@
             self._sink.error(e)
             raise
 
+        if self._sink.failed:
+            raise RuntimeError(
+                _('One or more elements within Yum transaction failed')
+            )
+
 
 class Example(object):
     """Example of miniyum usage."""
 
-    class MyMiniYumSunk(MiniYumSinkBase):
+    class MyMiniYumSink(MiniYumSinkBase):
         """Events."""
 
         KEEPALIVE_INTERVAL = 60
 
         def __init__(self):
             """dup the stdout as during yum operation so we redirect it."""
+            super(Example.MyMiniYumSink, self).__init__()
             self._stream = os.dup(sys.stdout.fileno())
             self._touch()
 
@@ -869,17 +902,21 @@
             self._last = time.time()
 
         def verbose(self, msg):
+            super(Example.MyMiniYumSink, self).verbose(msg)
             os.write(self._stream, ('VERB: -->%s<--\n' % msg).encode('utf-8'))
 
         def info(self, msg):
+            super(Example.MyMiniYumSink, self).info(msg)
             self._touch()
             os.write(self._stream, ('OK:   -->%s<--\n' % msg).encode('utf-8'))
 
         def error(self, msg):
+            super(Example.MyMiniYumSink, self).error(msg)
             self._touch()
             os.write(self._stream, ('FAIL: -->%s<--\n' % msg).encode('utf-8'))
 
         def keepAlive(self, msg):
+            super(Example.MyMiniYumSink, self).keepAlive(msg)
             if time.time() - self._last >= \
                     self.KEEPALIVE_INTERVAL:
                 self.info(msg)
@@ -896,7 +933,7 @@
     @staticmethod
     def main():
         # BEGIN: PROCESS-INITIALIZATION
-        miniyumsink = Example.MyMiniYumSunk()
+        miniyumsink = Example.MyMiniYumSink()
         MiniYum.setup_log_hook(sink=miniyumsink)
         extraLog = open('/tmp/miniyum.log', 'a')
         miniyum = MiniYum(sink=miniyumsink, extraLog=extraLog)
@@ -943,3 +980,6 @@
     Example.main()
 
 __all__ = ['MiniYum', 'MiniYumSinkBase']
+
+
+# vim: expandtab tabstop=4 shiftwidth=4


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ife4f8b5fe4c683b936c00d233bf18ad7d377f07a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alon Bar-Lev <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to