Bug 1290481 - P9: Implement a function to get overall padding size for an origin from cache.sqlite. r=bkelly

MozReview-Commit-ID: KlVsaGhpABk

--HG--
extra : rebase_source : a6956325cfdf6f11a4bcf66d41b8d4706ae4e1e7
This commit is contained in:
Tom Tung 2017-07-18 18:58:56 +08:00
parent 8eb68da410
commit 67d7727ec0
3 changed files with 54 additions and 2 deletions

View File

@ -698,6 +698,37 @@ FindOrphanedCacheIds(mozIStorageConnection* aConn,
return rv;
}
nsresult
FindOverallPaddingSize(mozIStorageConnection* aConn,
int64_t* aOverallPaddingSizeOut)
{
MOZ_DIAGNOSTIC_ASSERT(aConn);
MOZ_DIAGNOSTIC_ASSERT(aOverallPaddingSizeOut);
nsCOMPtr<mozIStorageStatement> state;
nsresult rv = aConn->CreateStatement(NS_LITERAL_CSTRING(
"SELECT response_padding_size FROM entries "
"WHERE response_padding_size IS NOT NULL;"
), getter_AddRefs(state));
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
int64_t overallPaddingSize = 0;
bool hasMoreData = false;
while (NS_SUCCEEDED(state->ExecuteStep(&hasMoreData)) && hasMoreData) {
int64_t padding_size = 0;
rv = state->GetInt64(0, &padding_size);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
MOZ_DIAGNOSTIC_ASSERT(padding_size >= 0);
MOZ_DIAGNOSTIC_ASSERT(INT64_MAX - padding_size >= overallPaddingSize);
overallPaddingSize += padding_size;
}
*aOverallPaddingSizeOut = overallPaddingSize;
return rv;
}
nsresult
GetKnownBodyIds(mozIStorageConnection* aConn, nsTArray<nsID>& aBodyIdListOut)
{

View File

@ -54,6 +54,10 @@ nsresult
FindOrphanedCacheIds(mozIStorageConnection* aConn,
nsTArray<CacheId>& aOrphanedListOut);
nsresult
FindOverallPaddingSize(mozIStorageConnection* aConn,
int64_t* aOverallPaddingSizeOut);
nsresult
GetKnownBodyIds(mozIStorageConnection* aConn, nsTArray<nsID>& aBodyIdListOut);

View File

@ -809,7 +809,10 @@ LockedMaybeUpdateDirectoryPaddingFile(nsIFile* aBaseDir,
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
}
// XXXtt: will have a function to retore from db.
// We don't need to add the aIncreaseSize or aDecreaseSize here, because
// it's already encompassed within the database.
rv = db::FindOverallPaddingSize(aConn, &currentPaddingSize);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
} else {
if (aIncreaseSize > 0) {
MOZ_DIAGNOSTIC_ASSERT(INT64_MAX - currentPaddingSize >= aIncreaseSize);
@ -820,6 +823,14 @@ LockedMaybeUpdateDirectoryPaddingFile(nsIFile* aBaseDir,
MOZ_DIAGNOSTIC_ASSERT(currentPaddingSize >= aDecreaseSize);
currentPaddingSize -= aDecreaseSize;
}
#ifdef DEBUG
int64_t paddingSizeFromDB = 0;
rv = db::FindOverallPaddingSize(aConn, &paddingSizeFromDB);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
MOZ_DIAGNOSTIC_ASSERT(paddingSizeFromDB == currentPaddingSize);
#endif // DEBUG
}
MOZ_DIAGNOSTIC_ASSERT(currentPaddingSize >= 0);
@ -882,7 +893,13 @@ LockedDirectoryPaddingRestore(nsIFile* aBaseDir, mozIStorageConnection* aConn)
rv = LockedDirectoryPaddingDeleteFile(aBaseDir, DirPaddingFile::FILE);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
// XXXtt: will have a function to retore from db.
int64_t paddingSize = 0;
rv = db::FindOverallPaddingSize(aConn, &paddingSize);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
MOZ_DIAGNOSTIC_ASSERT(paddingSize >= 0);
LockedDirectoryPaddingWrite(aBaseDir, DirPaddingFile::FILE, paddingSize);
return rv;
}