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