Extract helper for running Attribution Reporting DB migrations
The helper handles transactions and setting version numbers. Change-Id: I0865aa79363455c155f9b8c8392ead695a013a7c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4233403 Quick-Run: Andrew Paseltiner <apaseltiner@chromium.org> Commit-Queue: Andrew Paseltiner <apaseltiner@chromium.org> Reviewed-by: Nan Lin <linnan@chromium.org> Cr-Commit-Position: refs/heads/main@{#1102921}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
98c8470aa0
commit
c1108a30eb
@ -5,6 +5,7 @@
|
||||
#include "content/browser/attribution_reporting/attribution_storage_sql_migrations.h"
|
||||
|
||||
#include "base/check.h"
|
||||
#include "base/functional/function_ref.h"
|
||||
#include "base/metrics/histogram_functions.h"
|
||||
#include "base/time/time.h"
|
||||
#include "components/aggregation_service/aggregation_service.mojom.h"
|
||||
@ -35,12 +36,27 @@ namespace {
|
||||
// transactions make it more likely that we'll make forward progress each time
|
||||
// Chrome stops.
|
||||
|
||||
bool MigrateToVersion36(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
[[nodiscard]] bool MaybeMigrate(
|
||||
sql::Database* db,
|
||||
sql::MetaTable* meta_table,
|
||||
int old_version,
|
||||
base::FunctionRef<bool(sql::Database*)> migrate) {
|
||||
DCHECK(db);
|
||||
DCHECK(meta_table);
|
||||
|
||||
if (meta_table->GetVersionNumber() != old_version) {
|
||||
return true;
|
||||
}
|
||||
|
||||
sql::Transaction transaction(db);
|
||||
|
||||
return transaction.Begin() && //
|
||||
migrate(db) && //
|
||||
SetVersionNumbers(meta_table, old_version + 1) && //
|
||||
transaction.Commit();
|
||||
}
|
||||
|
||||
bool To36(sql::Database* db) {
|
||||
static constexpr char kDropOldIndexSql[] = "DROP INDEX sources_by_origin";
|
||||
if (!db->Execute(kDropOldIndexSql)) {
|
||||
return false;
|
||||
@ -54,15 +70,10 @@ bool MigrateToVersion36(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 36) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion37(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To37(sql::Database* db) {
|
||||
static constexpr char kNewDedupKeyTableSql[] =
|
||||
"CREATE TABLE new_dedup_keys("
|
||||
"source_id INTEGER NOT NULL,"
|
||||
@ -98,15 +109,10 @@ bool MigrateToVersion37(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 37) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion38(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To38(sql::Database* db) {
|
||||
static constexpr char kNewSourceTableSql[] =
|
||||
"CREATE TABLE new_sources("
|
||||
"source_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
|
||||
@ -195,15 +201,10 @@ bool MigrateToVersion38(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 38) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion39(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To39(sql::Database* db) {
|
||||
// Create the new aggregatable_report_metadata table with
|
||||
// aggregation_coordinator. This follows the steps documented at
|
||||
// https://sqlite.org/lang_altertable.html#otheralter. Other approaches, like
|
||||
@ -279,15 +280,10 @@ bool MigrateToVersion39(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 39) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion40(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To40(sql::Database* db) {
|
||||
// Create the new aggregatable_contributions table with desired primary-key
|
||||
// structure.
|
||||
static constexpr char kCreateNewTableSql[] =
|
||||
@ -325,15 +321,10 @@ bool MigrateToVersion40(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 40) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion41(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To41(sql::Database* db) {
|
||||
static constexpr char kAddAttestationHeaderColumnSql[] =
|
||||
"ALTER TABLE aggregatable_report_metadata "
|
||||
"ADD COLUMN attestation_token TEXT";
|
||||
@ -341,15 +332,10 @@ bool MigrateToVersion41(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 41) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion42(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To42(sql::Database* db) {
|
||||
static constexpr char kRenameDestinationOriginSql[] =
|
||||
"ALTER TABLE rate_limits "
|
||||
"RENAME COLUMN destination_origin TO context_origin";
|
||||
@ -371,15 +357,10 @@ bool MigrateToVersion42(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 42) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion43(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To43(sql::Database* db) {
|
||||
static constexpr char kRenameExpiryTimeSql[] =
|
||||
"ALTER TABLE rate_limits "
|
||||
"RENAME COLUMN expiry_time TO source_expiry_or_attribution_time";
|
||||
@ -396,15 +377,10 @@ bool MigrateToVersion43(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 43) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion44(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To44(sql::Database* db) {
|
||||
{
|
||||
static constexpr char kConversionTableSql[] =
|
||||
"CREATE TABLE new_event_level_reports("
|
||||
@ -526,15 +502,10 @@ bool MigrateToVersion44(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
}
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 44) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion45(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To45(sql::Database* db) {
|
||||
static constexpr char kRenameSql[] =
|
||||
"ALTER TABLE event_level_reports "
|
||||
"RENAME COLUMN destination_origin TO context_origin";
|
||||
@ -542,20 +513,15 @@ bool MigrateToVersion45(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 45) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MigrateToVersion46(sql::Database* db, sql::MetaTable* meta_table) {
|
||||
sql::Transaction transaction(db);
|
||||
if (!transaction.Begin()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool To46(sql::Database* db) {
|
||||
if (!db->Execute("ALTER TABLE sources DROP COLUMN destination_origin")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return SetVersionNumbers(meta_table, 46) && transaction.Commit();
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@ -570,62 +536,20 @@ bool UpgradeAttributionStorageSqlSchema(sql::Database* db,
|
||||
start_timestamp = base::ThreadTicks::Now();
|
||||
}
|
||||
|
||||
if (meta_table->GetVersionNumber() == 35) {
|
||||
if (!MigrateToVersion36(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
bool ok = MaybeMigrate(db, meta_table, 35, &To36) &&
|
||||
MaybeMigrate(db, meta_table, 36, &To37) &&
|
||||
MaybeMigrate(db, meta_table, 37, &To38) &&
|
||||
MaybeMigrate(db, meta_table, 38, &To39) &&
|
||||
MaybeMigrate(db, meta_table, 39, &To40) &&
|
||||
MaybeMigrate(db, meta_table, 40, &To41) &&
|
||||
MaybeMigrate(db, meta_table, 41, &To42) &&
|
||||
MaybeMigrate(db, meta_table, 42, &To43) &&
|
||||
MaybeMigrate(db, meta_table, 43, &To44) &&
|
||||
MaybeMigrate(db, meta_table, 44, &To45) &&
|
||||
MaybeMigrate(db, meta_table, 45, &To46);
|
||||
if (!ok) {
|
||||
return false;
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 36) {
|
||||
if (!MigrateToVersion37(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 37) {
|
||||
if (!MigrateToVersion38(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 38) {
|
||||
if (!MigrateToVersion39(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 39) {
|
||||
if (!MigrateToVersion40(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 40) {
|
||||
if (!MigrateToVersion41(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 41) {
|
||||
if (!MigrateToVersion42(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 42) {
|
||||
if (!MigrateToVersion43(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 43) {
|
||||
if (!MigrateToVersion44(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 44) {
|
||||
if (!MigrateToVersion45(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (meta_table->GetVersionNumber() == 45) {
|
||||
if (!MigrateToVersion46(db, meta_table)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Add similar if () blocks for new versions here.
|
||||
|
||||
if (base::ThreadTicks::IsSupported()) {
|
||||
base::UmaHistogramMediumTimes("Conversions.Storage.MigrationTime",
|
||||
|
Reference in New Issue
Block a user