AU: Split applied update verification into a separate step.
Use instances of FilesystemCopierAction to do applied update verification. This
speeds it up slightly because asynchronous reads happen in parallel with hash
calculation but, more importantly, makes update_engine be responsive to D-Bus
during that step.
BUG=9140
TEST=unit tests, tested on device
Change-Id: I3ec9445de5e8258a63433a61f1a476aef4434f6c
Review URL: http://codereview.chromium.org/5516009
diff --git a/update_attempter.cc b/update_attempter.cc
index 529338a..85500e6 100644
--- a/update_attempter.cc
+++ b/update_attempter.cc
@@ -139,7 +139,7 @@
LOG(ERROR) << "Unable to initialize Omaha request device params.";
return;
}
-
+
obeying_proxies_ = true;
if (obey_proxies || proxy_manual_checks_ == 0) {
LOG(INFO) << "forced to obey proxies";
@@ -175,9 +175,9 @@
shared_ptr<OmahaResponseHandlerAction> response_handler_action(
new OmahaResponseHandlerAction(prefs_));
shared_ptr<FilesystemCopierAction> filesystem_copier_action(
- new FilesystemCopierAction(false));
+ new FilesystemCopierAction(false, false));
shared_ptr<FilesystemCopierAction> kernel_filesystem_copier_action(
- new FilesystemCopierAction(true));
+ new FilesystemCopierAction(true, false));
shared_ptr<OmahaRequestAction> download_started_action(
new OmahaRequestAction(prefs_,
omaha_request_params_,
@@ -193,6 +193,10 @@
new OmahaEvent(
OmahaEvent::kTypeUpdateDownloadFinished),
new LibcurlHttpFetcher(GetProxyResolver())));
+ shared_ptr<FilesystemCopierAction> filesystem_verifier_action(
+ new FilesystemCopierAction(false, true));
+ shared_ptr<FilesystemCopierAction> kernel_filesystem_verifier_action(
+ new FilesystemCopierAction(true, true));
shared_ptr<PostinstallRunnerAction> postinstall_runner_action(
new PostinstallRunnerAction);
shared_ptr<OmahaRequestAction> update_complete_action(
@@ -213,6 +217,9 @@
actions_.push_back(shared_ptr<AbstractAction>(download_started_action));
actions_.push_back(shared_ptr<AbstractAction>(download_action));
actions_.push_back(shared_ptr<AbstractAction>(download_finished_action));
+ actions_.push_back(shared_ptr<AbstractAction>(filesystem_verifier_action));
+ actions_.push_back(shared_ptr<AbstractAction>(
+ kernel_filesystem_verifier_action));
actions_.push_back(shared_ptr<AbstractAction>(postinstall_runner_action));
actions_.push_back(shared_ptr<AbstractAction>(update_complete_action));
@@ -233,6 +240,10 @@
BondActions(kernel_filesystem_copier_action.get(),
download_action.get());
BondActions(download_action.get(),
+ filesystem_verifier_action.get());
+ BondActions(filesystem_verifier_action.get(),
+ kernel_filesystem_verifier_action.get());
+ BondActions(kernel_filesystem_verifier_action.get(),
postinstall_runner_action.get());
SetStatusAndNotify(UPDATE_STATUS_CHECKING_FOR_UPDATE);