diff options
author | Sami Hiltunen <shiltunen@gitlab.com> | 2021-05-27 13:55:10 +0300 |
---|---|---|
committer | Sami Hiltunen <shiltunen@gitlab.com> | 2021-07-12 12:09:38 +0300 |
commit | 77c84dd5b41ca2bd7d22aa5c6409bd043499f73e (patch) | |
tree | 599604b7506344d3fb54d16932d720f4f7e82809 | |
parent | fe6d52572ed4619191dbe73ade0b7baa4fceaafe (diff) |
Remove support for virtual storage scoped primaries in read-only metrics
This commit removes the support for virtual storage scoped primaries in the
read-only repository count metric to make future changes easier. Virtual
storage scoped primaries were deprecated in 13.12 and removed in 14.0.
Changelog: removed
-rw-r--r-- | cmd/praefect/main.go | 7 | ||||
-rw-r--r-- | internal/praefect/datastore/collector.go | 53 | ||||
-rw-r--r-- | internal/praefect/datastore/collector_test.go | 38 |
3 files changed, 13 insertions, 85 deletions
diff --git a/cmd/praefect/main.go b/cmd/praefect/main.go index 2418b8a90..a906ee21c 100644 --- a/cmd/praefect/main.go +++ b/cmd/praefect/main.go @@ -401,12 +401,7 @@ func run(cfgs []starter.Config, conf config.Config) error { metricsCollectors = append(metricsCollectors, transactionManager, coordinator, repl) if db != nil { prometheus.MustRegister( - datastore.NewRepositoryStoreCollector( - logger, - conf.VirtualStorageNames(), - db, - conf.Failover.ElectionStrategy == config.ElectionStrategyPerRepository, - ), + datastore.NewRepositoryStoreCollector(logger, conf.VirtualStorageNames(), db), ) } prometheus.MustRegister(metricsCollectors...) diff --git a/internal/praefect/datastore/collector.go b/internal/praefect/datastore/collector.go index 098c46dfb..3fdedc738 100644 --- a/internal/praefect/datastore/collector.go +++ b/internal/praefect/datastore/collector.go @@ -19,19 +19,17 @@ var descReadOnlyRepositories = prometheus.NewDesc( // RepositoryStoreCollector collects metrics from the RepositoryStore. type RepositoryStoreCollector struct { - log logrus.FieldLogger - db glsql.Querier - virtualStorages []string - repositoryScoped bool + log logrus.FieldLogger + db glsql.Querier + virtualStorages []string } // NewRepositoryStoreCollector returns a new collector. -func NewRepositoryStoreCollector(log logrus.FieldLogger, virtualStorages []string, db glsql.Querier, repositoryScoped bool) *RepositoryStoreCollector { +func NewRepositoryStoreCollector(log logrus.FieldLogger, virtualStorages []string, db glsql.Querier) *RepositoryStoreCollector { return &RepositoryStoreCollector{ - log: log.WithField("component", "RepositoryStoreCollector"), - db: db, - virtualStorages: virtualStorages, - repositoryScoped: repositoryScoped, + log: log.WithField("component", "RepositoryStoreCollector"), + db: db, + virtualStorages: virtualStorages, } } @@ -54,38 +52,8 @@ func (c *RepositoryStoreCollector) Collect(ch chan<- prometheus.Metric) { // queryMetrics queries the number of read-only repositories from the database. // A repository is in read-only mode when its primary storage is not on the latest // generation. -// -// There are two variants on the query: -// -// 1. virtualStorageScopedQuery considers virtual storage scoped primaries. Virtual storage's -// primary is stored in the `shard_primaries` table in the `node_name` column. -// 2. repositoryScopedQuery considers repository specific primaries. Repository scoped -// primaries are stored in the `primary` column in the `repositories` table. -// -// Both queries cross-reference the `repositories` and `storage_repositories` tables -// to see if the primary storage of the repository is on the latest generation. If not, -// it's added to the returned count. -// -// The query operating on virtual storage scoped primaries will be dropped once the migration -// to repository scoped primaries is finished. func (c *RepositoryStoreCollector) queryMetrics(ctx context.Context) (map[string]int, error) { - const virtualStorageScopedQuery = ` -SELECT repositories.virtual_storage, COUNT(*) -FROM repositories -LEFT JOIN shard_primaries ON - shard_primaries.shard_name = repositories.virtual_storage AND - shard_primaries.demoted = false -LEFT JOIN storage_repositories ON - repositories.virtual_storage = storage_repositories.virtual_storage AND - repositories.relative_path = storage_repositories.relative_path AND - shard_primaries.node_name = storage_repositories.storage -WHERE - COALESCE(storage_repositories.generation, -1) < repositories.generation AND - repositories.virtual_storage = ANY($1) -GROUP BY repositories.virtual_storage; - ` - - const repositoryScopedQuery = ` + const query = ` SELECT repositories.virtual_storage, COUNT(*) FROM repositories LEFT JOIN storage_repositories ON @@ -98,11 +66,6 @@ WHERE GROUP BY repositories.virtual_storage ` - query := virtualStorageScopedQuery - if c.repositoryScoped { - query = repositoryScopedQuery - } - rows, err := c.db.QueryContext(ctx, query, pq.StringArray(c.virtualStorages)) if err != nil { return nil, fmt.Errorf("query: %w", err) diff --git a/internal/praefect/datastore/collector_test.go b/internal/praefect/datastore/collector_test.go index 65248605e..edea5f409 100644 --- a/internal/praefect/datastore/collector_test.go +++ b/internal/praefect/datastore/collector_test.go @@ -3,7 +3,6 @@ package datastore import ( - "fmt" "strings" "testing" @@ -57,17 +56,6 @@ func TestRepositoryStoreCollector(t *testing.T) { }, } for virtualStorage, relativePaths := range state { - demoted := false - if virtualStorage == "no-primary" { - demoted = true - } - _, err := db.ExecContext(ctx, ` - INSERT INTO shard_primaries (shard_name, node_name, elected_by_praefect, elected_at, demoted) - VALUES ($1, 'vs-primary', 'not-needed', now(), $2) - `, virtualStorage, demoted, - ) - require.NoError(t, err) - for relativePath, storages := range relativePaths { if virtualStorage != "no-primary" { _, err := db.ExecContext(ctx, ` @@ -93,31 +81,13 @@ func TestRepositoryStoreCollector(t *testing.T) { virtualStorages = append(virtualStorages, vs) } - for _, tc := range []struct { - desc string - repositoryScoped bool - someReadOnlyCount int - }{ - { - desc: "repository scoped", - someReadOnlyCount: 1, - repositoryScoped: true, - }, - { - desc: "virtual storage scoped", - someReadOnlyCount: 2, - }, - } { - t.Run(tc.desc, func(t *testing.T) { - c := NewRepositoryStoreCollector(logrus.New(), virtualStorages, db, tc.repositoryScoped) - require.NoError(t, testutil.CollectAndCompare(c, strings.NewReader(fmt.Sprintf(` + c := NewRepositoryStoreCollector(logrus.New(), virtualStorages, db) + require.NoError(t, testutil.CollectAndCompare(c, strings.NewReader(` # HELP gitaly_praefect_read_only_repositories Number of repositories in read-only mode within a virtual storage. # TYPE gitaly_praefect_read_only_repositories gauge gitaly_praefect_read_only_repositories{virtual_storage="all-writable"} 0 gitaly_praefect_read_only_repositories{virtual_storage="no-records"} 0 gitaly_praefect_read_only_repositories{virtual_storage="no-primary"} 1 -gitaly_praefect_read_only_repositories{virtual_storage="some-read-only"} %d -`, tc.someReadOnlyCount)))) - }) - } +gitaly_praefect_read_only_repositories{virtual_storage="some-read-only"} 1 +`))) } |