update_engine: Place enterprise rollback save marker file
- There are now two types of rollback. One that does a full powerwash
and one that save some system state.
- When an enterprise rollback powerwash is scheduled, place a marker
file to tell the shutdown process to save data before rebooting.
- This lets rollback preserve additional data over a powerwash that
can be restored later.
- Change a few places that were using is_rollback to save_rollback_data
to be explicit.
BUG=chromium:955463
TEST=unittests
Change-Id: I9f18319e711e425a6e712dd319e03bcc6ddd0a1b
Reviewed-on: https://chromium-review.googlesource.com/1414030
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Zentaro Kavanagh <zentaro@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
diff --git a/update_manager/android_things_policy.cc b/update_manager/android_things_policy.cc
index 4afcf12..26bd0ba 100644
--- a/update_manager/android_things_policy.cc
+++ b/update_manager/android_things_policy.cc
@@ -54,6 +54,7 @@
result->target_channel.clear();
result->target_version_prefix.clear();
result->rollback_allowed = false;
+ result->rollback_data_save_requested = false;
result->rollback_allowed_milestones = -1;
result->interactive = false;
diff --git a/update_manager/enterprise_device_policy_impl.cc b/update_manager/enterprise_device_policy_impl.cc
index a3430ef..3d77d59 100644
--- a/update_manager/enterprise_device_policy_impl.cc
+++ b/update_manager/enterprise_device_policy_impl.cc
@@ -91,22 +91,27 @@
case RollbackToTargetVersion::kDisabled:
LOG(INFO) << "Policy disables rollbacks.";
result->rollback_allowed = false;
+ result->rollback_data_save_requested = false;
break;
case RollbackToTargetVersion::kRollbackAndPowerwash:
LOG(INFO) << "Policy allows rollbacks with powerwash.";
result->rollback_allowed = true;
+ result->rollback_data_save_requested = false;
break;
case RollbackToTargetVersion::kRollbackAndRestoreIfPossible:
LOG(INFO)
<< "Policy allows rollbacks, also tries to restore if possible.";
- // We don't support restore yet, but policy still allows rollback.
result->rollback_allowed = true;
+ result->rollback_data_save_requested = true;
break;
case RollbackToTargetVersion::kRollbackOnlyIfRestorePossible:
+ // TODO(crbug.com/947621): Remove this policy option until we know
+ // how it could be supported correctly.
LOG(INFO) << "Policy only allows rollbacks if restore is possible.";
// We don't support restore yet, policy doesn't allow rollback in this
// case.
result->rollback_allowed = false;
+ result->rollback_data_save_requested = false;
break;
case RollbackToTargetVersion::kMaxValue:
NOTREACHED();
diff --git a/update_manager/policy.h b/update_manager/policy.h
index 5d65d9a..9e7df10 100644
--- a/update_manager/policy.h
+++ b/update_manager/policy.h
@@ -50,6 +50,8 @@
std::string target_version_prefix;
// Specifies whether rollback images are allowed by device policy.
bool rollback_allowed;
+ // Specifies if rollbacks should attempt to preserve some system state.
+ bool rollback_data_save_requested;
// Specifies the number of Chrome milestones rollback should be allowed,
// starting from the stable version at any time. Value is -1 if unspecified
// (e.g. no device policy is available yet), in this case no version