Snap for 10804332 from 1814bb4b82f3e1915da8b2547fa6cab4aee6d7c1 to udc-qpr1-release

Change-Id: I097bfab0216fa003add9a2db95ff21127f57b552
diff --git a/aosp/hardware_android.cc b/aosp/hardware_android.cc
index 624cfc9..f8732ab 100644
--- a/aosp/hardware_android.cc
+++ b/aosp/hardware_android.cc
@@ -85,7 +85,7 @@
 }
 
 std::string CalculateVbmetaDigestForInactiveSlot() {
-  AvbSlotVerifyData* avb_slot_data;
+  AvbSlotVerifyData* avb_slot_data{};
 
   auto suffix = fs_mgr_get_other_slot_suffix();
   const char* requested_partitions[] = {nullptr};
@@ -105,8 +105,9 @@
   avb_slot_verify_data_calculate_vbmeta_digest(
       avb_slot_data, AVB_DIGEST_TYPE_SHA256, vbmeta_digest);
 
-  std::string encoded_digest =
+  const std::string encoded_digest =
       base::HexEncode(vbmeta_digest, AVB_SHA256_DIGEST_SIZE);
+  LOG(INFO) << "vbmeta digest for target slot: " << encoded_digest;
   return base::ToLowerASCII(encoded_digest);
 }
 
diff --git a/payload_consumer/filesystem_verifier_action.cc b/payload_consumer/filesystem_verifier_action.cc
index dfbe513..abfae72 100644
--- a/payload_consumer/filesystem_verifier_action.cc
+++ b/payload_consumer/filesystem_verifier_action.cc
@@ -136,6 +136,13 @@
   partition_fd_.reset();
   // This memory is not used anymore.
   buffer_.clear();
+  if (code == ErrorCode::kSuccess && !cancelled_) {
+    if (!dynamic_control_->FinishUpdate(install_plan_.powerwash_required)) {
+      LOG(ERROR) << "Failed to FinishUpdate("
+                 << install_plan_.powerwash_required << ")";
+      code = ErrorCode::kFilesystemVerifierError;
+    }
+  }
 
   // If we didn't write verity, partitions were maped. Releaase resource now.
   if (!install_plan_.write_verity &&
diff --git a/payload_consumer/filesystem_verifier_action_unittest.cc b/payload_consumer/filesystem_verifier_action_unittest.cc
index b2ed158..3c3997d 100644
--- a/payload_consumer/filesystem_verifier_action_unittest.cc
+++ b/payload_consumer/filesystem_verifier_action_unittest.cc
@@ -32,6 +32,7 @@
 #include <libsnapshot/snapshot_writer.h>
 #include <sys/stat.h>
 
+#include "gmock/gmock-spec-builders.h"
 #include "update_engine/common/dynamic_partition_control_stub.h"
 #include "update_engine/common/hash_calculator.h"
 #include "update_engine/common/mock_dynamic_partition_control.h"
@@ -556,12 +557,13 @@
     install_plan_.write_verity = true;
     ASSERT_NO_FATAL_FAILURE(SetHashWithVerity(&part));
   }
+  NiceMock<MockDynamicPartitionControl> dynamic_control;
   if (clear_target_hash) {
     part.target_hash.clear();
+  } else {
+    EXPECT_CALL(dynamic_control, FinishUpdate(0)).WillOnce(Return(true));
   }
 
-  NiceMock<MockDynamicPartitionControl> dynamic_control;
-
   EnableVABC(&dynamic_control, part.name);
   auto open_cow = [part]() {
     auto cow_fd = std::make_unique<EintrSafeFileDescriptor>();
@@ -661,6 +663,7 @@
   part.readonly_target_path = target_part_.path();
   NiceMock<MockDynamicPartitionControl> dynamic_control;
   EnableVABC(&dynamic_control, part.name);
+  ON_CALL(dynamic_control, FinishUpdate(_)).WillByDefault(Return(true));
 
   // b/186196758 is only visible if we repeatedely run FS verification w/o
   // writing verity
diff --git a/payload_consumer/postinstall_runner_action.cc b/payload_consumer/postinstall_runner_action.cc
index a6fa4b3..fa4654d 100644
--- a/payload_consumer/postinstall_runner_action.cc
+++ b/payload_consumer/postinstall_runner_action.cc
@@ -109,7 +109,7 @@
   auto dynamic_control = boot_control_->GetDynamicPartitionControl();
   CHECK(dynamic_control);
 
-  // Mount snapshot partitions for Virtual AB Compression Compression.
+  // Mount snapshot partitions for Virtual AB Compression
   if (dynamic_control->UpdateUsesSnapshotCompression()) {
     // Before calling MapAllPartitions to map snapshot devices, all CowWriters
     // must be closed, and MapAllPartitions() should be called.
@@ -434,9 +434,8 @@
   // steps succeeded.
   if (error_code == ErrorCode::kSuccess) {
     if (install_plan_.switch_slot_on_reboot) {
-      if (!boot_control_->GetDynamicPartitionControl()->FinishUpdate(
-              install_plan_.powerwash_required) ||
-          !boot_control_->SetActiveBootSlot(install_plan_.target_slot)) {
+      if (!boot_control_->SetActiveBootSlot(install_plan_.target_slot)) {
+        LOG(ERROR) << "Failed to switch slot to " << install_plan_.target_slot;
         error_code = ErrorCode::kPostinstallRunnerError;
       } else {
         // Schedules warm reset on next reboot, ignores the error.