internal/cli/praefect/subcmd.go (72 lines of code) (raw):

package praefect import ( "context" "database/sql" "errors" "fmt" "io" "time" gitalyauth "gitlab.com/gitlab-org/gitaly/v16/auth" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" "google.golang.org/grpc" ) const ( defaultDialTimeout = 10 * time.Second paramVirtualStorage = "virtual-storage" paramRelativePath = "relative-path" paramReplicaPath = "replica-path" paramAuthoritativeStorage = "authoritative-storage" ) func getNodeAddress(cfg config.Config) (string, error) { switch { case cfg.SocketPath != "": return "unix:" + cfg.SocketPath, nil case cfg.ListenAddr != "": return "tcp://" + cfg.ListenAddr, nil case cfg.TLSListenAddr != "": return "tls://" + cfg.TLSListenAddr, nil default: return "", errors.New("no Praefect address configured") } } func openDB(conf config.DB, errOut io.Writer) (*sql.DB, func(), error) { ctx := context.Background() openDBCtx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() db, err := glsql.OpenDB(openDBCtx, conf) if err != nil { return nil, nil, fmt.Errorf("sql open: %w", err) } clean := func() { if err := db.Close(); err != nil { fmt.Fprintf(errOut, "sql close: %v\n", err) } } return db, clean, nil } func subCmdDial(ctx context.Context, addr, token string, timeout time.Duration, opts ...grpc.DialOption) (*grpc.ClientConn, error) { ctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() opts = append(opts, client.UnaryInterceptor(), client.StreamInterceptor(), ) if len(token) > 0 { opts = append(opts, grpc.WithPerRPCCredentials( gitalyauth.RPCCredentialsV2(token), ), ) } return client.New(ctx, addr, client.WithGrpcOptions(opts)) } type requiredParameterError string func (p requiredParameterError) Error() string { return fmt.Sprintf("%q is a required parameter", string(p)) } type unexpectedPositionalArgsError struct{ Command string } func (err unexpectedPositionalArgsError) Error() string { return fmt.Sprintf("%s doesn't accept positional arguments", err.Command) }