6c73668ddcd3dd905c976808bfa13609eeef00b9 |
|
11-Mar-2017 |
Sen Jiang <senj@google.com> |
Apply multiple payload in DownloadAction. DownloadAction will now call DeltaPerformer once for each payload. Bug: 36252799 Test: update two payload works! Test: update_engine_unittest Change-Id: Ibd4f3a4af9f701852f2c70b9384ca9d1fedacbeb (cherry picked from commit 7bd9f0b95403664229b701a13dca03c31a46fb49)
/system/update_engine/payload_state_interface.h
|
2997173235e88c5e4cb13d2844f74afc7b25d6e2 |
|
05-Feb-2016 |
Shuqian Zhao <shuqianz@google.com> |
Add a feature to get the last UpdateAttempt ErrorCode from update_engine For autotest, update_engine test failures are always hard to debug, since the error message is not clear. Add a new flag 'last_attempt_error' to get the last UpdateAttempt ErrorCode from update_engine. Bug:25598547 Test:emerge-peppy update_engine emerge-peppy update_engine_client cros flash a test image to DUT. (on the DUT):update_engine_client --last_attempt_error Compare the results with the update_engine logs, matched. Change-Id: Id12681097ed30b0826cad68809f17f934a07e5b2
/system/update_engine/payload_state_interface.h
|
39910dcd1d68987ccee7c3031dc269233a8490bb |
|
10-Nov-2015 |
Alex Deymo <deymo@google.com> |
Split payload application code into a subdirectory. This patch splits from the main libupdate_engine code the part that is strictly used to download and apply a payload into a new static library, moving the code to subdirectories. The new library is divided in two subdirectories: common/ and payload_consumer/, and should not depend on other update_engine files outside those two subdirectories. The main difference between those two is that the common/ tools are more generic and not tied to the payload consumer process, but otherwise they are both compiled together. There are still dependencies from the new libpayload_consumer library into the main directory files and DBus generated files. Those will be addressed in follow up CLs. Bug: 25197634 Test: FEATURES=test emerge-link update_engine; `mm` on Brillo. Change-Id: Id8d0204ea573627e6e26ca9ea17b9592ca95bc23
/system/update_engine/payload_state_interface.h
|
aea4c1cea20dda7ae7e85fc8924a2d784f70d806 |
|
20-Aug-2015 |
Alex Deymo <deymo@google.com> |
Re-license update_engine to Apache2 This patch automatically replaced the license on all text files from Chromium OS (BSD style) to AOSP (Apache2), keeping the original year as a reference. The license header was added to .gyp and .gypi files, the NOTICE was replaced with a copy of the Apache2 license and MODULE_LICENSE_* file was updated. BUG=b/23084294 TEST=grep 'Chromium OS Authors' doesn't find anything. Change-Id: Ie5083750755f5180a8a785b24fe67dbf9195cd10
/system/update_engine/payload_state_interface.h
|
e89487039d0eca8130d822cabf75a729609509e0 |
|
12-Nov-2014 |
Alex Deymo <deymo@chromium.org> |
update_engine: Enforce virtual destructors on virtual classes. This patch enables -Wnon-virtual-dtor enforcing that virtual classes such as interfaces have a virtual destructor. This is required by the Google Coding Style and avoids some problems where the derived class' destructor is not called. BUG=None TEST=FEATURES=test emerge-link update_engine Change-Id: Id907e3c14923fcccc20b83bd064fa9c9c51fffb3 Reviewed-on: https://chromium-review.googlesource.com/228927 Commit-Queue: Alex Deymo <deymo@chromium.org> Tested-by: Alex Deymo <deymo@chromium.org> Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
/system/update_engine/payload_state_interface.h
|
74b5f55e6ff608857664fe151f54d78bfe0b75bb |
|
07-Oct-2014 |
Gilad Arnold <garnold@chromium.org> |
update_engine: Relocate inference and storage of P2P related properties. This change moves the inference of P2P related properties from OmahaRequestAction to OmahaResponseHandlerAction, and their storage from OmahaRequestParams to PayloadState. This is needed in order for the UpdateCanStart policy to be able to decide P2P properties, which only happens after the Omaha response is received and processed, and prior to applying the update. Further, P2P properties do not affect the Omaha request, and so there's no reason for them to reside in OmahaRequestParams nor decided as early as OmahaRequestAction. Additional cleanup includes swapping expected/actual arguments to EXPECT macros where appropriate, and removing redundant .Times(1) expectation qualifiers. BUG=chromium:384087 TEST=Unit tests. Change-Id: I6d5b4b44745d5dab7e350bdf019dbf804bf196a1 Reviewed-on: https://chromium-review.googlesource.com/223618 Reviewed-by: Gilad Arnold <garnold@chromium.org> Commit-Queue: Gilad Arnold <garnold@chromium.org> Tested-by: Gilad Arnold <garnold@chromium.org>
/system/update_engine/payload_state_interface.h
|
519cfc71f0a2f7f01adb51acd19b5cd23d2c93a2 |
|
02-Oct-2014 |
Gilad Arnold <garnold@chromium.org> |
update_engine: Move scattering wait period store/load to PayloadState. This is needed for decoupling the inference/use of this value from its storing/loading, as we shift the former into the Update Manager. BUG=chromium:384087 TEST=Unit tests. Change-Id: I4b278dc817b6f148d5638122f934e9d1e280bfae Reviewed-on: https://chromium-review.googlesource.com/221250 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Tested-by: Gilad Arnold <garnold@chromium.org> Reviewed-by: Alex Deymo <deymo@chromium.org> Commit-Queue: Gilad Arnold <garnold@chromium.org>
/system/update_engine/payload_state_interface.h
|
44cab30e0ee04b277e8463785ab069e9885a9f2d |
|
23-Jul-2014 |
Alex Vakulenko <avakulenko@chromium.org> |
update_engine: Sort headers alphabetically (build/include_alpha) We are going to enable build/include_alpha linter warning soon, so in preparation for this, fixed the warnings in update_engine. BUG=None TEST=cpplint.py --filter=-build/include_order,+build/include_alpha update_engine/* CQ-DEPEND=CL:209472 Change-Id: I261ea04681599a68ec7cb899f2f881cbe228ff7b Reviewed-on: https://chromium-review.googlesource.com/209631 Reviewed-by: Alex Deymo <deymo@chromium.org> Tested-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
/system/update_engine/payload_state_interface.h
|
cf175a098081f3f0e9ca52d997a7ce1585c14c2d |
|
11-Jul-2014 |
Gilad Arnold <garnold@chromium.org> |
Fix cpplint errors. The only non-obvious change here is the switch from dynamic_cast to static_cast in three cases of down-casting in UpdateAttempter. dynamic_cast is banned by style, nor does it add any safety in this particular case (subsequent code dereferences the result right away without checking whether it's null). BUG=None TEST=None Change-Id: I9d49b46362feaf9c6fa13b2715ebe9fe50308a9a Reviewed-on: https://chromium-review.googlesource.com/207470 Tested-by: Gilad Arnold <garnold@chromium.org> Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Gilad Arnold <garnold@chromium.org>
/system/update_engine/payload_state_interface.h
|
759c275760b51defcfe5545abb887ad2616335f4 |
|
18-Mar-2014 |
Alex Deymo <deymo@chromium.org> |
Fix header guards to comply with Google Coding Style. The Google Style Guide says that every header file should have a define guard and the format of the symbol name should be <PROJECT>_<PATH>_<FILE>_H_ This patch does all the minor fixes to comply with this and includes a header guard for the bzip.h file, which didn't have it. Also, the Copyright notice is adjusted to the Chromium OS code, replacing "Chromium Authors" by "Chromium OS Authors". BUG=None TEST=build passes. Change-Id: I6575cc307c464d60a5cb2b132cf1e46acb6500b5 Reviewed-on: https://chromium-review.googlesource.com/190445 Tested-by: Alex Deymo <deymo@chromium.org> Reviewed-by: Don Garrett <dgarrett@chromium.org> Commit-Queue: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state_interface.h
|
bb8bdc7dd7e54afe181045cc17d5a0dbde99739b |
|
03-Sep-2013 |
David Zeuthen <zeuthen@chromium.org> |
p2p: Add HttpPeer to DownloadSource enumeration This way the Installer.DownloadSourcesUsed metric conveys how often p2p is used and new metrics Installer.SuccessfulMBsDownloadedFromHttpPeer and Installer.TotalMBsDownloadedFromHttpPeer gives additional detail. BUG=chromium:284714 TEST=modify unit tests to cover this case + unit tests pass Change-Id: Ia4dff090091a282e1a184c2b18f8290749f5fdeb Reviewed-on: https://chromium-review.googlesource.com/167913 Reviewed-by: Alex Deymo <deymo@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org> Tested-by: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state_interface.h
|
dcba8098a905018e6fe2e8e4e3b121a255f0d99e |
|
06-Aug-2013 |
David Zeuthen <zeuthen@chromium.org> |
p2p: Add accounting for p2p usage to PayloadStateInterface This machinery is needed in order to stop using p2p if the device has failed to update itself using p2p in a timely manner. BUG=chromium:260426 TEST=New unit tests + unit tests pass Change-Id: I9f33309368f8cd5399b9d67c9072a1f78385abc0 Reviewed-on: https://chromium-review.googlesource.com/64827 Reviewed-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org> Tested-by: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state_interface.h
|
4243291a6655972fe89d4747a0089834c9e47c20 |
|
13-Jul-2013 |
Alex Deymo <deymo@chromium.org> |
Send an UMA metric when failed to boot into the new partition. When a payload is successfully applied, the /other/ partition is marked as valid and a reboot is needed, the reboot into this new partition can fail due to several reasons. If than happens, the firmware can rollback to the previous partition. When this happens, this fix sends a new UMA metric with the attempt number of this failing payload. In order to test this functionality we need to fake the utils::BootDevice() to emulate a reboot into the same or a different partition. To achieve this, this function is moved to a new "HardwareInterface" that can be faked using the FakeHardware class that can hold similar hardware related functions. Implementations and unittest were refactored as needed. BUG=chromium:243572 TEST=unittests Change-Id: I1a4242df0bd61e2718ab881ead603b1d3705b877 Reviewed-on: https://gerrit.chromium.org/gerrit/61815 Commit-Queue: Alex Deymo <deymo@chromium.org> Reviewed-by: Alex Deymo <deymo@chromium.org> Tested-by: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state_interface.h
|
820cc706c5ef60a3be96f5487f616bfed2b1d207 |
|
29-Jun-2013 |
Alex Deymo <deymo@chromium.org> |
Add Installer.AttemptsCount.Total metric. This patch adds a new Installer.AttemptsCount.Total metric that reports the number of payload attempts until the payload is successfully applied. To achieve this a new variable persisted in the preferences directory is added. This variable tracks the number of attempts for the current payload, beign it a full or a delta payload. Unfortunatelly, there is a "PayloadAttemptNumber" variable that tracks the number of attempts for the current payload, but only if it is a Full payload since this value is used for the exponential backoff algorithm used only for Full payloads. To overcome this, this variable is renamed to "FullPayloadAttemptNumber" and the new variable, tracking both delta and full payloads, is named "PayloadAttemptNumber". The setter, getter and unittests are updated as needed, and a new test is introduced to verify the difference between these two variables when the involved payload is a Delta payload. BUG=chromium:226769 TEST=update_engine_unittests Change-Id: I33d346d27ee8355f1152ebb829621571fe3a4244 Reviewed-on: https://gerrit.chromium.org/gerrit/60951 Reviewed-by: Alex Deymo <deymo@chromium.org> Tested-by: Alex Deymo <deymo@chromium.org> Commit-Queue: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state_interface.h
|
aa18e1641879f2df5993c2b02eb6f50d4443a649 |
|
20-Jun-2013 |
Chris Sosa <sosa@chromium.org> |
Blacklist versions as part of Rollback along with unittests. This CL adds version blacklisting as part of AU Rollback. A few additional things: 1) Since this pref must persist across rollback I have introduced a powerwash_safe_prefs as part of system_state that will persist across powerwashes. 2) Fixed bug where we needed to read the device policy (which is read during an update_check before Rollback would work). 3) Some refactoring to move pref constants to constants. 4) Passing keepimg into our powerwash command so we don't wipe the old partitions. BUG=chromium:252589 chromium:254217 TEST=Unittests + test on device + using rollback with and without powerwash checking preserve state. Change-Id: I991fad944594944425fd9941e10b30a919f2b83b Reviewed-on: https://gerrit.chromium.org/gerrit/59518 Reviewed-by: Chris Sosa <sosa@chromium.org> Tested-by: Chris Sosa <sosa@chromium.org> Commit-Queue: Chris Sosa <sosa@chromium.org>
/system/update_engine/payload_state_interface.h
|
e4c58bf01b6ccc915c6b261007dbb75241ed69b8 |
|
19-Jun-2013 |
David Zeuthen <zeuthen@chromium.org> |
Add Installer.TimeToRebootMinutes metric This patch introduces a new metric for tracking the duration between when an update has successfully completed (and the user is presented with the "reboot arrow" in the panel) and when the system has booted into the new update. BUG=chromium:248800 TEST=New unit test + Unit tests pass + Manual tested Change-Id: Ia22cedc3b70f1d9c2598bed9469b34a257546a64 Reviewed-on: https://gerrit.chromium.org/gerrit/59132 Reviewed-by: Don Garrett <dgarrett@chromium.org> Reviewed-by: Chris Sosa <sosa@chromium.org> Tested-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state_interface.h
|
a573d6fd046dc203b96bff6df8e57b35319906fd |
|
15-Jun-2013 |
David Zeuthen <zeuthen@chromium.org> |
Add Installer.UpdatesAbandonedCount metric This patch adds a new metric Installer.UpdatesAbandonedCount to track the number of update attempts that didn't complete because a newer update was detected during the download. This is implemented by counting the number of different responses seen since the last successful update. Updates are typically only abandoned if a device is suspended or powered off while an update is happening. This can happen either because the device was not turned on for a very long time or because it had little or no connectivity to Omaha and/or the servers serving the payload. This metric will help show how many users run into this problem. BUG=chromium:248800 TEST=New units tests + Unit tests pass + Manually tested Change-Id: I524a380a931c2fb30916d033b7e5b0c700f57103 Reviewed-on: https://gerrit.chromium.org/gerrit/59098 Reviewed-by: Chris Sosa <sosa@chromium.org> Tested-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state_interface.h
|
53173b964f6f43c89dbaba41875fcadd7077b2ea |
|
18-May-2013 |
Jay Srinivasan <jaysri@chromium.org> |
Download via HTTP only if enterprise policy allows. In order to rollout HTTP-downloads for AU to stable channel, we want to be a bit more conservative to preseve the defense in depth we have now with HTTPS. So, we're introduced a new enterprise policy which should be explicitly enabled in order for the payloads to be downloaded via HTTP. This CL adds the support for honoring such a policy in update engine. BUG=chromium:235562 TEST=New unit tests added, existing ones updated and they all pass. TEST=Tested on ZGB with and without policy and it works as expected. Change-Id: I356efbe237b10031161a57c70cb851c521915a76 Reviewed-on: https://gerrit.chromium.org/gerrit/55805 Reviewed-by: Chris Sosa <sosa@chromium.org> Tested-by: Jay Srinivasan <jaysri@chromium.org> Commit-Queue: Jay Srinivasan <jaysri@chromium.org>
/system/update_engine/payload_state_interface.h
|
a99981fda75fe0b17e96c700e3ddc93eca1cebe5 |
|
29-Apr-2013 |
David Zeuthen <zeuthen@chromium.org> |
Rename ActionExitCode to ErrorCode Nowadays ActionExitCode is used throughout the codebase so use a more generic name to reflect this. BUG=chromium:216507 TEST=unit tests pass Change-Id: I23d1d7e2676443251dbc42ed137fd018aadfa8a3 Reviewed-on: https://gerrit.chromium.org/gerrit/49512 Reviewed-by: Don Garrett <dgarrett@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org> Tested-by: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state_interface.h
|
be45bef9e283188b00e7def8967f81843669a7f1 |
|
10-Apr-2013 |
Chris Sosa <sosa@chromium.org> |
Add update reboot metric to the update engine. This change add the Installer.UpdateNumReboots metric. This records the number of reboots that occurred while an update was being attempted. It uses a marker file stored in tmp to discover whether or not it's already recorded the reboot. BUG=chromium:226766 TEST=Unittests | ran an update on a test machine and rebooted/resumed and checked about:histograms to confirm numbers. Also restart update-engine to verify it didn't double count that. Change-Id: I5d2af9d5b62a9d974c7c6243a89cb3359051b650 Reviewed-on: https://gerrit.chromium.org/gerrit/47710 Tested-by: Chris Sosa <sosa@chromium.org> Commit-Queue: Chris Sosa <sosa@chromium.org> Reviewed-by: Chris Sosa <sosa@chromium.org>
/system/update_engine/payload_state_interface.h
|
cc6f99600b3354cfe3a0d212241e1ee1dc3421b6 |
|
18-Apr-2013 |
David Zeuthen <zeuthen@chromium.org> |
Add metric to report number of URL switches per update attempt BUG=chromium:226765 TEST=Existing unit tests modified to test feature, Unit tests pass Change-Id: I5ee0816cac3fa4fa641949ed4872aef8074e3fcc Reviewed-on: https://gerrit.chromium.org/gerrit/48537 Commit-Queue: David Zeuthen <zeuthen@chromium.org> Reviewed-by: David Zeuthen <zeuthen@chromium.org> Tested-by: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state_interface.h
|
19409b74019d787100b768306e75ab3e5882898d |
|
13-Apr-2013 |
Jay Srinivasan <jaysri@chromium.org> |
Add metrics to report the number of bytes downloaded per protocol. This CL adds these two basic metrics: 1. The number of megabytes downloaded using each protocol (or source in general, as we want to consider HTTP downloads from server and possibly a peer in future as two different sources) for each successful update. The totals across all protocols will equal the payload size exactly. 2. The total number of megabytes downloaded since the last update attempt. If there are no errors, this should be same as above. Otherwise, this will be larger and will help us to compute the update efficiency. BUG=chromium:225953 TEST=Unit tests pass, new Unit tests added. TEST=chrome://histograms shows metrics correctly. Change-Id: Ic02e218f46568427df99a8a9df2011860aee84f3 Reviewed-on: https://gerrit.chromium.org/gerrit/48069 Reviewed-by: Chris Sosa <sosa@chromium.org> Commit-Queue: Jay Srinivasan <jaysri@chromium.org> Tested-by: Jay Srinivasan <jaysri@chromium.org>
/system/update_engine/payload_state_interface.h
|
9a017f2c5ae41c04a7c7c15b5dbd08faadae7606 |
|
12-Apr-2013 |
David Zeuthen <zeuthen@chromium.org> |
Measure and send update duration (and corresponding uptime) to UMA This patch introduces two new metrics, Installer.UpdateDuration and Installer.UpdateDurationUptime. The former is the timespan from when the update was first discovered until it has been downloaded and applied (including the time the device is suspended or powered off). The latter is similar, but without taking into account time spent in suspend or powered off. For example, if the device is suspended (or powered off) for N seconds while updating, the Installer.UpdateDuration metric will be N seconds bigger than Installer.UpdateDurationUptime metric: Histogram: Installer.UpdateDuration recorded 1 samples, average = 313.0 Histogram: Installer.UpdateDurationUptime recorded 1 samples, average = 251.0 Also remove the existing Installer.UpdateTime metric as this didn't take process restarts into account and is now superseeded by the Installer.UpdateDuration metric. This is done by using the CLOCK_MONOTONIC_RAW clock (available in Linux 2.6.28 and later) since this clock indeed does not advance when the system is sleeping. We use the PayloadState class to persist recorded data across update_engine process restart (including device reboots). Since clock_gettime(2) and CLOCK_MONOTONIC_RAW requires linking to the librt library do this and also request the system header files to expose the required symbols and defines, i.e. define _POSIX_C_SOURCE >= 199309L. Also remove _POSIX_C_SOURCE mangling from update_attempter.cc since it's actually not needed there and generally it's better to make the environment the same across all translation units (by putting whatever is needed in e.g. CCFLAGS). BUG=chromium:226763 TEST=unit tests, force update, examine chrome://histograms Change-Id: I883668564b5fa78ff3e19156bd77496ff929ca58 Signed-off-by: David Zeuthen <zeuthen@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/47928 Reviewed-by: Jay Srinivasan <jaysri@chromium.org>
/system/update_engine/payload_state_interface.h
|
082628869ed3ee3e173c08354d3fc40cdb7df2c0 |
|
29-Dec-2012 |
Jay Srinivasan <jaysri@chromium.org> |
Implement exponential backoff for throttling repeated AU downloads. Today we retry the same payload over and over again every hour. Ideally, we shouldn't require ever to re-download the same payload again. But from experience we find that post-install or firmware updates may succeed on a second attempt. So until we have code that can do such selective retries of those steps, we currently re-download and re-apply the whole payload. So instead of retrying over and over again, we backoff the successive payload download attempts at 1 day, 2 days, 4 days, etc. with an upper limit of 16 days. Another subtle reason for which we depend on the payload retry mechanism today is if we've failed downloading the payload via all the URLs that are specified in the rule, we don't want to keep re-attempting the download. This case is different from the case discussed above, because in this case we haven't even downloaded a payload once completely. In this case also, there's a need for throttling the amount of bytes we end up downloading repeatedly for a particular operation that may fail. This is done by treating the exhaustion of all URLs as equivalent to having downloaded a full payload and subjecting it to the same backoff behavior. We waive backoffs for dev/test images so as not to cause any delay in our testing or development. BUG=chromium-os:36806 TEST=Added new unit tests. Tested all scenarios on my ZGB. Change-Id: I6bd0d3f296a3c0da0a8026fb71b24785d825e39c Reviewed-on: https://gerrit.chromium.org/gerrit/40220 Commit-Queue: Jay Srinivasan <jaysri@chromium.org> Reviewed-by: Jay Srinivasan <jaysri@chromium.org> Tested-by: Jay Srinivasan <jaysri@chromium.org>
/system/update_engine/payload_state_interface.h
|
2b5a0f065187fd19179e3809148dbfc376ada7a0 |
|
20-Dec-2012 |
Jay Srinivasan <jaysri@chromium.org> |
Classify errors and advance URL index according to the error code. In CL https://gerrit.chromium.org/gerrit/39638, we always incremented the URL index irrespective of the error code. That would cause the first URL to be given up too quickly in favor of the second one even for transient errors such as when user closes a lid and reopens after some time. The right behavior in this case is to just count those failures towards the URL and only after repeated failures with no progress should we advance the URL index. This CL implements this logic and completes the multiple URL-related work items outlined in the design doc. BUG=chromium-os:37206 TEST=Tested all uses cases on my ZGB. Added and updated unit tests. Change-Id: Ida0cfbfeb9bfab732144049d1b27e3b8958bc252 Reviewed-on: https://gerrit.chromium.org/gerrit/39885 Commit-Queue: Jay Srinivasan <jaysri@chromium.org> Reviewed-by: Jay Srinivasan <jaysri@chromium.org> Tested-by: Jay Srinivasan <jaysri@chromium.org>
/system/update_engine/payload_state_interface.h
|