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

Side by Side Diff: update_attempter.cc

Issue 3131022: AU: Update status to DOWNLOADING only after receiving some bytes from server. (Closed) Base URL: http://src.chromium.org/git/update_engine.git
Patch Set: review feedback Created 10 years, 4 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
« no previous file with comments | « update_attempter.h ('k') | update_engine_client.cc » ('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 "update_engine/update_attempter.h" 5 #include "update_engine/update_attempter.h"
6 6
7 // From 'man clock_gettime': feature test macro: _POSIX_C_SOURCE >= 199309L 7 // From 'man clock_gettime': feature test macro: _POSIX_C_SOURCE >= 199309L
8 #ifndef _POSIX_C_SOURCE 8 #ifndef _POSIX_C_SOURCE
9 #define _POSIX_C_SOURCE 199309L 9 #define _POSIX_C_SOURCE 199309L
10 #endif // _POSIX_C_SOURCE 10 #endif // _POSIX_C_SOURCE
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 return code; 114 return code;
115 } 115 }
116 116
117 UpdateAttempter::UpdateAttempter(PrefsInterface* prefs, 117 UpdateAttempter::UpdateAttempter(PrefsInterface* prefs,
118 MetricsLibraryInterface* metrics_lib) 118 MetricsLibraryInterface* metrics_lib)
119 : dbus_service_(NULL), 119 : dbus_service_(NULL),
120 prefs_(prefs), 120 prefs_(prefs),
121 metrics_lib_(metrics_lib), 121 metrics_lib_(metrics_lib),
122 priority_(utils::kProcessPriorityNormal), 122 priority_(utils::kProcessPriorityNormal),
123 manage_priority_source_(NULL), 123 manage_priority_source_(NULL),
124 download_active_(false),
124 status_(UPDATE_STATUS_IDLE), 125 status_(UPDATE_STATUS_IDLE),
125 download_progress_(0.0), 126 download_progress_(0.0),
126 last_checked_time_(0), 127 last_checked_time_(0),
127 new_version_("0.0.0.0"), 128 new_version_("0.0.0.0"),
128 new_size_(0) { 129 new_size_(0) {
129 last_notify_time_.tv_sec = 0; 130 last_notify_time_.tv_sec = 0;
130 last_notify_time_.tv_nsec = 0; 131 last_notify_time_.tv_nsec = 0;
131 if (utils::FileExists(kUpdateCompletedMarker)) 132 if (utils::FileExists(kUpdateCompletedMarker))
132 status_ = UPDATE_STATUS_UPDATED_NEED_REBOOT; 133 status_ = UPDATE_STATUS_UPDATED_NEED_REBOOT;
133 } 134 }
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 const string type = action->Type(); 313 const string type = action->Type();
313 if (type == DownloadAction::StaticType()) 314 if (type == DownloadAction::StaticType())
314 download_progress_ = 0.0; 315 download_progress_ = 0.0;
315 if (code != kActionCodeSuccess) { 316 if (code != kActionCodeSuccess) {
316 // On failure, schedule an error event to be sent to Omaha. 317 // On failure, schedule an error event to be sent to Omaha.
317 CreatePendingErrorEvent(action, code); 318 CreatePendingErrorEvent(action, code);
318 return; 319 return;
319 } 320 }
320 // Find out which action completed. 321 // Find out which action completed.
321 if (type == OmahaResponseHandlerAction::StaticType()) { 322 if (type == OmahaResponseHandlerAction::StaticType()) {
322 SetStatusAndNotify(UPDATE_STATUS_DOWNLOADING); 323 // Note that the status will be updated to DOWNLOADING when some
324 // bytes get actually downloaded from the server and the
325 // BytesReceived callback is invoked. This avoids notifying the
326 // user that a download has started in cases when the server and
327 // the client are unable to initiate the download.
323 OmahaResponseHandlerAction* omaha_response_handler_action = 328 OmahaResponseHandlerAction* omaha_response_handler_action =
324 dynamic_cast<OmahaResponseHandlerAction*>(action); 329 dynamic_cast<OmahaResponseHandlerAction*>(action);
325 CHECK(omaha_response_handler_action); 330 CHECK(omaha_response_handler_action);
326 const InstallPlan& plan = omaha_response_handler_action->install_plan(); 331 const InstallPlan& plan = omaha_response_handler_action->install_plan();
327 last_checked_time_ = time(NULL); 332 last_checked_time_ = time(NULL);
328 // TODO(adlr): put version in InstallPlan 333 // TODO(adlr): put version in InstallPlan
329 new_version_ = "0.0.0.0"; 334 new_version_ = "0.0.0.0";
330 new_size_ = plan.size; 335 new_size_ = plan.size;
331 SetupPriorityManagement(); 336 SetupPriorityManagement();
332 } else if (type == DownloadAction::StaticType()) { 337 } else if (type == DownloadAction::StaticType()) {
333 SetStatusAndNotify(UPDATE_STATUS_FINALIZING); 338 SetStatusAndNotify(UPDATE_STATUS_FINALIZING);
334 } 339 }
335 } 340 }
336 341
337 // Stop updating. An attempt will be made to record status to the disk 342 // Stop updating. An attempt will be made to record status to the disk
338 // so that updates can be resumed later. 343 // so that updates can be resumed later.
339 void UpdateAttempter::Terminate() { 344 void UpdateAttempter::Terminate() {
340 // TODO(adlr): implement this method. 345 // TODO(adlr): implement this method.
341 NOTIMPLEMENTED(); 346 NOTIMPLEMENTED();
342 } 347 }
343 348
344 // Try to resume from a previously Terminate()d update. 349 // Try to resume from a previously Terminate()d update.
345 void UpdateAttempter::ResumeUpdating() { 350 void UpdateAttempter::ResumeUpdating() {
346 // TODO(adlr): implement this method. 351 // TODO(adlr): implement this method.
347 NOTIMPLEMENTED(); 352 NOTIMPLEMENTED();
348 } 353 }
349 354
355 void UpdateAttempter::SetDownloadStatus(bool active) {
356 download_active_ = active;
357 LOG(INFO) << "Download status: " << (active ? "active" : "inactive");
358 }
359
350 void UpdateAttempter::BytesReceived(uint64_t bytes_received, uint64_t total) { 360 void UpdateAttempter::BytesReceived(uint64_t bytes_received, uint64_t total) {
351 if (status_ != UPDATE_STATUS_DOWNLOADING) { 361 if (!download_active_) {
352 LOG(ERROR) << "BytesReceived called while not downloading."; 362 LOG(ERROR) << "BytesReceived called while not downloading.";
353 return; 363 return;
354 } 364 }
355 download_progress_ = static_cast<double>(bytes_received) / 365 download_progress_ = static_cast<double>(bytes_received) /
356 static_cast<double>(total); 366 static_cast<double>(total);
357 // We self throttle here 367 // We self throttle here
358 timespec now; 368 timespec now;
359 now.tv_sec = 0; 369 now.tv_sec = 0;
360 now.tv_nsec = 0; 370 now.tv_nsec = 0;
361 if (GetCPUClockTime(&now) && 371 if (GetCPUClockTime(&now) &&
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 SetPriority(utils::kProcessPriorityNormal); 486 SetPriority(utils::kProcessPriorityNormal);
477 return true; 487 return true;
478 } 488 }
479 // Set the priority to high and let GLib destroy the timeout source. 489 // Set the priority to high and let GLib destroy the timeout source.
480 SetPriority(utils::kProcessPriorityHigh); 490 SetPriority(utils::kProcessPriorityHigh);
481 manage_priority_source_ = NULL; 491 manage_priority_source_ = NULL;
482 return false; 492 return false;
483 } 493 }
484 494
485 } // namespace chromeos_update_engine 495 } // namespace chromeos_update_engine
OLDNEW
« no previous file with comments | « update_attempter.h ('k') | update_engine_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698