Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8148150 authored by Yifan Hong's avatar Yifan Hong
Browse files

libsnapshot::RemoveAllUpdateState log stack

Bug: 148818798
Test: apply OTA but cancel it in the middle, then
      delete /data/misc/update_engine/prefs/*, then
      reapply it again (to trigger CancelUpdate()).
      Stack is dumped.

Change-Id: I2dfb6b7f15b9d5854d0b81ed8ad260538d21c922
parent 12fe03d4
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -95,6 +95,16 @@ cc_library_static {
    static_libs: [
        "libfs_mgr_binder"
    ],

    shared_libs: [
        // TODO(b/148818798): remove when parent bug is fixed
        "libutilscallstack",
    ],
    cflags: [
        "-g",
        "-O0",
        "-DLIBSNAPSHOT_USE_CALLSTACK",
    ],
}

cc_library_static {
@@ -171,6 +181,9 @@ cc_test {
        "libsparse",
        "libutils",
        "libz",

        // TODO(b/148818798): remove when parent bug is fixed
        "libutilscallstack",
    ],
    static_libs: [
        "libgmock",
@@ -207,6 +220,9 @@ cc_binary {
        "liblp",
        "libprotobuf-cpp-lite",
        "libutils",

        // TODO(b/148818798): remove when parent bug is fixed.
        "libutilscallstack",
    ],
    init_rc: [
        "snapshotctl.rc",
+21 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <sys/unistd.h>

#include <optional>
#include <sstream>
#include <thread>
#include <unordered_set>

@@ -37,6 +38,10 @@
#include <libfiemap/image_manager.h>
#include <liblp/liblp.h>

#ifdef LIBSNAPSHOT_USE_CALLSTACK
#include <utils/CallStack.h>
#endif

#include <android/snapshot/snapshot.pb.h>
#include "device_info.h"
#include "partition_cow_creator.h"
@@ -197,6 +202,22 @@ SnapshotManager::Slot SnapshotManager::GetCurrentSlot() {
}

bool SnapshotManager::RemoveAllUpdateState(LockedFile* lock) {
    LOG(INFO) << "Removing all update state.";

#ifdef LIBSNAPSHOT_USE_CALLSTACK
    LOG(WARNING) << "Logging stack; see b/148818798.";
    // Do not use CallStack's log functions because snapshotctl relies on
    // android-base/logging to save log to files.
    // TODO(b/148818798): remove this before we ship.
    CallStack callstack;
    callstack.update();
    auto callstack_str = callstack.toString();
    LOG(WARNING) << callstack_str.c_str();
    std::stringstream path;
    path << "/data/misc/snapshotctl_log/libsnapshot." << Now() << ".log";
    android::base::WriteStringToFile(callstack_str.c_str(), path.str());
#endif

    if (!RemoveAllSnapshots(lock)) {
        LOG(ERROR) << "Could not remove all snapshots";
        return false;
+2 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@
#include <libsnapshot/snapshot.h>
#include "utility.h"

#include "utility.h"

using namespace std::string_literals;

int Usage() {