Support a range of major and minor version.
In DeltaPerformer we set a supported major and minor version and only
accept that perticular version, but in reality we still support older
versions to test backward comatibility.
This CL change the supported major and minor version to a range to
reflect the truth of which version is supported and moved them to
payload_constants.
This is also useful when we have multi payload and want to reuse old
payload for non system partition while updating the system partition
to use a higher minor version.
Bug: 36289531
Test: update_engine_unittests
Change-Id: I49d73d69e64d78dfc2db21446faa98b3579ff995
Merged-In: I49d73d69e64d78dfc2db21446faa98b3579ff995
diff --git a/payload_consumer/delta_performer.cc b/payload_consumer/delta_performer.cc
index 042861f..81a38e9 100644
--- a/payload_consumer/delta_performer.cc
+++ b/payload_consumer/delta_performer.cc
@@ -66,10 +66,6 @@
using std::vector;
namespace chromeos_update_engine {
-
-const uint64_t DeltaPerformer::kSupportedMajorPayloadVersion = 2;
-const uint32_t DeltaPerformer::kSupportedMinorPayloadVersion = 5;
-
const unsigned DeltaPerformer::kProgressLogMaxChunks = 10;
const unsigned DeltaPerformer::kProgressLogTimeoutSeconds = 30;
const unsigned DeltaPerformer::kProgressDownloadWeight = 50;
@@ -468,11 +464,10 @@
uint32_t DeltaPerformer::GetMinorVersion() const {
if (manifest_.has_minor_version()) {
return manifest_.minor_version();
- } else {
- return payload_->type == InstallPayloadType::kDelta
- ? kSupportedMinorPayloadVersion
- : kFullPayloadMinorVersion;
}
+ return payload_->type == InstallPayloadType::kDelta
+ ? kMaxSupportedMinorPayloadVersion
+ : kFullPayloadMinorVersion;
}
bool DeltaPerformer::IsHeaderParsed() const {
@@ -484,8 +479,8 @@
*error = ErrorCode::kSuccess;
if (!IsHeaderParsed()) {
- MetadataParseResult result = payload_metadata_.ParsePayloadHeader(
- payload, supported_major_version_, error);
+ MetadataParseResult result =
+ payload_metadata_.ParsePayloadHeader(payload, error);
if (result != MetadataParseResult::kSuccess)
return result;
@@ -1527,11 +1522,13 @@
return ErrorCode::kUnsupportedMinorPayloadVersion;
}
} else {
- if (manifest_.minor_version() != supported_minor_version_) {
+ if (manifest_.minor_version() < kMinSupportedMinorPayloadVersion ||
+ manifest_.minor_version() > kMaxSupportedMinorPayloadVersion) {
LOG(ERROR) << "Manifest contains minor version "
<< manifest_.minor_version()
- << " not the supported "
- << supported_minor_version_;
+ << " not in the range of supported minor versions ["
+ << kMinSupportedMinorPayloadVersion << ", "
+ << kMaxSupportedMinorPayloadVersion << "].";
return ErrorCode::kUnsupportedMinorPayloadVersion;
}
}