Remove UsageStats files older than 2 years.

As a privacy improvement, do not store usage stats data that is older
than 2 years. Previously, stats were kept for 3 years.

This will also help reduce the storage taken up by stats and improve the
performance of query stats API calls which require files to be read from
disk since the number of files read are significantly less.

Bug: 148524623
Test: atest UsageStatsDatabaseTest
Change-Id: I159914a87ba4137f0f3d869c69abf3b16ae77657
This commit is contained in:
Varun Shah
2020-02-25 19:48:13 -08:00
parent bc725e10d4
commit 606a7f9a5e

View File

@@ -178,7 +178,12 @@ public class UsageStatsDatabase {
}
checkVersionAndBuildLocked();
indexFilesLocked();
// Perform a pruning of older files if there was an upgrade, otherwise do indexing.
if (mUpgradePerformed) {
prune(currentTimeMillis); // prune performs an indexing when done
} else {
indexFilesLocked();
}
// Delete files that are in the future.
for (TimeSparseArray<AtomicFile> files : mSortedStatFiles) {
@@ -914,26 +919,31 @@ public class UsageStatsDatabase {
*/
public void prune(final long currentTimeMillis) {
synchronized (mLock) {
// prune all files older than 2 years in the yearly directory
mCal.setTimeInMillis(currentTimeMillis);
mCal.addYears(-3);
mCal.addYears(-2);
pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_YEARLY],
mCal.getTimeInMillis());
// prune all files older than 6 months in the monthly directory
mCal.setTimeInMillis(currentTimeMillis);
mCal.addMonths(-6);
pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_MONTHLY],
mCal.getTimeInMillis());
// prune all files older than 4 weeks in the weekly directory
mCal.setTimeInMillis(currentTimeMillis);
mCal.addWeeks(-4);
pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_WEEKLY],
mCal.getTimeInMillis());
// prune all files older than 10 days in the weekly directory
mCal.setTimeInMillis(currentTimeMillis);
mCal.addDays(-10);
pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_DAILY],
mCal.getTimeInMillis());
// prune chooser counts for all usage stats older than the defined period
mCal.setTimeInMillis(currentTimeMillis);
mCal.addDays(-SELECTION_LOG_RETENTION_LEN);
for (int i = 0; i < mIntervalDirs.length; ++i) {