Apply multiple payload in DownloadAction.
DownloadAction will now call DeltaPerformer once for each payload.
Bug: 36252799
Test: update two payload works!
Test: update_engine_unittest
Change-Id: Ibd4f3a4af9f701852f2c70b9384ca9d1fedacbeb
(cherry picked from commit 7bd9f0b95403664229b701a13dca03c31a46fb49)
diff --git a/payload_consumer/download_action.cc b/payload_consumer/download_action.cc
index a8c987e..451c49e 100644
--- a/payload_consumer/download_action.cc
+++ b/payload_consumer/download_action.cc
@@ -185,15 +185,18 @@
<< ". Proceeding with the update anyway.";
}
- if (writer_) {
+ download_active_ = true;
+ StartDownloading();
+}
+
+void DownloadAction::StartDownloading() {
+ if (writer_ && writer_ != delta_performer_.get()) {
LOG(INFO) << "Using writer for test.";
} else {
delta_performer_.reset(new DeltaPerformer(
prefs_, boot_control_, hardware_, delegate_, &install_plan_, payload_));
writer_ = delta_performer_.get();
}
- download_active_ = true;
-
if (system_state_ != nullptr) {
const PayloadStateInterface* payload_state = system_state_->payload_state();
string file_id = utils::CalculateP2PFileId(payload_->hash, payload_->size);
@@ -310,6 +313,15 @@
// Delete p2p file, if applicable.
if (!p2p_file_id_.empty())
CloseP2PSharingFd(true);
+ } else if (payload_ < &install_plan_.payloads.back() &&
+ system_state_->payload_state()->NextPayload()) {
+ // Start downloading next payload.
+ payload_++;
+ DeltaPerformer::ResetUpdateProgress(prefs_, false);
+ install_plan_.download_url =
+ system_state_->payload_state()->GetCurrentUrl();
+ StartDownloading();
+ return;
}
}