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

Commit 50dca4a7 authored by Yi-Yo Chiang's avatar Yi-Yo Chiang
Browse files

remount: If checkpoint is in progress, wait for it to complete

Instead of having the user to retry the `remount` command until success
(manual poll). Just block the remount command until checkpoint is
complete, and then continue.

Bug: 252989722
Test: adb remount on a cold device, remount command would block for a
  few dozens of seconds and then continue.
Test: adb remount on a warm device, remount command would process
  immediately. Do not show "force end checkpointing" instructions.
Change-Id: I65f3a5ade4c9538a55892345c75b45ac3a1755fd
parent d1e286f1
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -158,15 +158,25 @@ bool VerifyCheckpointing() {
    // not checkpointing.
    auto vold = GetVold();
    bool checkpointing = false;
    bool show_help = true;

    while (true) {
        if (!vold->isCheckpointing(&checkpointing).isOk()) {
            LOG(ERROR) << "Could not determine checkpointing status.";
            return false;
        }
    if (checkpointing) {
        LOG(ERROR) << "Cannot use remount when a checkpoint is in progress.";
        LOG(ERROR) << "To force end checkpointing, call 'vdc checkpoint commitChanges'";
        LOG(ERROR) << "Warning: this can lead to data corruption if rolled back.";
        return false;
        if (!checkpointing) {
            break;
        }
        if (show_help) {
            show_help = false;
            std::cerr << "WARNING: Userdata checkpoint is in progress. To force end checkpointing, "
                         "call 'vdc checkpoint commitChanges'. This can lead to data corruption if "
                         "rolled back."
                      << std::endl;
            LOG(INFO) << "Waiting for checkpoint to complete and then continue remount.";
        }
        std::this_thread::sleep_for(4s);
    }
    return true;
}