diff --git a/enterprise/reporting/reporting.go b/enterprise/reporting/reporting.go index 8368410d13..d444e99f66 100644 --- a/enterprise/reporting/reporting.go +++ b/enterprise/reporting/reporting.go @@ -139,6 +139,18 @@ func (r *DefaultReporter) DatabaseSyncer(c types.SyncerConfig) types.ReportingSy if err != nil { panic(fmt.Errorf("could not run reports migrations: %w", err)) } + + m = &migrator.Migrator{ + Handle: dbHandle, + MigrationsTable: "reports_runalways_migrations", + RunAlways: true, + } + templateData := map[string]interface{}{ + "config": config.Default, + } + if err := m.MigrateFromTemplates("reports_always", templateData); err != nil { + panic(fmt.Errorf("could not run reports_always migrations: %w", err)) + } r.syncers[c.ConnInfo] = &types.SyncSource{SyncerConfig: c, DbHandle: dbHandle} if !config.GetBool("Reporting.syncer.enabled", true) { diff --git a/services/sql-migrator/migrator_test.go b/services/sql-migrator/migrator_test.go index 2d6b335f14..2ce692acc3 100644 --- a/services/sql-migrator/migrator_test.go +++ b/services/sql-migrator/migrator_test.go @@ -8,6 +8,7 @@ import ( "github.com/ory/dockertest/v3" "github.com/stretchr/testify/require" + "github.com/rudderlabs/rudder-go-kit/config" "github.com/rudderlabs/rudder-go-kit/testhelper/docker/resource" migrator "github.com/rudderlabs/rudder-server/services/sql-migrator" "github.com/rudderlabs/rudder-server/sql/migrations" @@ -42,9 +43,34 @@ func TestMigrate(t *testing.T) { MigrationsTable: fmt.Sprintf("migrations_%s", dir), Handle: postgre.DB, } - - err := m.Migrate(dir) + var err error + if strings.HasPrefix(dir, "reports_always") { + err = m.MigrateFromTemplates("reports_always", map[string]interface{}{ + "config": config.Default, + }) + } else { + err = m.Migrate(dir) + } require.NoError(t, err) }) } + + t.Run("validate if autovacuum_vacuum_cost_limit is being set", func(t *testing.T) { + query := "select reloptions from pg_class where relname = 'reports';" + var value interface{} + require.NoError(t, postgre.DB.QueryRow(query).Scan(&value)) + require.Nil(t, value) // value should be nil if config is not set + config.Set("Reporting.autoVacuumCostLimit", 300) + m := migrator.Migrator{ + MigrationsTable: "migrations_reports_always", + Handle: postgre.DB, + RunAlways: true, + } + require.NoError(t, m.MigrateFromTemplates("reports_always", map[string]interface{}{ + "config": config.Default, + })) + var costLimit string + require.NoError(t, postgre.DB.QueryRow(query).Scan(&costLimit)) + require.Equal(t, "{autovacuum_vacuum_cost_limit=300}", costLimit) // value should be set to 300 + }) } diff --git a/sql/migrations/reports_always/000006_alter_reports_autovacuum.up.tmpl b/sql/migrations/reports_always/000006_alter_reports_autovacuum.up.tmpl new file mode 100644 index 0000000000..c5518f4f66 --- /dev/null +++ b/sql/migrations/reports_always/000006_alter_reports_autovacuum.up.tmpl @@ -0,0 +1,3 @@ +{{ if .config.IsSet "Reporting.autoVacuumCostLimit" }} + ALTER TABLE reports SET (autovacuum_vacuum_cost_limit = {{ .config.MustGetInt "Reporting.autoVacuumCostLimit" }}); +{{ end }} \ No newline at end of file