]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
client/daemon: Don't make internal server errors fatal for keepalives/updates.
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 19 Apr 2012 15:02:09 +0000 (17:02 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 19 Apr 2012 15:02:09 +0000 (17:02 +0200)
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
python/pakfire/client/base.py
python/pakfire/client/transport.py
python/pakfire/errors.py

index 10f4e2af1e9dc5a1b7fe34ebbb5e9aa54c890cf2..4fd12e73ec846eb640317bd4f9d85080a292c65f 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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 ""
 
index 632ec8bbd172c68a57ba480c0d3e7f484536d34a..cd661ca0210ea5feb8656da94dba8cc889998e3a 100644 (file)
@@ -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
index 4fb8a8f2771c7c9bde7516a9f0ae0579dc29c3e5..ac7de8d78f9024fbbd2b62f40504c8811230bae2 100644 (file)
@@ -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.
index c0f711fc088371928913b3eb934d22f14b29a5f2..3af257d531be3513ddd1d067f40c8d8890a280fb 100644 (file)
@@ -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.")