Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSami Hiltunen <shiltunen@gitlab.com>2021-05-27 13:55:10 +0300
committerSami Hiltunen <shiltunen@gitlab.com>2021-07-12 12:09:38 +0300
commit77c84dd5b41ca2bd7d22aa5c6409bd043499f73e (patch)
tree599604b7506344d3fb54d16932d720f4f7e82809
parentfe6d52572ed4619191dbe73ade0b7baa4fceaafe (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.go7
-rw-r--r--internal/praefect/datastore/collector.go53
-rw-r--r--internal/praefect/datastore/collector_test.go38
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
+`)))
}