bug 1047811 - Part 2 - Use async transactions in Places. r=Mano

This commit is contained in:
Marco Bonardo 2014-09-10 12:46:17 +02:00
parent 7731e21335
commit d494311332
3 changed files with 22 additions and 12 deletions

View File

@ -49,6 +49,9 @@
#define BYTES_PER_KIBIBYTE 1024
// How much time Sqlite can wait before returning a SQLITE_BUSY error.
#define DATABASE_BUSY_TIMEOUT_MS 100
// Old Sync GUID annotation.
#define SYNCGUID_ANNO NS_LITERAL_CSTRING("sync/guid")
@ -597,6 +600,10 @@ Database::InitSchema(bool* aDatabaseMigrated)
(void)mMainConn->SetGrowthIncrement(growthIncrementKiB * BYTES_PER_KIBIBYTE, EmptyCString());
}
nsAutoCString busyTimeoutPragma("PRAGMA busy_timeout = ");
busyTimeoutPragma.AppendInt(DATABASE_BUSY_TIMEOUT_MS);
(void)mMainConn->ExecuteSimpleSQL(busyTimeoutPragma);
// We use our functions during migration, so initialize them now.
rv = InitFunctions();
NS_ENSURE_SUCCESS(rv, rv);
@ -1210,8 +1217,6 @@ Database::MigrateV7Up()
return NS_ERROR_FILE_CORRUPTED;
}
mozStorageTransaction transaction(mMainConn, false);
// We need an index on lastModified to catch quickly last modified bookmark
// title for tag container's children. This will be useful for Sync, too.
bool lastModIndexExists = false;
@ -1391,7 +1396,7 @@ Database::MigrateV7Up()
NS_ENSURE_SUCCESS(rv, rv);
}
return transaction.Commit();
return NS_OK;
}
@ -1399,7 +1404,6 @@ nsresult
Database::MigrateV8Up()
{
MOZ_ASSERT(NS_IsMainThread());
mozStorageTransaction transaction(mMainConn, false);
nsresult rv = mMainConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
"DROP TRIGGER IF EXISTS moz_historyvisits_afterinsert_v1_trigger"));
@ -1445,7 +1449,7 @@ Database::MigrateV8Up()
NS_ENSURE_SUCCESS(rv, rv);
}
return transaction.Commit();
return NS_OK;
}
@ -1453,7 +1457,6 @@ nsresult
Database::MigrateV9Up()
{
MOZ_ASSERT(NS_IsMainThread());
mozStorageTransaction transaction(mMainConn, false);
// Added in Bug 488966. The last_visit_date column caches the last
// visit date, this enhances SELECT performances when we
// need to sort visits by visit date.
@ -1485,7 +1488,7 @@ Database::MigrateV9Up()
NS_ENSURE_SUCCESS(rv, rv);
}
return transaction.Commit();
return NS_OK;
}

View File

@ -2267,7 +2267,9 @@ nsresult
nsNavHistory::BeginUpdateBatch()
{
if (mBatchLevel++ == 0) {
mBatchDBTransaction = new mozStorageTransaction(mDB->MainConn(), false);
mBatchDBTransaction = new mozStorageTransaction(mDB->MainConn(), false,
mozIStorageConnection::TRANSACTION_DEFERRED,
true);
NOTIFY_OBSERVERS(mCanNotify, mCacheObservers, mObservers,
nsINavHistoryObserver, OnBeginUpdateBatch());
@ -2332,7 +2334,9 @@ nsNavHistory::RemovePagesInternal(const nsCString& aPlaceIdsQueryString)
if (aPlaceIdsQueryString.IsEmpty())
return NS_OK;
mozStorageTransaction transaction(mDB->MainConn(), false);
mozStorageTransaction transaction(mDB->MainConn(), false,
mozIStorageConnection::TRANSACTION_DEFERRED,
true);
// Delete all visits for the specified place ids.
nsresult rv = mDB->MainConn()->ExecuteSimpleSQL(
@ -2724,7 +2728,9 @@ nsNavHistory::RemoveVisitsByTimeframe(PRTime aBeginTime, PRTime aEndTime)
// force a full refresh calling onEndUpdateBatch (will call Refresh())
UpdateBatchScoper batch(*this); // sends Begin/EndUpdateBatch to observers
mozStorageTransaction transaction(mDB->MainConn(), false);
mozStorageTransaction transaction(mDB->MainConn(), false,
mozIStorageConnection::TRANSACTION_DEFERRED,
true);
// Delete all visits within the timeframe.
nsCOMPtr<mozIStorageStatement> deleteVisitsStmt = mDB->GetStatement(

View File

@ -11,7 +11,8 @@ added or removed and also the maintenance task to fix wrong counts.
const T_URI = NetUtil.newURI("https://www.mozilla.org/firefox/nightly/firstrun/");
function* getForeignCountForURL(conn, url){
function* getForeignCountForURL(conn, url) {
yield promiseAsyncUpdates();
let url = url instanceof Ci.nsIURI ? url.spec : url;
let rows = yield conn.executeCached(
"SELECT foreign_count FROM moz_places WHERE url = :t_url ", { t_url: url });
@ -106,4 +107,4 @@ add_task(function* add_remove_tags_test(){
// Check foreign count is set to 0 when all tags are removed
PlacesUtils.tagging.untagURI(T_URI, ["test tag", "one", "two"]);
Assert.equal((yield getForeignCountForURL(conn, T_URI)), 0);
});
});