Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(815)

Unified Diff: components/previews/core/previews_opt_out_store_sql.cc

Issue 2448313002: Adding unit tests for PreviewsOptOutStoreSQL (Closed)
Patch Set: tbansal Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/previews/core/previews_opt_out_store_sql.cc
diff --git a/components/previews/core/previews_opt_out_store_sql.cc b/components/previews/core/previews_opt_out_store_sql.cc
index 6feb4a16ffa5ed3a4f0d7d8b6cca03d52efae9ee..22ba0a0f5f204b7a227da159756bc478752ddfa3 100644
--- a/components/previews/core/previews_opt_out_store_sql.cc
+++ b/components/previews/core/previews_opt_out_store_sql.cc
@@ -1,49 +1,71 @@
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/previews/core/previews_opt_out_store_sql.h"
+#include <string>
+
#include "base/bind.h"
#include "base/bind_helpers.h"
+#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/metrics/histogram_macros.h"
#include "base/sequenced_task_runner.h"
+#include "base/strings/string_number_conversions.h"
#include "base/threading/thread_task_runner_handle.h"
#include "components/previews/core/previews_black_list.h"
#include "components/previews/core/previews_black_list_item.h"
#include "components/previews/core/previews_experiments.h"
#include "sql/connection.h"
#include "sql/recovery.h"
#include "sql/statement.h"
#include "sql/transaction.h"
namespace previews {
namespace {
+// Command line switch to change the previews per row DB size.
+const char kMaxRowsPerHost[] = "previews-max-opt-out-rows-per-host";
+
+// Command line switch to change the previews DB size.
+const char kMaxRows[] = "previews-max-opt-out-rows";
+
+// Returns the maximum number of table rows allowed per host for the previews
+// opt out store. This is enforced during insertion of new navigation entries.
+int MaxRowsPerHostInOptOutDB() {
+ std::string max_rows =
+ base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+ kMaxRowsPerHost);
+ int value;
+ return base::StringToInt(max_rows, &value) ? value : 32;
+}
+
+// Returns the maximum number of table rows allowed for the previews opt out
+// store. This is enforced during load time; thus the database can grow
+// larger than this temporarily.
+int MaxRowsInOptOutDB() {
+ std::string max_rows =
+ base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(kMaxRows);
+ int value;
+ return base::StringToInt(max_rows, &value) ? value : 3200;
+}
+
// This is a macro instead of a const, so it can be used inline in other SQL
// statements below.
#define PREVIEWS_TABLE_NAME "previews_v1"
-// The maximum number of entries allowed per host. Entries are evicted based on
-// entry time.
-const int kMaxRowsPerHost = 32;
-
-// The maximum number of entries allowed in the data base. Entries are evicted
-// based on entry time.
-const int kMaxRowsInDB = 3200;
-
void CreateSchema(sql::Connection* db) {
const char kSql[] = "CREATE TABLE IF NOT EXISTS " PREVIEWS_TABLE_NAME
" (host_name VARCHAR NOT NULL,"
" time INTEGER NOT NULL,"
" opt_out INTEGER NOT NULL,"
" type INTEGER NOT NULL,"
" PRIMARY KEY(host_name, time DESC, opt_out, type))";
if (!db->Execute(kSql))
return;
}
@@ -122,34 +144,34 @@ void AddPreviewNavigationToDataBase(sql::Connection* db,
statement_insert.BindInt64(1, now.ToInternalValue());
statement_insert.BindBool(2, opt_out);
statement_insert.BindInt(3, static_cast<int>(type));
statement_insert.Run();
}
// Removes entries for |host_name| if the per-host row limit is exceeded.
// Removes entries if per data base row limit is exceeded.
void MaybeEvictHostEntryFromDataBase(sql::Connection* db,
const std::string& host_name) {
- // Delete the oldest entries if there are more than |kMaxRowsPerHost| for
- // |host_name|.
+ // Delete the oldest entries if there are more than |MaxRowsPerHostInOptOutDB|
+ // for |host_name|.
// DELETE ... LIMIT -1 OFFSET x means delete all but the first x entries.
const char kSqlDeleteByHost[] = "DELETE FROM " PREVIEWS_TABLE_NAME
" WHERE ROWID IN"
" (SELECT ROWID from " PREVIEWS_TABLE_NAME
" WHERE host_name == ?"
" ORDER BY time DESC"
" LIMIT -1 OFFSET ?)";
sql::Statement statement_delete_by_host(
db->GetCachedStatement(SQL_FROM_HERE, kSqlDeleteByHost));
statement_delete_by_host.BindString(0, host_name);
- statement_delete_by_host.BindInt(1, kMaxRowsPerHost);
+ statement_delete_by_host.BindInt(1, MaxRowsPerHostInOptOutDB());
statement_delete_by_host.Run();
}
void LoadBlackListFromDataBase(
sql::Connection* db,
scoped_refptr<base::SingleThreadTaskRunner> runner,
LoadBlackListCallback callback) {
// Gets the table sorted by host and time. Limits the number of hosts using
// most recent opt_out time as the limiting function.
const char kSql[] =
@@ -173,32 +195,32 @@ void LoadBlackListFromDataBase(
// Allows the internal logic of PreviewsBlackListItem to determine how to
// evict entries when there are more than
// |StoredHistoryLengthForBlackList()| for the host.
black_list_item->AddPreviewNavigation(
statement.ColumnBool(2),
base::Time::FromInternalValue(statement.ColumnInt64(1)));
}
UMA_HISTOGRAM_COUNTS_10000("Previews.OptOut.DBRowCount", count);
- if (count > kMaxRowsInDB) {
+ if (count > MaxRowsInOptOutDB()) {
// Delete the oldest entries if there are more than |kMaxEntriesInDB|.
// DELETE ... LIMIT -1 OFFSET x means delete all but the first x entries.
const char kSqlDeleteByDBSize[] = "DELETE FROM " PREVIEWS_TABLE_NAME
" WHERE ROWID IN"
" (SELECT ROWID from " PREVIEWS_TABLE_NAME
" ORDER BY time DESC"
" LIMIT -1 OFFSET ?)";
sql::Statement statement_delete(
db->GetCachedStatement(SQL_FROM_HERE, kSqlDeleteByDBSize));
- statement_delete.BindInt(0, kMaxRowsInDB);
+ statement_delete.BindInt(0, MaxRowsInOptOutDB());
statement_delete.Run();
}
runner->PostTask(FROM_HERE,
base::Bind(callback, base::Passed(&black_list_item_map)));
}
// Synchronous implementations, these are run on the background thread
// and actually do the work to access the SQL data base.
void LoadBlackListSync(sql::Connection* db,
« no previous file with comments | « components/previews/core/previews_black_list_item.cc ('k') | components/previews/core/previews_opt_out_store_sql_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698