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
This commit is contained in:
parent
d1e286f12f
commit
50dca4a77b
1 changed files with 19 additions and 9 deletions
|
@ -158,15 +158,25 @@ bool VerifyCheckpointing() {
|
|||
// not checkpointing.
|
||||
auto vold = GetVold();
|
||||
bool checkpointing = false;
|
||||
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;
|
||||
bool show_help = true;
|
||||
|
||||
while (true) {
|
||||
if (!vold->isCheckpointing(&checkpointing).isOk()) {
|
||||
LOG(ERROR) << "Could not determine checkpointing status.";
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue