Add specific error codes to enable better error handling
When an applyPayload() call fails due to update already installed or
already processing, OEMs cannot distinguish between these cases, and are
forced to do string parsing. Report specific errors in these caess so
that OEMs can better handle these errors.
Test: th
Bug: 314046376
Change-Id: I3f98d4e93005154b9047dbb198e609606393f311
diff --git a/aosp/update_attempter_android.cc b/aosp/update_attempter_android.cc
index ea83d9a..0f4b2e4 100644
--- a/aosp/update_attempter_android.cc
+++ b/aosp/update_attempter_android.cc
@@ -242,18 +242,18 @@
const vector<string>& key_value_pair_headers,
Error* error) {
if (status_ == UpdateStatus::UPDATED_NEED_REBOOT) {
- return LogAndSetGenericError(
- error,
- __LINE__,
- __FILE__,
- "An update already applied, waiting for reboot");
+ return LogAndSetError(error,
+ __LINE__,
+ __FILE__,
+ "An update already applied, waiting for reboot",
+ ErrorCode::kUpdateAlreadyInstalled);
}
if (processor_->IsRunning()) {
- return LogAndSetGenericError(
- error,
- __LINE__,
- __FILE__,
- "Already processing an update, cancel it first.");
+ return LogAndSetError(error,
+ __LINE__,
+ __FILE__,
+ "Already processing an update, cancel it first.",
+ ErrorCode::kUpdateProcessing);
}
DCHECK_EQ(status_, UpdateStatus::IDLE);
diff --git a/common/error_code.h b/common/error_code.h
index 7924579..8954f72 100644
--- a/common/error_code.h
+++ b/common/error_code.h
@@ -88,6 +88,8 @@
kPackageExcludedFromUpdate = 62,
kPostInstallMountError = 63,
kOverlayfsenabledError = 64,
+ kUpdateProcessing = 65,
+ kUpdateAlreadyInstalled = 66,
// VERY IMPORTANT! When adding new error codes:
//
diff --git a/common/error_code_utils.cc b/common/error_code_utils.cc
index 12a98bf..421e124 100644
--- a/common/error_code_utils.cc
+++ b/common/error_code_utils.cc
@@ -177,6 +177,10 @@
return "ErrorCode::kPostInstallMountError";
case ErrorCode::kOverlayfsenabledError:
return "ErrorCode::kOverlayfsenabledError";
+ case ErrorCode::kUpdateProcessing:
+ return "ErrorCode::kUpdateProcessing";
+ case ErrorCode::kUpdateAlreadyInstalled:
+ return "ErrorCode::kUpdateAlreadyInstalled";
// Don't add a default case to let the compiler warn about newly added
// error codes which should be added here.
}
diff --git a/metrics_utils.cc b/metrics_utils.cc
index 94a0520..35bbcf4 100644
--- a/metrics_utils.cc
+++ b/metrics_utils.cc
@@ -138,6 +138,8 @@
case ErrorCode::kTestImageFlag:
case ErrorCode::kTestOmahaUrlFlag:
case ErrorCode::kSpecialFlags:
+ case ErrorCode::kUpdateProcessing:
+ case ErrorCode::kUpdateAlreadyInstalled:
break;
}
@@ -245,6 +247,8 @@
case ErrorCode::kNotEnoughSpace:
case ErrorCode::kDeviceCorrupted:
case ErrorCode::kPackageExcludedFromUpdate:
+ case ErrorCode::kUpdateProcessing:
+ case ErrorCode::kUpdateAlreadyInstalled:
break;
// Special flags. These can't happen (we mask them out above) but