d712f0ccc120357e1267a04ac6de9dd732b27e76 |
|
03-May-2017 |
Jeff Sharkey <jsharkey@android.com> |
Clear cached files on external storage. When clearing cached files belonging to an app, include any cached files on external storage. Since we need to keep sdcardfs in the loop about any file deletions, we always mutate by going through the sdcardfs layer instead of behind its back. Test: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest Bug: 37486230, 37566983, 37913442, 37914374 Change-Id: If174bf7eaf682da83cf0ab1b4938fe9a5956d464
/frameworks/native/cmds/installd/CacheItem.cpp
|
ed909ae8db2f44ce7fe7003c6fee457f13669702 |
|
23-Mar-2017 |
Jeff Sharkey <jsharkey@android.com> |
Follow "atomic" to "group" refactoring. Remove noisy logging about UIDs that are relying on default cache quota of 64MiB. Move away from yucky old statfs() and use statvfs() instead. Test: /data/nativetest/installd_cache_test/installd_cache_test Bug: 35812899, 35684969, 36482620 Change-Id: I3d68da97eac2ebcda489bdf9d27061cac5b3f7cc
/frameworks/native/cmds/installd/CacheItem.cpp
|
b26786d647b624498c11405075e5223d1853f30a |
|
12-Mar-2017 |
Jeff Sharkey <jsharkey@android.com> |
Finer-grained locking for size operations. Disk space measurements are read-only and don't perform mutations, so other installd operations shouldn't block them. If there's an ongoing parallel operation (such as a dexopt) that could race and skew the results, that's no different than an actively running app changing it's disk usage during the measurement. This change also allows measurements to happen in parallel, so we can no longer rely on getcwd() being stable, which means all fts(3) users now need to use FTS_NOCHDIR. Bug: 36032444, 35706513 Test: runtest -x frameworks/base/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java Change-Id: I67d303d3ecce148052d41444cef67381b1d34ab0
/frameworks/native/cmds/installd/CacheItem.cpp
|
871a8f236ef2a055b9955b47a342b2c44c020ef7 |
|
22-Feb-2017 |
Jeff Sharkey <jsharkey@android.com> |
Logic for atmoic/tombstone behavior; split mode. Flesh out logic for cache directories that request new atomic and/or tombstone clearing behaviors. Atomic directories are considered for deletion as a single all-or-nothing unit, and tombstone directories truncate any removed files instead of unlinking them. Since these behaviors can be mixed together, add local tests that quickly verify several different permutations. Reduce memory footprint of CacheItem objects by only storing name and pointer to parent (instead of full path). Fix ordering bug by switching to std::stable_sort. Add "V2_DEFY_QUOTA" flag so we can split clearing into two distinct phases: clearing data for apps above their quotas, and then pushing deeper by clearing data for apps below their quotas. Test: adb shell /data/nativetest64/installd_cache_test/installd_cache_test Bug: 34692014, 33811826 Change-Id: I156897de1d1d1c371b2b837128b2e286bf33d40d
/frameworks/native/cmds/installd/CacheItem.cpp
|
88ddd94834dae9c5862a07a1e4432b171b2f5d9f |
|
18-Jan-2017 |
Jeff Sharkey <jsharkey@android.com> |
First pass at updated cache clearing logic. The old clearing algorithm is very naive and it sorts all cached files globally by modified time. This sadly lets apps gamify the system by setting their modified times far in the future, and it's very expensive because it requires a global filesystem traversal to free up even the smallest amount of data. Instead, this CL introduces a much more fair cache clearing algorithm that deletes files from specific UIDs based on how much cache space that UID is using proportional to the space allocated to them. This new design has several nice properties: -- It uses the recently added quotactl() feature to rapidly target the apps that are using the most space. -- We only need to traverse the filesystem for UIDs that actively enter the crosshairs of the clearing algorithm. -- Disciplined apps who stay under their allocated quota will be the last to have their cached data cleared. -- This design can be easily adapted to support additional features such as atomic purging and tombstones. In summary, the new algorithm is extremely efficient when freeing up the typical small-to-medium amounts of disk space, and is only moderately less efficient than the old algorithm when forced to clear all cached data. Test: builds, boots, clearing strategy looks sane Bug: 33965858 Change-Id: I66f95089cb33f1add3f31fcf1082ab2469870fda
/frameworks/native/cmds/installd/CacheItem.cpp
|