diff options
author | Sami Hiltunen <shiltunen@gitlab.com> | 2022-04-06 15:36:53 +0300 |
---|---|---|
committer | Sami Hiltunen <shiltunen@gitlab.com> | 2022-04-06 16:13:50 +0300 |
commit | 588054fd852efa458d1117816d72e9bf5e43c234 (patch) | |
tree | ee90559e86be5b02a4f9d1b10f28341467780cab | |
parent | 8f65727d4e41803776f2efd34fe3451420d0ccc2 (diff) |
Expose last verification time in 'praefect metadata'smh-verify-metadata-output
Administrator's may want to know when Praefect has last verified a
replica. This commit exposes that information via the 'praefect metadata'
command.
Changelog: added
-rw-r--r-- | cmd/praefect/subcmd_metadata.go | 6 | ||||
-rw-r--r-- | cmd/praefect/subcmd_metadata_test.go | 9 | ||||
-rw-r--r-- | internal/praefect/service/info/metadata.go | 7 |
3 files changed, 22 insertions, 0 deletions
diff --git a/cmd/praefect/subcmd_metadata.go b/cmd/praefect/subcmd_metadata.go index e913a0eec..3cc9b8292 100644 --- a/cmd/praefect/subcmd_metadata.go +++ b/cmd/praefect/subcmd_metadata.go @@ -99,9 +99,15 @@ func (cmd *metadataSubcommand) Exec(flags *flag.FlagSet, cfg config.Config) erro generationText = fmt.Sprintf("%d, behind by %d changes", replica.Generation, metadata.Generation-replica.Generation) } + verifiedAt := "unverified" + if replica.VerifiedAt.IsValid() { + verifiedAt = replica.VerifiedAt.AsTime().String() + } + cmd.println(" Generation: %s", generationText) cmd.println(" Healthy: %v", replica.Healthy) cmd.println(" Valid Primary: %v", replica.ValidPrimary) + cmd.println(" Verified At: %s", verifiedAt) } return nil } diff --git a/cmd/praefect/subcmd_metadata_test.go b/cmd/praefect/subcmd_metadata_test.go index ee433fa87..dbca8c27c 100644 --- a/cmd/praefect/subcmd_metadata_test.go +++ b/cmd/praefect/subcmd_metadata_test.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "testing" + "time" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v14/internal/praefect/config" @@ -33,6 +34,11 @@ func TestMetadataSubcommand(t *testing.T) { require.NoError(t, rs.CreateRepository(ctx, 1, "virtual-storage", "relative-path", "replica-path", "primary", []string{"secondary-1"}, []string{"secondary-2"}, true, true)) require.NoError(t, rs.IncrementGeneration(ctx, 1, "primary", nil)) + _, err := tx.ExecContext(ctx, "UPDATE storage_repositories SET verified_at = $1 WHERE storage = 'primary'", + time.Date(2021, time.April, 1, 10, 4, 20, 64, time.UTC), + ) + require.NoError(t, err) + ln, clean := listenAndServe(t, []svcRegistrar{ registerPraefectInfoServer(info.NewServer(config.Config{}, rs, nil, nil, nil)), }) @@ -105,16 +111,19 @@ Replicas: Generation: 1, fully up to date Healthy: true Valid Primary: true + Verified At: 2021-04-01 10:04:20 +0000 UTC - Storage: "secondary-1" Assigned: true Generation: 0, behind by 1 changes Healthy: true Valid Primary: false + Verified At: unverified - Storage: "secondary-2" Assigned: true Generation: replica not yet created Healthy: false Valid Primary: false + Verified At: unverified `, stdout.String()) }) } diff --git a/internal/praefect/service/info/metadata.go b/internal/praefect/service/info/metadata.go index d469b94c1..24c716224 100644 --- a/internal/praefect/service/info/metadata.go +++ b/internal/praefect/service/info/metadata.go @@ -8,6 +8,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v14/internal/praefect/commonerr" "gitlab.com/gitlab-org/gitaly/v14/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" + "google.golang.org/protobuf/types/known/timestamppb" ) // GetRepositoryMetadata returns the cluster metadata for a repository. @@ -37,12 +38,18 @@ func (s *Server) GetRepositoryMetadata(ctx context.Context, req *gitalypb.GetRep replicas := make([]*gitalypb.GetRepositoryMetadataResponse_Replica, 0, len(metadata.Replicas)) for _, replica := range metadata.Replicas { + var verifiedAt *timestamppb.Timestamp + if !replica.VerifiedAt.IsZero() { + verifiedAt = timestamppb.New(replica.VerifiedAt) + } + replicas = append(replicas, &gitalypb.GetRepositoryMetadataResponse_Replica{ Storage: replica.Storage, Assigned: replica.Assigned, Generation: replica.Generation, Healthy: replica.Healthy, ValidPrimary: replica.ValidPrimary, + VerifiedAt: verifiedAt, }) } |