diff options
author | Gilad Arnold <garnold@chromium.org> | 2014-06-05 14:07:53 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-06-13 05:34:28 +0000 |
commit | d1c4d2dd3daed1d507038046c0355fbafb85260c (patch) | |
tree | c25e3f382d17439215294aacfaa7b18e5b8e2d9b /error_code.h | |
parent | 0a364bb65efa5c5cdcd49114080a646a39e030fc (diff) |
Change ErrorCode into an enum class.
This change is needed in order for us to be able to import ErrorCode
symbols from chromeos_update_engine into chromeos_update_manager.
Unfortunately, shifting from plain 'enum' into an 'enum class' means
that the compiler treats the new class as a distinct type from int,
which in turn means that plenty of seamless arithmetic/bitwise
operations we used for manipulating error code values throughout the
code needed to be retrofitted with static_cast operators.
In the future, we should consider imposing a proper abstraction on
update engine error codes that'll prevent mingling with value encoding
directly and prevent such nastiness. It'll also make things more
coherent (types, semantics) and safer.
BUG=chromium:358329
TEST=Unit tests.
Change-Id: Ie55fa566b764cdab6c4785d995fb6daee4cb32d3
Reviewed-on: https://chromium-review.googlesource.com/203209
Tested-by: Gilad Arnold <garnold@chromium.org>
Reviewed-by: Alex Deymo <deymo@chromium.org>
Commit-Queue: Gilad Arnold <garnold@chromium.org>
Diffstat (limited to 'error_code.h')
-rw-r--r-- | error_code.h | 129 |
1 files changed, 69 insertions, 60 deletions
diff --git a/error_code.h b/error_code.h index fc66ac9e..5f3a2cb2 100644 --- a/error_code.h +++ b/error_code.h @@ -5,56 +5,58 @@ #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_ERROR_CODE_H_ #define CHROMEOS_PLATFORM_UPDATE_ENGINE_ERROR_CODE_H_ +#include <ostream> + namespace chromeos_update_engine { // Action exit codes. -enum ErrorCode { - kErrorCodeSuccess = 0, - kErrorCodeError = 1, - kErrorCodeOmahaRequestError = 2, - kErrorCodeOmahaResponseHandlerError = 3, - kErrorCodeFilesystemCopierError = 4, - kErrorCodePostinstallRunnerError = 5, - kErrorCodePayloadMismatchedType = 6, - kErrorCodeInstallDeviceOpenError = 7, - kErrorCodeKernelDeviceOpenError = 8, - kErrorCodeDownloadTransferError = 9, - kErrorCodePayloadHashMismatchError = 10, - kErrorCodePayloadSizeMismatchError = 11, - kErrorCodeDownloadPayloadVerificationError = 12, - kErrorCodeDownloadNewPartitionInfoError = 13, - kErrorCodeDownloadWriteError = 14, - kErrorCodeNewRootfsVerificationError = 15, - kErrorCodeNewKernelVerificationError = 16, - kErrorCodeSignedDeltaPayloadExpectedError = 17, - kErrorCodeDownloadPayloadPubKeyVerificationError = 18, - kErrorCodePostinstallBootedFromFirmwareB = 19, - kErrorCodeDownloadStateInitializationError = 20, - kErrorCodeDownloadInvalidMetadataMagicString = 21, - kErrorCodeDownloadSignatureMissingInManifest = 22, - kErrorCodeDownloadManifestParseError = 23, - kErrorCodeDownloadMetadataSignatureError = 24, - kErrorCodeDownloadMetadataSignatureVerificationError = 25, - kErrorCodeDownloadMetadataSignatureMismatch = 26, - kErrorCodeDownloadOperationHashVerificationError = 27, - kErrorCodeDownloadOperationExecutionError = 28, - kErrorCodeDownloadOperationHashMismatch = 29, - kErrorCodeOmahaRequestEmptyResponseError = 30, - kErrorCodeOmahaRequestXMLParseError = 31, - kErrorCodeDownloadInvalidMetadataSize = 32, - kErrorCodeDownloadInvalidMetadataSignature = 33, - kErrorCodeOmahaResponseInvalid = 34, - kErrorCodeOmahaUpdateIgnoredPerPolicy = 35, - kErrorCodeOmahaUpdateDeferredPerPolicy = 36, - kErrorCodeOmahaErrorInHTTPResponse = 37, - kErrorCodeDownloadOperationHashMissingError = 38, - kErrorCodeDownloadMetadataSignatureMissingError = 39, - kErrorCodeOmahaUpdateDeferredForBackoff = 40, - kErrorCodePostinstallPowerwashError = 41, - kErrorCodeUpdateCanceledByChannelChange = 42, - kErrorCodePostinstallFirmwareRONotUpdatable = 43, - kErrorCodeUnsupportedMajorPayloadVersion = 44, - kErrorCodeUnsupportedMinorPayloadVersion = 45, +enum class ErrorCode : int { + kSuccess = 0, + kError = 1, + kOmahaRequestError = 2, + kOmahaResponseHandlerError = 3, + kFilesystemCopierError = 4, + kPostinstallRunnerError = 5, + kPayloadMismatchedType = 6, + kInstallDeviceOpenError = 7, + kKernelDeviceOpenError = 8, + kDownloadTransferError = 9, + kPayloadHashMismatchError = 10, + kPayloadSizeMismatchError = 11, + kDownloadPayloadVerificationError = 12, + kDownloadNewPartitionInfoError = 13, + kDownloadWriteError = 14, + kNewRootfsVerificationError = 15, + kNewKernelVerificationError = 16, + kSignedDeltaPayloadExpectedError = 17, + kDownloadPayloadPubKeyVerificationError = 18, + kPostinstallBootedFromFirmwareB = 19, + kDownloadStateInitializationError = 20, + kDownloadInvalidMetadataMagicString = 21, + kDownloadSignatureMissingInManifest = 22, + kDownloadManifestParseError = 23, + kDownloadMetadataSignatureError = 24, + kDownloadMetadataSignatureVerificationError = 25, + kDownloadMetadataSignatureMismatch = 26, + kDownloadOperationHashVerificationError = 27, + kDownloadOperationExecutionError = 28, + kDownloadOperationHashMismatch = 29, + kOmahaRequestEmptyResponseError = 30, + kOmahaRequestXMLParseError = 31, + kDownloadInvalidMetadataSize = 32, + kDownloadInvalidMetadataSignature = 33, + kOmahaResponseInvalid = 34, + kOmahaUpdateIgnoredPerPolicy = 35, + kOmahaUpdateDeferredPerPolicy = 36, + kOmahaErrorInHTTPResponse = 37, + kDownloadOperationHashMissingError = 38, + kDownloadMetadataSignatureMissingError = 39, + kOmahaUpdateDeferredForBackoff = 40, + kPostinstallPowerwashError = 41, + kUpdateCanceledByChannelChange = 42, + kPostinstallFirmwareRONotUpdatable = 43, + kUnsupportedMajorPayloadVersion = 44, + kUnsupportedMinorPayloadVersion = 45, // VERY IMPORTANT! When adding new error codes: // @@ -64,10 +66,10 @@ enum ErrorCode { // build until this case is added. // Any code above this is sent to both Omaha and UMA as-is, except - // kErrorCodeOmahaErrorInHTTPResponse (see error code 2000 for more details). + // kOmahaErrorInHTTPResponse (see error code 2000 for more details). // Codes/flags below this line is sent only to Omaha and not to UMA. - // kErrorCodeUmaReportedMax is not an error code per se, it's just the count + // kUmaReportedMax is not an error code per se, it's just the count // of the number of enums above. Add any new errors above this line if you // want them to show up on UMA. Stuff below this line will not be sent to UMA // but is used for other errors that are sent to Omaha. We don't assign any @@ -75,38 +77,45 @@ enum ErrorCode { // one above and thus always represents the correct count of UMA metrics // buckets, even when new enums are added above this line in future. See // utils::SendErrorCodeToUma on how this enum is used. - kErrorCodeUmaReportedMax, + kUmaReportedMax, // use the 2xxx range to encode HTTP errors. These errors are available in // Dremel with the individual granularity. But for UMA purposes, all these - // errors are aggregated into one: kErrorCodeOmahaErrorInHTTPResponse. - kErrorCodeOmahaRequestHTTPResponseBase = 2000, // + HTTP response code + // errors are aggregated into one: kOmahaErrorInHTTPResponse. + kOmahaRequestHTTPResponseBase = 2000, // + HTTP response code // TODO(jaysri): Move out all the bit masks into separate constants // outside the enum as part of fixing bug 34369. // Bit flags. Remember to update the mask below for new bits. // Set if boot mode not normal. - kErrorCodeDevModeFlag = 1 << 31, + // TODO(garnold) This is very debatable value to use, knowing that the + // underlying type is a signed int (often, 32-bit). However, at this point + // there are parts of the ecosystem that expect this to be a negative value, + // so we preserve this semantics. This should be reconsidered if/when we + // modify the implementation of ErrorCode into a properly encapsulated class. + kDevModeFlag = 1 << 31, // Set if resuming an interruped update. - kErrorCodeResumedFlag = 1 << 30, + kResumedFlag = 1 << 30, // Set if using a dev/test image as opposed to an MP-signed image. - kErrorCodeTestImageFlag = 1 << 29, + kTestImageFlag = 1 << 29, // Set if using devserver or Omaha sandbox (using crosh autest). - kErrorCodeTestOmahaUrlFlag = 1 << 28, + kTestOmahaUrlFlag = 1 << 28, // Mask that indicates bit positions that are used to indicate special flags // that are embedded in the error code to provide additional context about // the system in which the error was encountered. - kErrorCodeSpecialFlags = (kErrorCodeDevModeFlag | - kErrorCodeResumedFlag | - kErrorCodeTestImageFlag | - kErrorCodeTestOmahaUrlFlag) + kSpecialFlags = (kDevModeFlag | kResumedFlag | kTestImageFlag | + kTestOmahaUrlFlag) }; +inline std::ostream& operator<<(std::ostream& os, ErrorCode val) { + return os << static_cast<int>(val); +} + } // namespace chromeos_update_engine #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_ERROR_CODE_H_ |