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
