Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: update_engine_client.cc

Issue 3034026: AU: Provide a reboot_if_needed D-Bus API. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/update_engine.git
Patch Set: reboot error code doesn't necessarily signal a problem. Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « update_engine.xml ('k') | utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 6
7 #include <gflags/gflags.h> 7 #include <gflags/gflags.h>
8 #include <glib.h> 8 #include <glib.h>
9 9
10 #include "update_engine/marshal.glibmarshal.h" 10 #include "update_engine/marshal.glibmarshal.h"
11 #include "update_engine/dbus_constants.h" 11 #include "update_engine/dbus_constants.h"
12 #include "update_engine/subprocess.h" 12 #include "update_engine/subprocess.h"
13 #include "update_engine/utils.h" 13 #include "update_engine/utils.h"
14 14
15 extern "C" { 15 extern "C" {
16 #include "update_engine/update_engine.dbusclient.h" 16 #include "update_engine/update_engine.dbusclient.h"
17 } 17 }
18 18
19 using chromeos_update_engine::kUpdateEngineServiceName; 19 using chromeos_update_engine::kUpdateEngineServiceName;
20 using chromeos_update_engine::kUpdateEngineServicePath; 20 using chromeos_update_engine::kUpdateEngineServicePath;
21 using chromeos_update_engine::kUpdateEngineServiceInterface; 21 using chromeos_update_engine::kUpdateEngineServiceInterface;
22 using chromeos_update_engine::utils::GetGErrorMessage; 22 using chromeos_update_engine::utils::GetGErrorMessage;
23 using std::string; 23 using std::string;
24 24
25 DEFINE_string(app_version, "", 25 DEFINE_string(app_version, "", "Force the current app version.");
26 "Force the current app version."); 26 DEFINE_bool(check_for_update, false, "Initiate check for updates.");
27 DEFINE_bool(check_for_update, false,
28 "Initiate check for updates.");
29 DEFINE_bool(force_update, false, 27 DEFINE_bool(force_update, false,
30 "Force an update, even over an expensive network."); 28 "Force an update, even over an expensive network.");
31 DEFINE_string(omaha_url, "", 29 DEFINE_string(omaha_url, "", "The URL of the Omaha update server.");
32 "The URL of the Omaha update server."); 30 DEFINE_bool(reboot, false, "Initiate a reboot if needed.");
33 DEFINE_bool(status, false, "Print the status to stdout."); 31 DEFINE_bool(status, false, "Print the status to stdout.");
34 DEFINE_bool(watch_for_updates, false, 32 DEFINE_bool(watch_for_updates, false,
35 "Listen for status updates and print them to the screen."); 33 "Listen for status updates and print them to the screen.");
36 34
37 namespace { 35 namespace {
38 36
39 bool GetProxy(DBusGProxy** out_proxy) { 37 bool GetProxy(DBusGProxy** out_proxy) {
40 DBusGConnection* bus; 38 DBusGConnection* bus;
41 DBusGProxy* proxy; 39 DBusGProxy* proxy;
42 GError* error = NULL; 40 GError* error = NULL;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 gboolean rc = 149 gboolean rc =
152 org_chromium_UpdateEngineInterface_attempt_update(proxy, 150 org_chromium_UpdateEngineInterface_attempt_update(proxy,
153 app_version.c_str(), 151 app_version.c_str(),
154 omaha_url.c_str(), 152 omaha_url.c_str(),
155 &error); 153 &error);
156 CHECK_EQ(rc, TRUE) << "Error checking for update: " 154 CHECK_EQ(rc, TRUE) << "Error checking for update: "
157 << GetGErrorMessage(error); 155 << GetGErrorMessage(error);
158 return true; 156 return true;
159 } 157 }
160 158
159 bool RebootIfNeeded() {
160 DBusGProxy* proxy;
161 GError* error = NULL;
162
163 CHECK(GetProxy(&proxy));
164
165 gboolean rc =
166 org_chromium_UpdateEngineInterface_reboot_if_needed(proxy, &error);
167 // Reboot error code doesn't necessarily mean that a reboot
168 // failed. For example, D-Bus may be shutdown before we receive the
169 // result.
170 LOG_IF(INFO, !rc) << "Reboot error message: " << GetGErrorMessage(error);
171 return true;
172 }
173
161 } // namespace {} 174 } // namespace {}
162 175
163 int main(int argc, char** argv) { 176 int main(int argc, char** argv) {
164 // Boilerplate init commands. 177 // Boilerplate init commands.
165 g_type_init(); 178 g_type_init();
166 g_thread_init(NULL); 179 g_thread_init(NULL);
167 dbus_g_thread_init(); 180 dbus_g_thread_init();
168 chromeos_update_engine::Subprocess::Init(); 181 chromeos_update_engine::Subprocess::Init();
169 google::ParseCommandLineFlags(&argc, &argv, true); 182 google::ParseCommandLineFlags(&argc, &argv, true);
170 183
171 if (FLAGS_status) { 184 if (FLAGS_status) {
172 LOG(INFO) << "Querying Update Engine status..."; 185 LOG(INFO) << "Querying Update Engine status...";
173 if (!GetStatus()) { 186 if (!GetStatus()) {
174 LOG(FATAL) << "GetStatus() failed."; 187 LOG(FATAL) << "GetStatus() failed.";
175 } 188 }
176 return 0; 189 return 0;
177 } 190 }
178 if (FLAGS_force_update || FLAGS_check_for_update || 191 if (FLAGS_force_update || FLAGS_check_for_update ||
179 !FLAGS_app_version.empty() || !FLAGS_omaha_url.empty()) { 192 !FLAGS_app_version.empty() || !FLAGS_omaha_url.empty()) {
193 LOG_IF(WARNING, FLAGS_reboot) << "-reboot flag ignored.";
180 LOG(INFO) << "Initiating update check and install."; 194 LOG(INFO) << "Initiating update check and install.";
181 if (FLAGS_force_update) { 195 if (FLAGS_force_update) {
182 LOG(INFO) << "Will not abort due to being on expensive network."; 196 LOG(INFO) << "Will not abort due to being on expensive network.";
183 } 197 }
184 CHECK(CheckForUpdates(FLAGS_force_update, FLAGS_app_version, 198 CHECK(CheckForUpdates(FLAGS_force_update, FLAGS_app_version,
185 FLAGS_omaha_url)) 199 FLAGS_omaha_url))
186 << "Update check/initiate update failed."; 200 << "Update check/initiate update failed.";
187 return 0; 201 return 0;
188 } 202 }
189 if (FLAGS_watch_for_updates) { 203 if (FLAGS_watch_for_updates) {
204 LOG_IF(WARNING, FLAGS_reboot) << "-reboot flag ignored.";
190 LOG(INFO) << "Watching for status updates."; 205 LOG(INFO) << "Watching for status updates.";
191 WatchForUpdates(); // Should never return. 206 WatchForUpdates(); // Should never return.
192 return 1; 207 return 1;
193 } 208 }
209 if (FLAGS_reboot) {
210 LOG(INFO) << "Requesting a reboot...";
211 CHECK(RebootIfNeeded());
212 return 0;
213 }
194 214
195 LOG(INFO) << "No flags specified. Exiting."; 215 LOG(INFO) << "No flags specified. Exiting.";
196 return 0; 216 return 0;
197 } 217 }
OLDNEW
« no previous file with comments | « update_engine.xml ('k') | utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698