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 <[email protected]> Reviewed-by: Alex Deymo <[email protected]> Commit-Queue: Gilad Arnold <[email protected]>
diff --git a/payload_state.cc b/payload_state.cc index 975ba15..3f9aa19 100644 --- a/payload_state.cc +++ b/payload_state.cc
@@ -211,7 +211,7 @@ switch (attempt_type_) { case AttemptType::kUpdate: - CollectAndReportAttemptMetrics(kErrorCodeSuccess); + CollectAndReportAttemptMetrics(ErrorCode::kSuccess); CollectAndReportSuccessfulUpdateMetrics(); ClearPersistedAttemptMetrics(); break; @@ -259,27 +259,27 @@ // the protocol used in the URL or entities in the communication channel // (e.g. proxies). We should try the next available URL in the next update // check to quickly recover from these errors. - case kErrorCodePayloadHashMismatchError: - case kErrorCodePayloadSizeMismatchError: - case kErrorCodeDownloadPayloadVerificationError: - case kErrorCodeDownloadPayloadPubKeyVerificationError: - case kErrorCodeSignedDeltaPayloadExpectedError: - case kErrorCodeDownloadInvalidMetadataMagicString: - case kErrorCodeDownloadSignatureMissingInManifest: - case kErrorCodeDownloadManifestParseError: - case kErrorCodeDownloadMetadataSignatureError: - case kErrorCodeDownloadMetadataSignatureVerificationError: - case kErrorCodeDownloadMetadataSignatureMismatch: - case kErrorCodeDownloadOperationHashVerificationError: - case kErrorCodeDownloadOperationExecutionError: - case kErrorCodeDownloadOperationHashMismatch: - case kErrorCodeDownloadInvalidMetadataSize: - case kErrorCodeDownloadInvalidMetadataSignature: - case kErrorCodeDownloadOperationHashMissingError: - case kErrorCodeDownloadMetadataSignatureMissingError: - case kErrorCodePayloadMismatchedType: - case kErrorCodeUnsupportedMajorPayloadVersion: - case kErrorCodeUnsupportedMinorPayloadVersion: + case ErrorCode::kPayloadHashMismatchError: + case ErrorCode::kPayloadSizeMismatchError: + case ErrorCode::kDownloadPayloadVerificationError: + case ErrorCode::kDownloadPayloadPubKeyVerificationError: + case ErrorCode::kSignedDeltaPayloadExpectedError: + case ErrorCode::kDownloadInvalidMetadataMagicString: + case ErrorCode::kDownloadSignatureMissingInManifest: + case ErrorCode::kDownloadManifestParseError: + case ErrorCode::kDownloadMetadataSignatureError: + case ErrorCode::kDownloadMetadataSignatureVerificationError: + case ErrorCode::kDownloadMetadataSignatureMismatch: + case ErrorCode::kDownloadOperationHashVerificationError: + case ErrorCode::kDownloadOperationExecutionError: + case ErrorCode::kDownloadOperationHashMismatch: + case ErrorCode::kDownloadInvalidMetadataSize: + case ErrorCode::kDownloadInvalidMetadataSignature: + case ErrorCode::kDownloadOperationHashMissingError: + case ErrorCode::kDownloadMetadataSignatureMissingError: + case ErrorCode::kPayloadMismatchedType: + case ErrorCode::kUnsupportedMajorPayloadVersion: + case ErrorCode::kUnsupportedMinorPayloadVersion: IncrementUrlIndex(); break; @@ -291,11 +291,11 @@ // (because download from a local server URL that appears earlier in a // response is preferable than downloading from the next URL which could be // a internet URL and thus could be more expensive). - case kErrorCodeError: - case kErrorCodeDownloadTransferError: - case kErrorCodeDownloadWriteError: - case kErrorCodeDownloadStateInitializationError: - case kErrorCodeOmahaErrorInHTTPResponse: // Aggregate code for HTTP errors. + case ErrorCode::kError: + case ErrorCode::kDownloadTransferError: + case ErrorCode::kDownloadWriteError: + case ErrorCode::kDownloadStateInitializationError: + case ErrorCode::kOmahaErrorInHTTPResponse: // Aggregate for HTTP errors. IncrementFailureCount(); break; @@ -308,36 +308,36 @@ // payload attempt number would have been incremented and would take care // of the backoff at the next update check. // In either case, there's no need to update URL index or failure count. - case kErrorCodeOmahaRequestError: - case kErrorCodeOmahaResponseHandlerError: - case kErrorCodePostinstallRunnerError: - case kErrorCodeFilesystemCopierError: - case kErrorCodeInstallDeviceOpenError: - case kErrorCodeKernelDeviceOpenError: - case kErrorCodeDownloadNewPartitionInfoError: - case kErrorCodeNewRootfsVerificationError: - case kErrorCodeNewKernelVerificationError: - case kErrorCodePostinstallBootedFromFirmwareB: - case kErrorCodePostinstallFirmwareRONotUpdatable: - case kErrorCodeOmahaRequestEmptyResponseError: - case kErrorCodeOmahaRequestXMLParseError: - case kErrorCodeOmahaResponseInvalid: - case kErrorCodeOmahaUpdateIgnoredPerPolicy: - case kErrorCodeOmahaUpdateDeferredPerPolicy: - case kErrorCodeOmahaUpdateDeferredForBackoff: - case kErrorCodePostinstallPowerwashError: - case kErrorCodeUpdateCanceledByChannelChange: + case ErrorCode::kOmahaRequestError: + case ErrorCode::kOmahaResponseHandlerError: + case ErrorCode::kPostinstallRunnerError: + case ErrorCode::kFilesystemCopierError: + case ErrorCode::kInstallDeviceOpenError: + case ErrorCode::kKernelDeviceOpenError: + case ErrorCode::kDownloadNewPartitionInfoError: + case ErrorCode::kNewRootfsVerificationError: + case ErrorCode::kNewKernelVerificationError: + case ErrorCode::kPostinstallBootedFromFirmwareB: + case ErrorCode::kPostinstallFirmwareRONotUpdatable: + case ErrorCode::kOmahaRequestEmptyResponseError: + case ErrorCode::kOmahaRequestXMLParseError: + case ErrorCode::kOmahaResponseInvalid: + case ErrorCode::kOmahaUpdateIgnoredPerPolicy: + case ErrorCode::kOmahaUpdateDeferredPerPolicy: + case ErrorCode::kOmahaUpdateDeferredForBackoff: + case ErrorCode::kPostinstallPowerwashError: + case ErrorCode::kUpdateCanceledByChannelChange: LOG(INFO) << "Not incrementing URL index or failure count for this error"; break; - case kErrorCodeSuccess: // success code - case kErrorCodeUmaReportedMax: // not an error code - case kErrorCodeOmahaRequestHTTPResponseBase: // aggregated already - case kErrorCodeDevModeFlag: // not an error code - case kErrorCodeResumedFlag: // not an error code - case kErrorCodeTestImageFlag: // not an error code - case kErrorCodeTestOmahaUrlFlag: // not an error code - case kErrorCodeSpecialFlags: // not an error code + case ErrorCode::kSuccess: // success code + case ErrorCode::kUmaReportedMax: // not an error code + case ErrorCode::kOmahaRequestHTTPResponseBase: // aggregated already + case ErrorCode::kDevModeFlag: // not an error code + case ErrorCode::kResumedFlag: // not an error code + case ErrorCode::kTestImageFlag: // not an error code + case ErrorCode::kTestOmahaUrlFlag: // not an error code + case ErrorCode::kSpecialFlags: // not an error code // These shouldn't happen. Enumerating these explicitly here so that we // can let the compiler warn about new error codes that are added to // action_processor.h but not added here. @@ -591,7 +591,7 @@ metrics::DownloadErrorCode payload_download_error_code = metrics::DownloadErrorCode::kUnset; - ErrorCode internal_error_code = kErrorCodeSuccess; + ErrorCode internal_error_code = ErrorCode::kSuccess; metrics::AttemptResult attempt_result = utils::GetAttemptResult(code); // Add additional detail to AttemptResult