client: GetProxy: add retries
Because in some cases, esp on very loaded systems, the updater may be
temporarily unresponsive, add retry logic when trying to connect over
dbus.
BUG=chromium-os:18717
TEST=tested on device
Change-Id: I277e843ae1ded174a7768c63093e095c29143dcb
Reviewed-on: http://gerrit.chromium.org/gerrit/5614
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Andrew de los Reyes <adlr@chromium.org>
diff --git a/update_engine_client.cc b/update_engine_client.cc
index c0b61fe..1514561 100644
--- a/update_engine_client.cc
+++ b/update_engine_client.cc
@@ -38,18 +38,22 @@
bool GetProxy(DBusGProxy** out_proxy) {
DBusGConnection* bus;
- DBusGProxy* proxy;
+ DBusGProxy* proxy = NULL;
GError* error = NULL;
+ const int kTries = 4;
bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
if (!bus) {
LOG(FATAL) << "Failed to get bus";
}
- proxy = dbus_g_proxy_new_for_name_owner(bus,
- kUpdateEngineServiceName,
- kUpdateEngineServicePath,
- kUpdateEngineServiceInterface,
- &error);
+ for (int i = 0; !proxy && i < kTries; ++i) {
+ LOG(INFO) << "Trying to get dbus proxy. Try " << (i + 1) << "/" << kTries;
+ proxy = dbus_g_proxy_new_for_name_owner(bus,
+ kUpdateEngineServiceName,
+ kUpdateEngineServicePath,
+ kUpdateEngineServiceInterface,
+ &error);
+ }
if (!proxy) {
LOG(FATAL) << "Error getting dbus proxy for "
<< kUpdateEngineServiceName << ": " << GetGErrorMessage(error);