Skip to content

Commit

Permalink
locker: migrate to the new Postgres preemptive locker
Browse files Browse the repository at this point in the history
  • Loading branch information
mikeykhalil committed Aug 29, 2020
1 parent df29488 commit 8b0c50a
Show file tree
Hide file tree
Showing 14 changed files with 87 additions and 1,321 deletions.
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,10 @@ For more details, see [Local Development](https://github.com/dollarshaveclub/acy

- Acyl: This is the server application which listens for GitHub webhook events and performs operations to create, update or destroy environments within your Kubernetes cluster. The server is intended to run within the same cluster, with ClusterAdmin permissions. The Acyl binary also can be used as a local CLI utility for local environment development and debugging.
- Postgres: This is the primary datastore for Acyl.
- Consul: This is used for event concurrency control/locking.
- [Furan](https://github.com/dollarshaveclub/furan): This is used to build and push application Docker images on demand.
- (*OPTIONAL*) Notifications can be sent to Slack channels or individual users when environments are created or altered.
- (*OPTIONAL*) [Vault](https://www.vaultproject.io/) can be used for Acyl secrets like GitHub tokens and database credentials.

## Further Reading
- [User Guide](https://github.com/dollarshaveclub/acyl/wiki/User-Guide)
- [acyl.yml v2 Specification](https://github.com/dollarshaveclub/acyl/wiki/Acyl.yml-V2-Specification)

20 changes: 9 additions & 11 deletions acyl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ application:
# - "app.furan_addr=furan:4001"
# - "image.pullPolicy=IfNotPresent"
# local:
# - "app.dogstatsd_addr=1.2.3.4:8125"
# - "app.secrets_backend=env"
# - "app.secrets_mapping=ACYL_{{ .ID }}"
# - "app.secrets_from_env=true"
# - "app.k8s_secret_injections="
# - "app.operation_timeout_override=10m"
# - "app.k8s_secret_injections=image-pull-secret=k8s/image_pull_secret"
# - "app.ui_base_url=http://192.168.64.10:4000"
# - "cronautoscaling.enabled=false"
# - "app.dogstatsd_addr=1.2.3.4:8125"
# - "app.secrets_backend=env"
# - "app.secrets_mapping=ACYL_{{ .ID }}"
# - "app.secrets_from_env=true"
# - "app.k8s_secret_injections="
# - "app.operation_timeout_override=10m"
# - "app.k8s_secret_injections=image-pull-secret=k8s/image_pull_secret"
# - "app.ui_base_url=http://192.168.64.10:4000"
# - "cronautoscaling.enabled=false"

dependencies:
direct:
Expand All @@ -39,8 +39,6 @@ dependencies:
- "postgresqlDatabase=acyl"
- "persistence.enabled=false"
- "fullnameOverride=postgresql-postgresql"
- chart_path: '.helm/charts/consul'
chart_vars_path: './.helm/charts/consul/values.yaml'

notifications:
github:
Expand Down
6 changes: 1 addition & 5 deletions cmd/integration.go
Original file line number Diff line number Diff line change
Expand Up @@ -281,11 +281,7 @@ func setupNitro(dl persistence.DataLayer, useGHToken bool) (spawner.EnvironmentS
rc := ghclient.NewGitHubClient(ghtkn)
ng := &namegen.FakeNameGenerator{Unique: true}
mc := &metrics.FakeCollector{}
lp := &locker.FakePreemptiveLockProvider{
ChannelFactory: func() chan struct{} {
return make(chan struct{})
},
}
lp := locker.NewFakeLockProvider()
nf := func(lf func(string, ...interface{}), notifications models.Notifications, user string) notifier.Router {
sb := &notifier.SlackBackend{
Username: "john.doe",
Expand Down
11 changes: 4 additions & 7 deletions cmd/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ import (

var serverConfig config.ServerConfig
var githubConfig config.GithubConfig
var consulConfig config.ConsulConfig
var slackConfig config.SlackConfig

var k8sConfig config.K8sConfig
Expand Down Expand Up @@ -74,9 +73,7 @@ func init() {
serverCmd.PersistentFlags().BoolVar(&serverConfig.DisableTLS, "disable-tls", false, "Disable TLS for the REST HTTP(S) server")
serverCmd.PersistentFlags().StringVar(&githubConfig.TypePath, "repo-type-path", "acyl.yml", "Relative path within the target repo to look for the type definition")
serverCmd.PersistentFlags().StringVar(&serverConfig.WordnetPath, "wordnet-path", "/opt/words.json.gz", "Path to gzip-compressed JSON wordnet file")
serverCmd.PersistentFlags().StringSliceVar(&serverConfig.FuranAddrs, "furan-addrs", []string{}, "Furan hosts (optional, otherwise use Consul discovery)")
serverCmd.PersistentFlags().StringVar(&consulConfig.Addr, "consul-addr", "127.0.0.1:8500", "Consul agent address")
serverCmd.PersistentFlags().StringVar(&consulConfig.LockPrefix, "consul-lock-prefix", "acyl/", "Consul lock name prefix")
serverCmd.PersistentFlags().StringSliceVar(&serverConfig.FuranAddrs, "furan-addrs", []string{}, "Furan hosts")
serverCmd.PersistentFlags().StringVar(&slackConfig.Channel, "slack-channel", "dyn-qa-notifications", "Slack channel for notifications")
serverCmd.PersistentFlags().StringVar(&slackConfig.Username, "slack-username", "Acyl Environment Notifier", "Slack username for notifications")
serverCmd.PersistentFlags().StringVar(&slackConfig.IconURL, "slack-icon-url", "https://picsum.photos/48/48", "Slack user avatar icon for notifications")
Expand Down Expand Up @@ -160,9 +157,9 @@ func server(cmd *cobra.Command, args []string) {
log.Fatalf("error opening wordnet file: %v", err)
}

lp, err := locker.NewConsulLocker(consulConfig.Addr, consulConfig.LockPrefix, datadogServiceName, true)
lp, err := locker.NewPostgresLockProvider(pgConfig.PostgresURI, datadogServiceName+".postgres_locker", pgConfig.EnableTracing)
if err != nil {
log.Fatalf("error creating Consul lock service: %v", err)
log.Fatalf("error creating Postgres lock provider: %v", err)
}

slackapi := slack.New(slackConfig.Token)
Expand All @@ -172,7 +169,7 @@ func server(cmd *cobra.Command, args []string) {
if err != nil {
log.Fatalf("error setting up nitro metrics collector: %v", err)
}
fbb, err := images.NewFuranBuilderBackend(serverConfig.FuranAddrs, consulConfig.Addr, dl, mc, os.Stderr, datadogServiceName)
fbb, err := images.NewFuranBuilderBackend(serverConfig.FuranAddrs, dl, mc, os.Stderr, datadogServiceName)
if err != nil {
log.Fatalf("error getting Furan image builder backend: %v", err)
}
Expand Down
16 changes: 5 additions & 11 deletions cmd/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ func getImageBackend(dl persistence.DataLayer, rc ghclient.RepoClient, auths map
case testEnvCfg.buildMode == "none":
return &images.NoneBackend{}, nil
case strings.HasPrefix(testEnvCfg.buildMode, "furan://"):
fb, err := images.NewFuranBuilderBackend([]string{testEnvCfg.buildMode[8:len(testEnvCfg.buildMode)]}, "", dl, &oldmetrics.FakeCollector{}, ioutil.Discard, "furan.test-client")
fb, err := images.NewFuranBuilderBackend([]string{testEnvCfg.buildMode[8:len(testEnvCfg.buildMode)]}, dl, &oldmetrics.FakeCollector{}, ioutil.Discard, "furan.test-client")
if err != nil {
return nil, errors.Wrap(err, "error getting furan backend")
}
Expand Down Expand Up @@ -404,16 +404,10 @@ func testConfigSetup(dl persistence.DataLayer) (*nitroenv.Manager, context.Conte
RC: mg.RC,
MC: mc,
NG: ng,
LP: &locker.FakePreemptiveLockProvider{
ChannelFactory: func() chan struct{} {
lch := make(chan struct{})
//close(lch)
return lch
},
},
FS: fs,
MG: mg,
CI: ci,
LP: locker.NewFakeLockProvider(),
FS: fs,
MG: mg,
CI: ci,
}, ctx, &models.RepoRevisionData{
PullRequest: testEnvCfg.pullRequest,
Repo: ri.GitHubRepoName,
Expand Down
117 changes: 0 additions & 117 deletions pkg/locker/consul.go

This file was deleted.

Loading

0 comments on commit 8b0c50a

Please sign in to comment.