-
Notifications
You must be signed in to change notification settings - Fork 568
/
full.go
109 lines (99 loc) · 2.94 KB
/
full.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package pachd
import (
"context"
"os"
"path"
"google.golang.org/grpc"
"github.com/pachyderm/pachyderm/v2/src/enterprise"
eprsserver "github.com/pachyderm/pachyderm/v2/src/server/enterprise/server"
)
// A fullBuilder builds a full-mode pachd.
type fullBuilder struct {
builder
}
func (fb *fullBuilder) maybeRegisterIdentityServer(ctx context.Context) error {
if fb.env.Config().EnterpriseMember {
return nil
}
return fb.builder.registerIdentityServer(ctx)
}
// registerEnterpriseServer registers a FULL-mode enterprise server. This
// differs from enterprise mode in that the mode & unpaused-mode options are
// passed; it differs from sidecar mode in that the mode & unpaused-mode options
// are passed, the heartbeat is enabled and the license environment’s enterprise
// server is set; it differs from paused mode in that the mode option is in full
// mode.
//
// TODO: refactor the four modes to have a cleaner license/enterprise server
// abstraction.
func (fb *fullBuilder) registerEnterpriseServer(ctx context.Context) error {
fb.enterpriseEnv = eprsserver.EnvFromServiceEnv(
fb.env,
path.Join(fb.env.Config().EtcdPrefix, fb.env.Config().EnterpriseEtcdPrefix),
fb.txnEnv,
eprsserver.WithMode(eprsserver.FullMode),
eprsserver.WithUnpausedMode(os.Getenv("UNPAUSED_MODE")),
)
apiServer, err := eprsserver.NewEnterpriseServer(
fb.enterpriseEnv,
true,
)
if err != nil {
return err
}
fb.forGRPCServer(func(s *grpc.Server) {
enterprise.RegisterAPIServer(s, apiServer)
})
fb.bootstrappers = append(fb.bootstrappers, apiServer)
fb.env.SetEnterpriseServer(apiServer)
fb.licenseEnv.EnterpriseServer = apiServer
return nil
}
// newFullBuilder returns a new initialized FullBuilder.
func newFullBuilder(config any) *fullBuilder {
return &fullBuilder{newBuilder(config, "pachyderm-pachd-full")}
}
// buildAndRun builds and starts a full-mode pachd.
func (fb *fullBuilder) buildAndRun(ctx context.Context) error {
return fb.apply(ctx,
fb.tweakResources,
fb.setupProfiling,
fb.printVersion,
fb.initJaeger,
fb.initKube,
fb.setupDB,
fb.maybeInitDexDB,
fb.maybeInitReporter,
fb.initInternalServer,
fb.initExternalServer,
fb.registerLicenseServer,
fb.registerEnterpriseServer,
fb.maybeRegisterIdentityServer,
fb.registerAuthServer,
fb.registerPFSServer,
fb.registerPPSServer,
fb.registerTransactionServer,
fb.registerAdminServer,
fb.registerHealthServer,
fb.registerVersionServer,
fb.registerDebugServer,
fb.registerProxyServer,
fb.initS3Server,
fb.initDownloadServer,
fb.initPrometheusServer,
fb.initPachwController,
fb.initTransaction,
fb.internallyListen,
fb.bootstrap,
fb.externallyListen,
fb.resumeHealth,
fb.daemon.serve,
)
}
// FullMode runs a full-mode pachd.
//
// Full mode is that standard pachd which users interact with using pachctl and
// which manages pipelines, files and so forth.
func FullMode(ctx context.Context, config any) error {
return newFullBuilder(config).buildAndRun(ctx)
}