From e3eb933336605515fe8cc9968a83a37b7df6b257 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 19 Apr 2012 17:02:09 +0200 Subject: [PATCH] client/daemon: Don't make internal server errors fatal for keepalives/updates. Because sometime, the hub could have some hiccups, this is no reason to kill the daemon. It should retry sending the request in a short time. However, we should now about the error and so the last try would raise an exception. --- po/pakfire.pot | 137 ++++++++++++++++------------- python/pakfire/client/base.py | 43 ++++++--- python/pakfire/client/transport.py | 8 ++ python/pakfire/errors.py | 4 + 4 files changed, 117 insertions(+), 75 deletions(-) diff --git a/po/pakfire.pot b/po/pakfire.pot index 10f4e2af1..4fd12e73e 100644 --- a/po/pakfire.pot +++ b/po/pakfire.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-04-14 14:32+0200\n" +"POT-Creation-Date: 2012-04-19 16:57+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -116,7 +116,7 @@ msgstr "" #: ../python/pakfire/base.py:382 ../python/pakfire/base.py:450 #: ../python/pakfire/base.py:487 ../python/pakfire/base.py:546 -#: ../python/pakfire/base.py:567 ../python/pakfire/transaction.py:389 +#: ../python/pakfire/base.py:567 ../python/pakfire/transaction.py:396 msgid "Nothing to do" msgstr "" @@ -416,7 +416,7 @@ msgstr "" msgid "Give name of at least one package to check." msgstr "" -#: ../python/pakfire/cli.py:348 ../python/pakfire/transaction.py:398 +#: ../python/pakfire/cli.py:348 ../python/pakfire/transaction.py:405 msgid "Repository" msgstr "" @@ -740,7 +740,7 @@ msgid "Job: %(name)s" msgstr "" #: ../python/pakfire/cli.py:1078 ../python/pakfire/packages/base.py:107 -#: ../python/pakfire/transaction.py:397 +#: ../python/pakfire/transaction.py:404 msgid "Arch" msgstr "" @@ -777,140 +777,151 @@ msgstr "" msgid "Pakfire daemon command line interface." msgstr "" -#: ../python/pakfire/cli.py:1161 +#: ../python/pakfire/cli.py:1156 msgid "Pakfire key command line interface." msgstr "" -#: ../python/pakfire/cli.py:1205 ../python/pakfire/cli.py:1215 +#: ../python/pakfire/cli.py:1200 ../python/pakfire/cli.py:1210 msgid "Import a key from file." msgstr "" -#: ../python/pakfire/cli.py:1207 +#: ../python/pakfire/cli.py:1202 msgid "The real name of the owner of this key." msgstr "" -#: ../python/pakfire/cli.py:1209 +#: ../python/pakfire/cli.py:1204 msgid "The email address of the owner of this key." msgstr "" -#: ../python/pakfire/cli.py:1217 +#: ../python/pakfire/cli.py:1212 msgid "Filename of that key to import." msgstr "" -#: ../python/pakfire/cli.py:1223 +#: ../python/pakfire/cli.py:1218 msgid "Export a key to a file." msgstr "" -#: ../python/pakfire/cli.py:1225 +#: ../python/pakfire/cli.py:1220 msgid "The ID of the key to export." msgstr "" -#: ../python/pakfire/cli.py:1227 +#: ../python/pakfire/cli.py:1222 msgid "Write the key to this file." msgstr "" -#: ../python/pakfire/cli.py:1233 +#: ../python/pakfire/cli.py:1228 msgid "Delete a key from the local keyring." msgstr "" -#: ../python/pakfire/cli.py:1235 +#: ../python/pakfire/cli.py:1230 msgid "The ID of the key to delete." msgstr "" -#: ../python/pakfire/cli.py:1241 +#: ../python/pakfire/cli.py:1236 msgid "List all imported keys." msgstr "" -#: ../python/pakfire/cli.py:1247 +#: ../python/pakfire/cli.py:1242 msgid "Sign one or more packages." msgstr "" -#: ../python/pakfire/cli.py:1249 +#: ../python/pakfire/cli.py:1244 msgid "Key that is used sign the package(s)." msgstr "" -#: ../python/pakfire/cli.py:1251 +#: ../python/pakfire/cli.py:1246 msgid "Package(s) to sign." msgstr "" -#: ../python/pakfire/cli.py:1257 +#: ../python/pakfire/cli.py:1252 msgid "Verify one or more packages." msgstr "" -#: ../python/pakfire/cli.py:1261 +#: ../python/pakfire/cli.py:1256 msgid "Package(s) to verify." msgstr "" -#: ../python/pakfire/cli.py:1268 +#: ../python/pakfire/cli.py:1263 msgid "Generating the key may take a moment..." msgstr "" -#: ../python/pakfire/cli.py:1316 +#: ../python/pakfire/cli.py:1311 #, python-format msgid "Signing %s..." msgstr "" -#: ../python/pakfire/cli.py:1333 +#: ../python/pakfire/cli.py:1328 #, python-format msgid "Verifying %s..." msgstr "" -#: ../python/pakfire/cli.py:1343 +#: ../python/pakfire/cli.py:1338 msgid "This signature is valid." msgstr "" -#: ../python/pakfire/cli.py:1346 +#: ../python/pakfire/cli.py:1341 msgid "Unknown key" msgstr "" -#: ../python/pakfire/cli.py:1347 +#: ../python/pakfire/cli.py:1342 msgid "Could not check if this signature is valid." msgstr "" -#: ../python/pakfire/cli.py:1350 ../python/pakfire/keyring.py:96 +#: ../python/pakfire/cli.py:1345 ../python/pakfire/keyring.py:96 #, python-format msgid "Created: %s" msgstr "" -#: ../python/pakfire/cli.py:1354 ../python/pakfire/keyring.py:99 +#: ../python/pakfire/cli.py:1349 ../python/pakfire/keyring.py:99 #, python-format msgid "Expires: %s" msgstr "" -#: ../python/pakfire/client/builder.py:173 +#. If the keepalive message could not successfully be sent, we don't +#. bother, because the client will soon retry. +#: ../python/pakfire/client/base.py:213 +msgid "Could not send a keepalive message to the hub." +msgstr "" + +#. Don't give a shit either. +#: ../python/pakfire/client/base.py:247 +msgid "Could not update the host information." +msgstr "" + +#: ../python/pakfire/client/builder.py:179 msgid "Less than 2GB of free space. Cannot request a new job." msgstr "" #. Log all XMLRPC protocol errors. -#: ../python/pakfire/client/transport.py:78 +#: ../python/pakfire/client/transport.py:90 msgid "XMLRPC protocol error:" msgstr "" -#: ../python/pakfire/client/transport.py:79 +#: ../python/pakfire/client/transport.py:91 #, python-format msgid "URL: %s" msgstr "" -#: ../python/pakfire/client/transport.py:80 +#: ../python/pakfire/client/transport.py:92 msgid " HTTP headers:" msgstr "" -#: ../python/pakfire/client/transport.py:83 +#: ../python/pakfire/client/transport.py:95 #, python-format msgid "Error code: %s" msgstr "" -#: ../python/pakfire/client/transport.py:84 +#: ../python/pakfire/client/transport.py:96 #, python-format msgid "Error message: %s" msgstr "" -#: ../python/pakfire/client/transport.py:104 +#: ../python/pakfire/client/transport.py:116 #, python-format msgid "Trying again in %(timeout)s second(s). %(tries)s tries left." msgstr "" -#: ../python/pakfire/client/transport.py:109 +#: ../python/pakfire/client/transport.py:121 msgid "Maximum number of tries was reached. Giving up." msgstr "" @@ -981,7 +992,7 @@ msgstr "" msgid "Running pakfire-build in a pakfire container?" msgstr "" -#: ../python/pakfire/errors.py:94 ../python/pakfire/transaction.py:468 +#: ../python/pakfire/errors.py:94 ../python/pakfire/transaction.py:475 msgid "Transaction test was not successful" msgstr "" @@ -996,10 +1007,14 @@ msgid "" msgstr "" #: ../python/pakfire/errors.py:106 -msgid "Could not find the requested URL." +msgid "A request could not be fulfilled by the server." msgstr "" #: ../python/pakfire/errors.py:110 +msgid "Could not find the requested URL." +msgstr "" + +#: ../python/pakfire/errors.py:114 msgid "An unforseable problem on the XML-RPC transport connection occured." msgstr "" @@ -1070,7 +1085,7 @@ msgstr "" msgid "Name" msgstr "" -#: ../python/pakfire/packages/base.py:110 ../python/pakfire/transaction.py:397 +#: ../python/pakfire/packages/base.py:110 ../python/pakfire/transaction.py:404 msgid "Version" msgstr "" @@ -1078,7 +1093,7 @@ msgstr "" msgid "Release" msgstr "" -#: ../python/pakfire/packages/base.py:115 ../python/pakfire/transaction.py:398 +#: ../python/pakfire/packages/base.py:115 ../python/pakfire/transaction.py:405 msgid "Size" msgstr "" @@ -1356,93 +1371,93 @@ msgid "" "perform transaction." msgstr "" -#: ../python/pakfire/transaction.py:330 +#: ../python/pakfire/transaction.py:327 #, python-format msgid "Not enough space to download %s of packages." msgstr "" -#: ../python/pakfire/transaction.py:333 +#: ../python/pakfire/transaction.py:330 msgid "Downloading packages:" msgstr "" -#: ../python/pakfire/transaction.py:397 +#: ../python/pakfire/transaction.py:404 msgid "Package" msgstr "" -#: ../python/pakfire/transaction.py:402 +#: ../python/pakfire/transaction.py:409 msgid "Installing:" msgstr "" -#: ../python/pakfire/transaction.py:403 +#: ../python/pakfire/transaction.py:410 msgid "Reinstalling:" msgstr "" -#: ../python/pakfire/transaction.py:404 +#: ../python/pakfire/transaction.py:411 msgid "Updating:" msgstr "" -#: ../python/pakfire/transaction.py:405 +#: ../python/pakfire/transaction.py:412 msgid "Downgrading:" msgstr "" -#: ../python/pakfire/transaction.py:406 +#: ../python/pakfire/transaction.py:413 msgid "Removing:" msgstr "" -#: ../python/pakfire/transaction.py:412 +#: ../python/pakfire/transaction.py:419 msgid "Transaction Summary" msgstr "" -#: ../python/pakfire/transaction.py:419 +#: ../python/pakfire/transaction.py:426 msgid "package" msgstr "" -#: ../python/pakfire/transaction.py:425 +#: ../python/pakfire/transaction.py:432 #, python-format msgid "Total download size: %s" msgstr "" -#: ../python/pakfire/transaction.py:429 +#: ../python/pakfire/transaction.py:436 #, python-format msgid "Installed size: %s" msgstr "" -#: ../python/pakfire/transaction.py:432 +#: ../python/pakfire/transaction.py:439 #, python-format msgid "Freed size: %s" msgstr "" -#: ../python/pakfire/transaction.py:443 +#: ../python/pakfire/transaction.py:450 msgid "Is this okay?" msgstr "" -#: ../python/pakfire/transaction.py:449 +#: ../python/pakfire/transaction.py:456 msgid "Running Transaction Test" msgstr "" -#: ../python/pakfire/transaction.py:461 +#: ../python/pakfire/transaction.py:468 msgid "Transaction Test Succeeded" msgstr "" #. Make a nice progressbar. -#: ../python/pakfire/transaction.py:494 +#: ../python/pakfire/transaction.py:501 msgid "Verifying signatures..." msgstr "" -#: ../python/pakfire/transaction.py:526 +#: ../python/pakfire/transaction.py:533 #, python-format msgid "Found %s signature error(s)!" msgstr "" -#: ../python/pakfire/transaction.py:531 +#: ../python/pakfire/transaction.py:538 msgid "Going on because we are running in permissive mode." msgstr "" -#: ../python/pakfire/transaction.py:532 +#: ../python/pakfire/transaction.py:539 msgid "This is dangerous!" msgstr "" -#: ../python/pakfire/transaction.py:553 +#: ../python/pakfire/transaction.py:560 msgid "Running transaction" msgstr "" diff --git a/python/pakfire/client/base.py b/python/pakfire/client/base.py index 632ec8bbd..cd661ca02 100644 --- a/python/pakfire/client/base.py +++ b/python/pakfire/client/base.py @@ -204,7 +204,15 @@ class PakfireBuilderClient(BuildMixin, PakfireClient): # Collect the current loadavg and send it to the hub. loadavg = ", ".join(("%.2f" % round(l, 2) for l in os.getloadavg())) - needs_update = self.conn.send_keepalive(loadavg, overload, free_space) + try: + needs_update = self.conn.send_keepalive(loadavg, overload, free_space) + + except XMLRPCInternalServerError: + # If the keepalive message could not successfully be sent, we don't + # bother, because the client will soon retry. + log.warning(_("Could not send a keepalive message to the hub.")) + + return if force or needs_update: log.debug("The hub is requesting an update.") @@ -215,20 +223,27 @@ class PakfireBuilderClient(BuildMixin, PakfireClient): config = pakfire.config.ConfigDaemon() - self.conn.send_update( - # Supported architectures. - system.supported_arches, + try: + self.conn.send_update( + # Supported architectures. + system.supported_arches, + + # CPU information. + system.cpu_model, + system.cpu_count, + + # Amount of memory in bytes. + system.memory / 1024, - # CPU information. - system.cpu_model, - system.cpu_count, + # Send the currently running version of Pakfire. + PAKFIRE_VERSION, - # Amount of memory in bytes. - system.memory / 1024, + # Send the host key. + config.get("signatures", "host_key", None), + ) - # Send the currently running version of Pakfire. - PAKFIRE_VERSION, + except XMLRPCInternalServerError: + # Don't give a shit either. + log.warning(_("Could not update the host information.")) - # Send the host key. - config.get("signatures", "host_key", None), - ) + return diff --git a/python/pakfire/client/transport.py b/python/pakfire/client/transport.py index 4fb8a8f27..ac7de8d78 100644 --- a/python/pakfire/client/transport.py +++ b/python/pakfire/client/transport.py @@ -72,6 +72,14 @@ class XMLRPCMixin: # Cannot go on. raise XMLRPCNotFoundError(e) + elif e.errcode == 500: + # This could have various reasons, so we can not + # be sure to kill connections here. + # But to visualize the issue, we will raise an + # exception on the last try. + if tries == 1: + raise XMLRPCInternalServerError(e) + elif e.errcode == 503: # Possibly the hub is not running but the SSL proxy # is. Just try again in a short time. diff --git a/python/pakfire/errors.py b/python/pakfire/errors.py index c0f711fc0..3af257d53 100644 --- a/python/pakfire/errors.py +++ b/python/pakfire/errors.py @@ -102,6 +102,10 @@ class XMLRPCForbiddenError(XMLRPCError): message = _("You are forbidden to perform this action. Maybe you need to check your credentials.") +class XMLRPCInternalServerError(XMLRPCError): + message = _("A request could not be fulfilled by the server.") + + class XMLRPCNotFoundError(XMLRPCError): message = _("Could not find the requested URL.") -- 2.39.5