44906965d0809992052e47e11809ec730813d8b0 |
|
09-Jan-2018 |
Sen Jiang <senj@google.com> |
Merge remote-tracking branch 'goog/upstream-master'. The following commits were reverted: 840703a Fix update over cellular network on guest account eaad5d0 Do not merge to AOSP: Fixes the link to brillo-clang-format in CrOS 740efad Reboot even if a system update is not available. Fixed a few sign compare warnings. Had to ifdef out 2 SquashfsFilesystemTest because it depends on unsquashfs -m. Test: update_engine_unittests Change-Id: I6f4ca5003e78c76064ec60d0797505d8c18d00bf Merged-In: I6f4ca5003e78c76064ec60d0797505d8c18d00bf
|
d4777a148bc822ca11b8355a9df733a5798852c1 |
|
24-Oct-2017 |
Tianjie Xu <xunchang@google.com> |
Collect android metrics for bytes downloaded Report bytes downloaded for update attempts and successful updates. Prefs used to help metrics report: kPrefsCurrentBytesDownloaded kPrefsTotalBytesDownloaded Bug: 30989466 Test: unittest pass Change-Id: I7d213204ee2757551ad914c122a274965dfbff06
/system/update_engine/payload_state_unittest.cc
|
672c1f54a499a825cc0bb9bc4f240bf1887550d9 |
|
24-Oct-2017 |
Ben Chan <benchan@chromium.org> |
update_engine: replace testing::SetArgumentPointee with testing::SetArgPointee testing::SetArgumentPointee defined in gmock has been deprecated and superseded by an equivalent testing::SetArgPointee. BUG=chromium:777011 TEST=Run unit tests. Change-Id: Ifc48897148d721e6f65159a54586e1fb456d75b9 Reviewed-on: https://chromium-review.googlesource.com/735213 Commit-Ready: Ben Chan <benchan@chromium.org> Tested-by: Ben Chan <benchan@chromium.org> Reviewed-by: Mike Frysinger <vapier@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
90aaa109e38f147ec4bfc772439d9949f1b237c0 |
|
11-Oct-2017 |
Tianjie Xu <xunchang@google.com> |
Collect metrics for android update attempt Report the update attempt/result metrics when an upate finishes; and abnormally terminated updates/time to reboot when the device reboots. Bug: 30989466 Test: update_engine_unittest pass Change-Id: Iea16b4e8003ae3dab5e9b7c65cf4b38d2219d203
/system/update_engine/payload_state_unittest.cc
|
1f93d098d6d6c341ed7471352fda80c936471a17 |
|
09-Oct-2017 |
Tianjie Xu <xunchang@google.com> |
Split the ReportUpdateAttemptMetrics into two functions Move out the report download metrics into a new function so that ReportUpdateAttemptMetrics has a reasonable number of parameters. Create mocks for these two functions also. Test: unittest pass Change-Id: Ib9fc33d282a448c7e2d19bb7e7c06619efc2a278
/system/update_engine/payload_state_unittest.cc
|
282aa1f89de19d7052d844b0f7c53fedc04b802e |
|
05-Sep-2017 |
Tianjie Xu <xunchang@google.com> |
Move metrics from namespace to class Add a new metrics reporter interface to handle the current metrics report for omaha (with metricsd). This helps to add metrics logging for android phone devices (using other libraries) in the future. Also change the unit tests accordingly. Test: unit tests pass for pico Change-Id: I703c8b6353e4b38bc89d6a71f01623978cf7a549
/system/update_engine/payload_state_unittest.cc
|
cdd5206c6507fa5c70344c269053d30777f7d674 |
|
19-May-2017 |
Sen Jiang <senj@google.com> |
Support IsDeltaPayload per <package>. Mixed full and delta payloads are now supported for multi-payload. Bug: 36252799 Test: update_engine_unittests Change-Id: Ic519f8399579c714a65ba9f9f948a389fcc249ed (cherry picked from commit 4928112f8635f7a5b583171640aee2bda690ba34)
/system/update_engine/payload_state_unittest.cc
|
0affc2c099fac47b999ba39f8f1bacb418e65a97 |
|
11-Feb-2017 |
Sen Jiang <senj@google.com> |
Parse multiple packages from Omaha response. The multi-payload info are stored in OmahaResponse and InstallPlan, but we still can only apply the first payload for now. Bug: 36252799 Test: mma -j Test: update_engine_unittests Change-Id: I5ca63944ae9082670d0e67888409374f140d4245 (cherry picked from commit 2aba8a87d4fac245a2e2d238b3159f8eabce630f)
/system/update_engine/payload_state_unittest.cc
|
80f70ff45f8ea9a679c0c3ed0dc143dd2fe2b63e |
|
11-Feb-2016 |
Alex Deymo <deymo@google.com> |
Build unittests in Brillo. Many unittests do not pass for simple reasons that will be addressed later. This CL includes all the changes to make the unittests build. In particular, the generated DBus mocks, required to build several unittests are now included here. The dbus-constants.h files were moved to the system_api repo, so they can be removed from here. The unittest build is only enabled for Brillo targets, since non-Brillo targets don't even build DBus. Bug: 26955860 TEST=`mmma` on edison-eng (and aosp_arm-eng). Change-Id: Ib38241f0a6eb99b1d60d72db6bcfd125d38e3fad
/system/update_engine/payload_state_unittest.cc
|
1f19dccb115cf608104b1cb0d192a53ae32f238f |
|
03-Feb-2016 |
Alex Deymo <deymo@google.com> |
Add ErrorCode::kUserCanceled. To accomodate the posibility of canceling an ongoing update, this patch adds a new ErrorCode signaling a user canceling the update. This patch also removes the now useless unittests that checks if you added a new error code since the compiler fails if you don't add the error code to the method mentioned in the test. Bug: None TEST=FEATURES=test emerge-link update_engine TEST=`mmma system/update_engine` on edison-eng and aosp_arm-eng Change-Id: I991dab1dd8b6c0bb0c24d51cca4e1b75440a86b4
/system/update_engine/payload_state_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
763e7dbaac735da0ae802933a1015b6b7874bce2 |
|
28-Aug-2015 |
Alex Deymo <deymo@google.com> |
update_engine: New BootControlInterface class. The new BootControlInterface class is a platform-independent abstraction to control the bootloader. It provides methods for setting what partition slots are available for booting and getting the bootloader status about the available slots. The Chrome OS specific implementation of the bootloader was moved to the BootControlChromeOS which now depends on the vboot_host implementation used in Chrome OS. Follow up CL will implement the equivalent class for Brillo. BUG=b:23010637 TEST=unittests; cros flash from the new image and rolled back from it. Change-Id: I0a03aeeb8c21d8c99e1866b625e6e8c96628215b
/system/update_engine/payload_state_unittest.cc
|
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_unittest.cc
|
0b3db6b6040f53eb9859e614f7fe4c681213d33a |
|
11-Aug-2015 |
Alex Deymo <deymo@chromium.org> |
update_engine: Remove all references to glib. The message loop in production code switched from chromeos::GlibMessageLoop to chromeos::BaseMessageLoop used in chromeos::Dameon. This patch moves all the unittests also to use chromeos::BaseMessageLoop or chromeos::FakeMessageLoop when I/O is not required. This patch removes all (now unused) references to glib. BUG=chromium:499886 TEST=`grep glib[^c] . -R` return no results. Also, unittests work. Change-Id: Iddfb17def501829d932ed1f70faad3e00268898e Reviewed-on: https://chromium-review.googlesource.com/292157 Tested-by: Alex Deymo <deymo@chromium.org> Reviewed-by: Alex Deymo <deymo@chromium.org> Commit-Queue: Alex Deymo <deymo@chromium.org> Trybot-Ready: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
eb9e6d8d8813b2d5a81a14e0184f7b4798573606 |
|
17-Apr-2015 |
Allie Wood <alliewood@chromium.org> |
update_engine: Remove copy from source to destination partition. Removes the copy of the old rootfs and kernel to the new rootfs and kernel. This was initially done in FilesystemCopierAction, which is now called FilesystemVerifierAction. When FilesystemVerifierAction is given a source rootfs or kernel, it calculates the hashes. When asked to verify the new rootfs or kernel, it computes the hashes and compares them against the values in the manifest. BUG=chromium:463562 TEST=Updates using `cros flash --src-image-to-delta` and unit tests. CQ-DEPEND=CL:267360 Change-Id: I3c9ba60fa4af0c5381ba8a10883bd47dc40adb8c Reviewed-on: https://chromium-review.googlesource.com/267554 Reviewed-by: Allie Wood <alliewood@chromium.org> Commit-Queue: Allie Wood <alliewood@chromium.org> Trybot-Ready: Allie Wood <alliewood@chromium.org> Tested-by: Allie Wood <alliewood@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
8427b4a6d0e6e02beedbb53798272f8ddc39386f |
|
05-Nov-2014 |
Alex Deymo <deymo@chromium.org> |
update_engine: Standarize mock/fake filenames. Mock classes implement mostly MOCK_METHOD* methods used with gmock. Those classes should be named with the prefix "Mock" in the class name and "mock_" in the header filename. Fake classes implement a working version of the interface they provide, often with extra functionality to change their behavior. Those classes should be prefixed with "Fake" in the class name and "fake_" in the file name. Other minor include order fixes are included in this patch. BUG=None TEST=Unittest still pass. Change-Id: I23de7cb11e25182d5855afacca47d431c97b82bb Reviewed-on: https://chromium-review.googlesource.com/227779 Reviewed-by: Alex Deymo <deymo@chromium.org> Commit-Queue: Alex Deymo <deymo@chromium.org> Tested-by: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
2c0db7b68d1f1fa4538b0c34e2fb5c58930ae0c8 |
|
04-Nov-2014 |
Alex Deymo <deymo@chromium.org> |
update_engine: Use FakePrefs instead of the real Prefs in unittests. Several unittests were using the real Prefs class on a temporary directory that was removed at the end of the test. On UpdateAttempterTest.DecrementUpdateCheckCountTest this directory was leaked due to the use of the ScopedDirRemover which only works on empty dirs, used elsewhere to remove mount points. This patch replaces all the uses of a real Prefs class initialized on a temp directory with a FakePrefs instance, which provides the same functionality and simplifies the initialization. p2p_manager_unittest.cc is left out of this patch since its usage of Prefs is being removed in a different CL. BUG=chromium:356906 TEST=All unittests still pass. Change-Id: Ieba6b924fcbda9e1787becba334792aabe0f395a Reviewed-on: https://chromium-review.googlesource.com/227444 Reviewed-by: Alex Deymo <deymo@chromium.org> Commit-Queue: Alex Deymo <deymo@chromium.org> Tested-by: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
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_unittest.cc
|
f329b933db41d26644a97afef928eb1b319d6d99 |
|
30-Oct-2014 |
Alex Deymo <deymo@chromium.org> |
update_engine: Fix all the "using" declaration usage. This patch removes unused "using" declarations, that is, declarations included in a .cc file at a global scope such that "using foo::bar" that later don't use the identifier "bar" at all. This also unifies the usage of these identifiers in the .cc files in favor of using the short name defined by the using declaration. For example, in several cases the .h refer to a type like "std::string" because using declarations are forbidden in header files while the .cc includes "using std::string;" with the purpose of just writting "string" in the .cc file. Very rarely, the full identifier is used when a local name ocludes it, for example, StringVectorToGStrv() and StringVectorToString() in utils.cc named its argument just "vector" need to refer to std::vector with the full name. This patch renames those arguments instead. Finally, it also sorts a few lists of using declarations that weren't in order. BUG=None TEST=FEATURES=test emerge-link update_engine Change-Id: I30f6b9510ecb7e03640f1951c48d5bb106309840 Reviewed-on: https://chromium-review.googlesource.com/226423 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Alex Deymo <deymo@chromium.org> Tested-by: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
06c76a49bfd29c8abdb8abd5b646a6583783191a |
|
05-Sep-2014 |
Ben Chan <benchan@chromium.org> |
Update code to include base/files/file_util.h file_util.h was moved from base to base/files (https://codereview.chromium.org/468253002). This CL updates platform2 code to include base/files/file_util.h instead of base/file_util.h. BUG=chromium:411001 TEST=Trybot run on paladin, release, and chromiumos-sdk builders. Change-Id: I488925b54615e131e508a460dc1a27f88168f936 Reviewed-on: https://chromium-review.googlesource.com/216851 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Tested-by: Ben Chan <benchan@chromium.org> Commit-Queue: Ben Chan <benchan@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
f3e2801f18bae14e41099e007de7c9a019735556 |
|
27-Aug-2014 |
David Zeuthen <zeuthen@chromium.org> |
update_engine: Reject XML with internal entity declarations. This helps avoid resource exhaustion problems. BUG=chromium:406546 TEST=New unit test + unit tests pass. Change-Id: Ib54f378cf533c200631b274c0414075c2ea4ff67 Reviewed-on: https://chromium-review.googlesource.com/214291 Reviewed-by: Chris Masone <cmasone@chromium.org> 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_unittest.cc
|
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_unittest.cc
|
d1c4d2dd3daed1d507038046c0355fbafb85260c |
|
05-Jun-2014 |
Gilad Arnold <garnold@chromium.org> |
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>
/system/update_engine/payload_state_unittest.cc
|
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_unittest.cc
|
96197df73f6c804d96eb3a1390eb817f354089d2 |
|
16-Apr-2014 |
David Zeuthen <zeuthen@chromium.org> |
metrics: Add UpdateEngine.Rollback.Result metric. Add a metric to track if rollback succeeds or fails. The main use case for this metric is to record how often rollback actually happens. Right now we only track success/failure but if we see a lot of failures in the future, we could add a new metric, for example UpdateEngine.Rollback.FailureErrorCode to convey more detail. BUG=None TEST=New unit test + unit tests pass. Change-Id: I5c32d8585dc8e4b6d38c540d2f754ede5b2ad50b Reviewed-on: https://chromium-review.googlesource.com/195203 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_unittest.cc
|
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_unittest.cc
|
5bb4c90b8bdf931426d1926b21b0316a86b4b4e4 |
|
10-Apr-2014 |
Gilad Arnold <garnold@chromium.org> |
Rename MockSystemState into FakeSystemState. This class is no longer a mock. The change also includes renaming the appropriate files and the instances of this class. BUG=chromium:358278 TEST=Unit tests. Change-Id: Ifc20ead0d624eddf8827a6e6f39cd9b9207dcabf Reviewed-on: https://chromium-review.googlesource.com/194088 Reviewed-by: Gilad Arnold <garnold@chromium.org> Tested-by: Gilad Arnold <garnold@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
1f84723f499b3b309efac11324ed4e6c937341b6 |
|
07-Apr-2014 |
Gilad Arnold <garnold@chromium.org> |
Revise the SystemState hierarchy. * Removed all #includes from SystemState; added includes in .cc files that use the various objects (MetricsLibrary, DevicePolicy, etc). * MockSystemState: - Regulated the set of getters/setters: foo() returns the current Foo object interface; this object can be overridden by set_foo(); mock_foo() or fake_foo() returns the default (internal) mock/fake equivalent, and fails if it is different from foo() (safety). - Make member declaration order consistent with that of API. - Removed MOCK_METHOD declarations for two methods and replaced them with fake getter/setter. This means that MockSystemState is now reduced to a fake, and can be renamed (separate CL). This also means that a few tests have a slightly different semantics now. * All virtual overrides are qualified as such. However, removed the 'const' method qualified from all getters: it made little sense, especially when considering that getters are handing addresses of internal mock members. * Made the UpdateAttempter a contained member of both {Real,Mock}SystemState, resolving initialization dependencies. In general, the invariant is that all members of the SystemState that rely on it being fully populated by the time of their initialization, need to export a separate Init() method, that will be called (by the SystemState implementation constructor or Init() method) only after all members are set. * Made the mock GPIO handler and connection manager contained members of MockSystemState; the destructor could safely be moved. * Cleanup in UpdateAttempter (part of resolving dependencies): - Ordinary member initialization done via default initializers (constants) or initializer list in the constructor (parameters). - Init() method only does work that cannot be done during construction, with appropriate comment documenting the need for it. - Better reuse via constructor delegation. BUG=chromium:358278 TEST=Unit tests. Change-Id: I96ff6fc7e7400b0a9feb6cc8d4ffe97a51000f91 Reviewed-on: https://chromium-review.googlesource.com/193587 Reviewed-by: Gilad Arnold <garnold@chromium.org> Tested-by: Gilad Arnold <garnold@chromium.org> Commit-Queue: David Zeuthen <zeuthen@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
a6742b35938b6f58e24e3f1c550fe92d4d33eb74 |
|
11-Jan-2014 |
Gilad Arnold <garnold@chromium.org> |
AU: shift to use new TMPDIR-enabled temp file The main change here is that delta generator will now create all temporary files in TMPDIR, if set. Other than that, we're converting all other temporary file/directory creation to use the new functions. - All temps of the form "/tmp/foo" are converted to "foo": this preserves the behavior in the default case (where TMPDIR is not set), yet will do the right thing if run with a different TMPDIR. - A few other cases (for example, temp file created relative to the current working directory) will now be created in TMPDIR or /tmp. These are all in unit tests and the transition makes sense anyway. Note that two temp file/directory creation calls in actual UE code were using "/tmp/..." and were not changed. This will ensure that they are resilient to TMPDIR changes and will always be allocated in the same (hard-coded) location. BUG=chromium:253622 TEST=Unit tests. Change-Id: Ia1208963a0e2fcd43b8d6f92bb3d1b7459e930a2 Reviewed-on: https://chromium-review.googlesource.com/182247 Tested-by: Gilad Arnold <garnold@chromium.org> Reviewed-by: Don Garrett <dgarrett@chromium.org> Commit-Queue: Gilad Arnold <garnold@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
6646b44ac128d07b33435d0bbf7cfd140af15eb9 |
|
14-Nov-2013 |
Don Garrett <dgarrett@google.com> |
Don't rollback if the other partition isn't valid. Before we start a rollback to the other OS slot, validate the GPT flags show it as bootable. This should prevent us from attempting a rollback if an update has been attempted and failed, or is currently in progress. Such a rollback would always fail, since the other partition would be left in a partially modified state. Piggyback: Move sanity test in hardware that was added to the wrong method. Undid some unittest changes that were decided against after the fact. BUG=chromium:267054 TEST=Unittests Manual Update Rollbacks (with/without flags on other partition) Change-Id: Ide6b0673855ba2e4b05a0db93413a1a9f2ece2a9 Reviewed-on: https://chromium-review.googlesource.com/176755 Reviewed-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: Don Garrett <dgarrett@chromium.org> Tested-by: Don Garrett <dgarrett@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
83692e4fd17b5669eeb3edb24b8c4cd8152c7283 |
|
08-Nov-2013 |
Don Garrett <dgarrett@google.com> |
Mark the new kernel invalid when starting an update. Before we overwrite the new kernel, mark it as unbootable by setting the GPT flags "successful" and "tries" to 0. This is good, but not critical as a general behavior because it prevents the firmware from even trying a kernel we think will be bad. It's more useful, because it gives us a definitive way to know if the other kernel is expected to be valid for purposes of things like rollback. There will be a future CL to use it for preventing rollback to a known invalid installation. Also adds a MockHardware implementation backed by the FakeHardware implementation, and switches MockSystemState to use it. BUG=chromium:280816 TEST=Manual watching of flags, and multiple updates. CQ-DEPEND=CL:176177 Change-Id: Idb083279cd1438a555c5165c69b25c351207e382 Reviewed-on: https://chromium-review.googlesource.com/176169 Reviewed-by: Don Garrett <dgarrett@chromium.org> Tested-by: Don Garrett <dgarrett@chromium.org> Reviewed-by: David Zeuthen <zeuthen@chromium.org> Commit-Queue: Don Garrett <dgarrett@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
056b0abc1273a6eebfd73060a1d0344ef02b8696 |
|
29-Oct-2013 |
J. Richard Barnette <jrbarnette@chromium.org> |
Move IsOfficialBuild() and IsNormalBootMode() into HardwareInterface. This makes the implementation of the two methods part of the HardwareInterface, so that unit tests won't end up with meaningless (and unpredictable) calls to the real functions. BUG=None TEST=unit tests Change-Id: Ia23932634124987c1d6ff0683acb15cf4819bc5e Reviewed-on: https://chromium-review.googlesource.com/175024 Reviewed-by: Chris Sosa <sosa@chromium.org> Commit-Queue: Richard Barnette <jrbarnette@chromium.org> Tested-by: Richard Barnette <jrbarnette@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
4da2cc108871803c765b3479d5c1ce329cb0dd13 |
|
29-Oct-2013 |
J. Richard Barnette <jrbarnette@chromium.org> |
Make FakeHardware the default for all unit tests. Previously, unit tests by default ran with a MockSystemState that used the Hardware class instead of the FakeHardware mock. This changes to make all tests use the FakeHardware mock unconditionally. BUG=None TEST=unit tests Change-Id: I9d70aec0d59c5913968e4d37f1d4a2a28e854920 Reviewed-on: https://chromium-review.googlesource.com/174915 Tested-by: Richard Barnette <jrbarnette@chromium.org> Reviewed-by: Alex Deymo <deymo@chromium.org> Commit-Queue: Richard Barnette <jrbarnette@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
4d039449ae2b9a218660d6ac92d610f50b308837 |
|
29-Oct-2013 |
Don Garrett <dgarrett@google.com> |
Enforce handling of expected payload versions only. We have always shipped version 1 payloads, but have never checked the version number. This change enforces that, so we refuse to process any other version number. The new error code kErrorCodeUnsupportedPayloadVersion is added to report bad payload versions if they are received. BUG=chromium:312526 TEST=Unittests. Change-Id: I25c9f7e73c37274527bc7cc9ba9e3d9f4734326c Reviewed-on: https://chromium-review.googlesource.com/174940 Commit-Queue: Don Garrett <dgarrett@chromium.org> Tested-by: Don Garrett <dgarrett@chromium.org> Reviewed-by: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
308429363870cf92a74a60ae8a645aa60b1a3a64 |
|
28-Oct-2013 |
J. Richard Barnette <jrbarnette@chromium.org> |
Move KernelDeviceOfBootDevice() to utils. The function to construct the kernel partition block device from its corresponding boot device uses only string manipulations, and doesn't operate on the underlying hardware. This removes the function from HardwareInterface, in favor of utils. BUG=None TEST=unit tests Change-Id: I94b2c477413c4b484045a696f0ffbc77d9853195 Reviewed-on: https://chromium-review.googlesource.com/174913 Commit-Queue: Richard Barnette <jrbarnette@chromium.org> Tested-by: Richard Barnette <jrbarnette@chromium.org> Reviewed-by: Chris Sosa <sosa@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
20f005c62b55471d3ed8f6fd55e23564adeb59fe |
|
05-Sep-2013 |
Chris Sosa <sosa@chromium.org> |
Don't backoff update attempts for interactive checks. Previous CL only did not defer where deferring is Policy driven while backoff is state driven. This CL also moves the matching p2p logic into ShouldBackoffDownload which makes it easier to see and test. BUG=chromium:274056 TEST=New unittests. Change-Id: I3acd29c0cf11d855cfd78f77016857f52a6d346c Reviewed-on: https://chromium-review.googlesource.com/168290 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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
f7d8004834f54aaf642da6488521511e6b637fdc |
|
23-Aug-2013 |
Chris Sosa <sosa@chromium.org> |
Allow HTTP urls when device policy doesn't specify. BUG=chromium:277835 TEST=Unittest Change-Id: I638248dcbdbdaf48e38b79638b2348aa6c1400fb Reviewed-on: https://gerrit.chromium.org/gerrit/66732 Tested-by: Chris Sosa <sosa@chromium.org> Reviewed-by: Don Garrett <dgarrett@chromium.org> Commit-Queue: Chris Sosa <sosa@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
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_unittest.cc
|
81018e089aedb07d806f5e6a18dc44e359a6fc06 |
|
31-Jul-2013 |
Don Garrett <dgarrett@google.com> |
Correctly report firmware update failure if RO needs update. If the RO Firmware needs updating but can't be because it's really RO, then report a new erro code (43) back to Omaha. This normally only happens during board bringup when the RO firmware is locked prematurely. We want to know these devices exist so we can replace them. BUG=chromium:218555 TEST=Build/unittests. Did NOT test on hardware with bug. Change-Id: I383a999f1b175c378bef936c55d87565d8113336 Reviewed-on: https://gerrit.chromium.org/gerrit/63841 Commit-Queue: Don Garrett <dgarrett@chromium.org> Reviewed-by: Don Garrett <dgarrett@chromium.org> Tested-by: Don Garrett <dgarrett@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
569c42413bed641f297d8e0751a04574d04d9dc7 |
|
24-Jul-2013 |
Alex Deymo <deymo@chromium.org> |
Don't send metrics on update_engine restart without reboot. Certain operations are performed on update_engine start that are intended to be performed only right after boot. For example, when an update is applied, a few metrics are sent during the next reboot when update_engine starts. If the update is applied and update_engine crashes before reboot, the new update_engine will send the metrics as if the machine was rebooted. This patch avoids this problem checking the SystemState::system_rebooted() method. BUG=chromium:260990 TEST=unittests Change-Id: Ib360b1886db38e3abd926455edfa1eb657b2d621 Reviewed-on: https://gerrit.chromium.org/gerrit/63227 Reviewed-by: Gilad Arnold <garnold@chromium.org> Tested-by: Alex Deymo <deymo@chromium.org> Commit-Queue: Alex Deymo <deymo@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
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_unittest.cc
|
29b51d980038eb5a9b01861b601ba2e9730c9458 |
|
10-Jul-2013 |
Alex Deymo <deymo@chromium.org> |
Add Installer.[Full]PayloadAttemptNumber This patch adds two new metrics with the attempt number of the current payload. The difference with other similar metrics, like Installer.AttemptsCount.Total is that this metric is send every time the PayloadAttemptNumber is incremented, tracking also abandoned payload attempts. BUG=chromium:225973 TEST=cros_workon_make update_engine --test Change-Id: I96828fdf0512bac0e04c63a40383ac46143c5908 Reviewed-on: https://gerrit.chromium.org/gerrit/61344 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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
dbd9ea2ad94c3d1ac3e9fdac66c4b5ed11c7cf22 |
|
23-Apr-2013 |
Jay Srinivasan <jaysri@chromium.org> |
Add DownloadSourcesUsed and DownloadOverheadPercentage metrics. DownloadSourcesUsed: This metric will tell us the various combinations of the protocols and servers that were used in completing the download for each successful update attempt. DownloadOverheadPercentage: This metric will indicate how efficient our download mechanisms are by calculating the overhead we incurred as a percentage of the number of bytes that were actually needed to do the update successfully. BUG=chromium:225953 TEST=Unit Tests added, chrome://histograms shows new metrics correctly. Change-Id: Ic1e9547a9a27e1aad53f7e30c70d822820d2c60f Reviewed-on: https://gerrit.chromium.org/gerrit/48856 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_unittest.cc
|
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_unittest.cc
|
f413fe59759c73d6a5624c2158260b4302d01fe2 |
|
22-Apr-2013 |
David Zeuthen <zeuthen@chromium.org> |
Add unit tests for duration metrics As a side-effect, move utils::GetMonotonicTime() into the newly added ClockInterface type. BUG=None TEST=Unit tests pass Change-Id: I972a7e4ba37b63f96348fbeda901697b8ba2fc05 Reviewed-on: https://gerrit.chromium.org/gerrit/48814 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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
d29695df35b7192faef4009d42a62c37bdd90a8f |
|
09-Apr-2013 |
Jay Srinivasan <jaysri@chromium.org> |
Refactoring: Move prefs constants out to the constants.h/cc Adding/removing the set of keys used by various parts of the Update Engine code does not affect the implementation of the prefs module, hence separating them. BUG=chromium:229090 TEST=Unit tests pass. Change-Id: Id774b726a47b461e563e2e413527054e4da0c012 Reviewed-on: https://gerrit.chromium.org/gerrit/47593 Reviewed-by: Gilad Arnold <garnold@chromium.org> Tested-by: Jay Srinivasan <jaysri@chromium.org> Commit-Queue: Jay Srinivasan <jaysri@chromium.org>
/system/update_engine/payload_state_unittest.cc
|
1c0fe79c7ef2b43946d756b54c8505d2bf48b93b |
|
29-Mar-2013 |
Jay Srinivasan <jaysri@chromium.org> |
Cancel the current download if user chooses a different channel. In my earlier CL, to keep the implementation simple, we disallowed changing a channel until the previous change completed in its entirety. Given that the UI is not going to be updated for M27, such a restriction turned out to be very confusing when playing around with channel changing. So, we decided to implement a simple form of canceling the download if the user selected a different channel while we're downloading the bits. This implementation can easily be extended to support a general form of cancel in the future, if required. This CL also adds validation of libchromeos API calls when interpreting the policy values. It also cleans up some bogus error messages that were logged earlier when we abort a download. BUG=chromium:222617 TEST=All scenarios pass on ZGB. Unit Tests pass. Change-Id: I7cd691fe461d9ce47314299f6e2598944650ee33 Reviewed-on: https://gerrit.chromium.org/gerrit/46095 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_unittest.cc
|
ae4697c073b84b260990a141acd53c6806da0708 |
|
19-Mar-2013 |
Jay Srinivasan <jaysri@chromium.org> |
Enhanced channel changing behavior This CL adds a new DBUS API to UpdateEngine called SetTargetChannel to change the current channel of the device with an option to indicate whether to do eventually or immediately. The API will be called with the option to do it immediately in a subsequent CL in Chrome UI. For now the old API (set_track) has been wired up to call the new API to produce the old behavior (i.e. change eventually). The old API will be removed after Chrome UI code stops using it. It's the UI's responsibility to ask the user for confirmation for the powerwash that may happen in some cases and call the API with the appropriate value whether or not the powerwash should happen. For now, we're restricting the changing of channels to only those devices that are on canary-channel or running test builds. This restriction will be lifted off once the UI work is ready to give warning to the users about the powerwash that may happen when they move to a more stable channel. We also enforce ReleaseChannelDelegated and ReleaseChannel policies correctly now as follows: * If ReleaseChannelDelegated is false, SetTargetChannel will fail as we need to honor (only) the ReleaseChannel value in this case. * If ReleaseChannelDelegated is true, we'll allow the SetTargetChannel call to specify. In this case, we'll ignore the value of ReleaseChannel, if any. BUG=chromium-os:39095 TEST=Tested on ZGB by going from canary to dev-channel with and without powerwash. TEST=Existing unit tests have been updated and they pass. TEST=New unit tests have been added. Change-Id: Ifbf806a06e1c30d2f318e94d73735d1812049abd Reviewed-on: https://gerrit.chromium.org/gerrit/44619 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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|
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_unittest.cc
|