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.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.h
|
af9a863cd7aa4aa4ef12227908a10bc07440a0f0 |
|
24-Sep-2015 |
Alex Deymo <deymo@google.com> |
Remove obsolete Installer.* metrics. These metrics were replaced by the UpdateEngine.* metrics. Bug: chromium:355745 Test: FEATURES=test emerge-link update_engine Change-Id: I80d0db44681c428898500dd9099918e98ae40b28
/system/update_engine/payload_state.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.h
|
610277efc6f7e5239158dfa4bb3b1021804326e0 |
|
12-Nov-2014 |
Alex Deymo <deymo@chromium.org> |
update_engine: Add override when possible. Google Style Guide requires to include the "override" keyword when overriding a method on a derived class, so the compiler will catch errors if the method is not overriding a member of the base class. This patch introduces the "override" keyword when possible. BUG=None TEST=FEATURES=test emerge-link update_engine Change-Id: Ie83d115c5730f3b35b3d95859a54bc1a48e0be7b Reviewed-on: https://chromium-review.googlesource.com/228928 Tested-by: Alex Deymo <deymo@chromium.org> Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state.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.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.h
|
6e15aace93982e885181100b2380db7fe7e1278f |
|
02-Oct-2014 |
Gilad Arnold <garnold@chromium.org> |
update_engine: Relocate data member declaration. Per style, data members come after all method declarations. BUG=None TEST=None Change-Id: Ica1d6a3c5e150d32d7386c124b8824a962295d63 Reviewed-on: https://chromium-review.googlesource.com/221199 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Gilad Arnold <garnold@chromium.org> Tested-by: Gilad Arnold <garnold@chromium.org>
/system/update_engine/payload_state.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.h
|
d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6 |
|
16-Jun-2014 |
Alex Vakulenko <avakulenko@chromium.org> |
update_engine: fixed warnings from cpplint Fixed all the cpplint warnings in update engine. BUG=None TEST=Unit tests still pass. Change-Id: I285ae858eec8abe0b26ff203b99a42a200ceb71c Reviewed-on: https://chromium-review.googlesource.com/204027 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Tested-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
/system/update_engine/payload_state.h
|
4e1d1495c034c8a81c989622481b6cdf94a50c3c |
|
25-Apr-2014 |
David Zeuthen <zeuthen@chromium.org> |
metrics: Emit kAbnormalTermination if last update attempt failed. This allows us to track how many update attempts terminates abnormally, for example if the device is rebooted in the middle of an update or if update_engine crashes. We use a marker state variable (aka a "prefs" file) to keep track of this. Note that we don't currently report any of the other metrics in the UpdateEngine.Attempt.* namespace. If necessary, this can be changed in the future - I left a TODO item in the code with more details. BUG=chromium:357676 TEST=New unit tests + Unit tests pass + Manual tests. Change-Id: I83fe284c7c46917c0c55b92314c58098e2fd1789 Reviewed-on: https://chromium-review.googlesource.com/197175 Reviewed-by: Alex Deymo <deymo@chromium.org> Tested-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state.h
|
afed4a1a355c8416d496901234932e99864d6215 |
|
10-Apr-2014 |
David Zeuthen <zeuthen@chromium.org> |
Don't report metrics when rolling back. While reviewing histograms for the new metrics, some of the values for the UpdateEngine.Attempt.* metrics had bogus values. For example, the DownloadSource and ConnectionType metrics had values in their overflow buckets. This is weird as the code carefully tries to ensure that values outside the respective enum classes are never used. Here's how this can happen: If we're rolling back, the UpdateAttempter class calls PayloadState::Rollback() instead of PayloadState::UpdateResumed() or PayloadState::UpdateRestarted(). Crucially, PayloadState::Rollback() never calls the AttemptStarted() method so the attempt_*_ member variables are left uninitialized. Then later on UpdateAttempter::ProcessingDone() calls PayloadState::UpdateSucceeded() or PayloadState::UpdateFailed() which ends up calling PayloadState::CollectAndReportAttemptMetrics() and we report the uninitialized attempt_*_ members. This CL fixes this problem by making PayloadState::Rollback() call AttemptStarted() and then keep track of whether it's a rollback or not. In the affirmative we don't report metrics. There's also a unit test to verify this. Additionally, this CL also fixes the oversight that the attempt_*_ members were not initialized in the constructor, per policy. It would probably be better if rollback was implemented in another way (so it didn't trigger codepaths like this) but that's not how it was done. We should probably also think about reporting metrics specific to rollback. BUG=chromium:355745 TEST=New unit test + Unit tests pass. Change-Id: Id2e606f02797714520290c4cbe34a056ccdae053 Reviewed-on: https://chromium-review.googlesource.com/193950 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.h
|
b281f0768f4d95afcf7378229a1a9f9ec9bd69ab |
|
02-Apr-2014 |
David Zeuthen <zeuthen@chromium.org> |
Add UpdateEngine.Attempt.ConnectionType metric. This adds a new metric so we can track the how the device is connected to the Internet when an attempt starts. BUG=chromium:358339 TEST=New unit test + unit tests pass. Change-Id: Ic5c2f50e2396e6baa288aca70906f7112ef7bca9 Reviewed-on: https://chromium-review.googlesource.com/192864 Reviewed-by: Chris Sosa <sosa@chromium.org> Reviewed-by: Alex Deymo <deymo@chromium.org> Tested-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state.h
|
33bae491eded4ef4f1eb4f4ef0f01ef0e5463f3a |
|
26-Feb-2014 |
David Zeuthen <zeuthen@chromium.org> |
Add new metrics. The current metrics (Installer.* namespace) have several shortcomings, for example it's not immediately clear when and how frequent each metric is reported. This CL introduces new metrics that addresses this and other problems. The new metrics are all in the UpdateEngine.* namespace and fall into five categories UpdateEngine.Daily.* Reported daily. UpdateEngine.Check.* On every check. UpdateEngine.Attempt.* On every attempt. UpdateEngine.SuccessfulUpdate.* With every successful update. UpdateEngine.* Miscellaneous Most of the new metrics mimic existing metrics and also leverage the existing code, book-keeping and unit tests. The plan is to remove the Installer.* metrics once we're happy with the new ones. I've also tested this manually by performing updates and verifying that chrome://histograms looks correct. BUG=chromium:355745 TEST=New unit tests + unit tests pass + manual testing. Change-Id: I7a3f68d75910384b116c7e4664776e25d3997584 Reviewed-on: https://chromium-review.googlesource.com/191314 Reviewed-by: David Zeuthen <zeuthen@chromium.org> Tested-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state.h
|
75039d7397f03dff77bdf4e26398049ff88edc4c |
|
25-Mar-2014 |
Alex Vakulenko <avakulenko@chromium.org> |
update_engine: update to libbase 242728 Made update_engine link with libchrome-242728 and fixed compile issues due to changes in namespaces and include file layout. Also removed some of suppressed compiler warnings and fixed the issues masked by them (e.g. mismatched printf-like specifiers). Added -Wextra compiler option to enable additional useful warnings to ensure more strict checking... Had to disable "unused-parameter" though since we have a lot of functions (mainly in fakes) that do not use all of their parameters. BUG=chromium:351593 TEST=Unit tests passed. CQ-DEPEND=CL:191721 Change-Id: I1aa63a48d5f1f4ea75ba6b00aec7aa5f3bad15c4 Reviewed-on: https://chromium-review.googlesource.com/191510 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Alex Vakulenko <avakulenko@chromium.org> Tested-by: Alex Vakulenko <avakulenko@chromium.org>
/system/update_engine/payload_state.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.h
|
b3dcdb309615b8ec280584319f37b187924b6694 |
|
05-Sep-2013 |
Chris Sosa <sosa@chromium.org> |
Load the and store rollback version into the correct variable. Somehow missed this and added unittest to help never have this issue again. In this CL I also got rid of the powerwash_prefs_ logic in GetPersistedValue because it was just useless noise in my prev CL that isn't used anymore. BUG=chromium:285381 TEST=unittests that actually catch error. Change-Id: I4ed680c5b5c2e37549d58aa0a7c0d35a62623fe7 Reviewed-on: https://chromium-review.googlesource.com/168073 Tested-by: Chris Sosa <sosa@chromium.org> Reviewed-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: Chris Sosa <sosa@chromium.org>
/system/update_engine/payload_state.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.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.h
|
b33b0f0a0d8648542a0633cc708de149d52829b6 |
|
09-Aug-2013 |
Alex Deymo <deymo@chromium.org> |
Add Installer.UpdatesAbandonedEventCount metric. This patch adds a new metric similar to Installer.UpdatesAbandonedCount that reports the number of abandoned payloads every time a payload is abandoned. A payload is considered "abandoned" when it was already attempted but not finished for any reason, and a newer payload is avaibled. In this situation, update_engine drops the previous payload and starts again with the new one. Every time a payload is abandoned, the new metric Installer.UpdatesAbandonedEventCount is sent with the number of consecutive different abandoned payloads since the last successful update. A high number of entries greater than 1 in this metric will imply that we are releasing new payloads too often, or that the users are taking too long to download an update. Finally, when a payload is successfully applied, the total number of abandoned payloads since the previous successful update is sent as the the metric Installer.UpdatesAbandonedCount. BUG=chromium:261370 TEST=unittests Change-Id: I47054b541c4700a86183461a5cf92830883ea4f3 Reviewed-on: https://gerrit.chromium.org/gerrit/65328 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.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.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.h
|
1c656c48886cf5054b526ed7e95b05903d7644db |
|
28-Jun-2013 |
Alex Deymo <deymo@chromium.org> |
Add Installer.PayloadFormat metric Adds a new PayloadFormat metric with three different values: Delta, Full and ForcedFull. The metric is send whenever an update is applied successfully indicating the type of the used payload. The difference between Full and ForcedFull is that in the ForcedFull, the request sent to omaha included a directive saying that a delta payload wasn't accepted, where a Full payload is one where a delta payload was accepted but a Full payload was provided. BUG=chromium:225977 TEST=cros_workon_make update_engine --test # Three tests added, one for each condition. Change-Id: If44cd96df325d320ed327114cc5e5de3d34a5c62 Reviewed-on: https://gerrit.chromium.org/gerrit/60318 Reviewed-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: Alex Deymo <deymo@chromium.org> Tested-by: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state.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.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.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.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.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.h
|
674c318a84e4344fce0fdaee039784ed7900d188 |
|
18-Apr-2013 |
David Zeuthen <zeuthen@chromium.org> |
Use better histogram parameters for duration metrics In the current code this is capped at 20 minutes which is not helpful as we're interested in data for devices that take much longer to update. Instead, use one year for UpdateDuration and one month for UpdateDurationUptime. Also move the code that sends the metric into PayloadState to better conform with newly added code. Also rename the metrics to they have the suffix Minutes. E.g. the new metric names are Installer.UpdateDurationMinutes Installer.UpdateDurationUptimeMinutes Also add unit test for utils::FormatTimeDelta(). BUG=None TEST=Unit tests, look at chrome://histogram Change-Id: I8581ec111f9833bdd72f10888c9626f40779f8b9 Reviewed-on: https://gerrit.chromium.org/gerrit/48558 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.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.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.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.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.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.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.h
|
6f6ea00aa8c4cf54b6842be32ca1226854c24f78 |
|
14-Dec-2012 |
Jay Srinivasan <jaysri@chromium.org> |
Support for processing multiple URLs in update_engine. Main changes: 1. Added a new PayloadState class which encapsulates all the persisted state we use for multiple URLs, back-off (TBD), etc. 2. Added support for handling multiple URLs stored in the OmahaResponse in OmahaRequestAction and OmahaResponseHandlerAction code. 3. Added support for picking the right URL in OmahaResponseHandlerAction and putting it in the install_plan. This way, the rest of the code that uses the install_plan is oblivious to the presence of multiple URLs :-) 4. Added support for advancing to next URL when an update fails. The full error classification is a new work item (chromium-os:37206). Right now, it's a basic round-robin on every error. 5. Updated the conditions for determining when hash checks are mandatory. Previously since there was only one URL, if it was HTTPS, the checks were waived. Now, even if there's one HTTP URL, we make hash checks mandatory even if other HTTPS URLs are present. 6. Added new unit tests for PayloadState and the new logic added to other places. Noisy changes: 1. Instead of passing PrefsInterface to OmahaRequestAction and OmahaResponseHandlerAction, we're now passing SystemState which will now contain PrefsInterface and the newly added PayloadState object that these actions need to do their work. 2. Renamed a bunch of setters/getters to set_x() and x() instead of SetX() and GetX() methods - this was pending from Gilad's old CR. As I'm adding new methods in the correct style, I went ahead and fixed it to avoid the confusing styles. 3. Updated all existing unit tests to reflect these changes. BUG=chromium-os:36807 TEST=All Single/Multiple URL scenarios work fine on my ZGB as expected. TEST=Old and new unit tests run fine. Change-Id: Id31f9ccb220471f3ec3a475f624dc03c16119144 Reviewed-on: https://gerrit.chromium.org/gerrit/39638 Commit-Ready: Jay Srinivasan <jaysri@chromium.org> Reviewed-by: Jay Srinivasan <jaysri@chromium.org> Tested-by: Jay Srinivasan <jaysri@chromium.org>
/system/update_engine/payload_state.h
|