Skip to content

Commit 4740843

Browse files
committed
cmk: implement file lock for config read/write
Signed-off-by: Rohit Yadav <rohit@apache.org>
1 parent 783a099 commit 4740843

13 files changed

Lines changed: 686 additions & 2 deletions

File tree

config/config.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"strconv"
2828
"time"
2929

30+
"github.com/gofrs/flock"
3031
"github.com/mitchellh/go-homedir"
3132
"gopkg.in/ini.v1"
3233
)
@@ -140,6 +141,18 @@ func newHTTPClient(cfg *Config) *http.Client {
140141
}
141142

142143
func reloadConfig(cfg *Config) *Config {
144+
fileLock := flock.New(path.Join(getDefaultConfigDir(), "lock"))
145+
err := fileLock.Lock()
146+
if err != nil {
147+
fmt.Println("Failed to grab config file lock, please try again")
148+
return cfg
149+
}
150+
cfg = saveConfig(cfg)
151+
fileLock.Unlock()
152+
return cfg
153+
}
154+
155+
func saveConfig(cfg *Config) *Config {
143156
if _, err := os.Stat(cfg.Dir); err != nil {
144157
os.Mkdir(cfg.Dir, 0700)
145158
}
@@ -214,7 +227,7 @@ func reloadConfig(cfg *Config) *Config {
214227
}
215228

216229
// UpdateConfig updates and saves config
217-
func (c *Config) UpdateConfig(key string, value string) {
230+
func (c *Config) UpdateConfig(key string, value string, update bool) {
218231
switch key {
219232
case "prompt":
220233
c.Core.Prompt = value
@@ -246,7 +259,9 @@ func (c *Config) UpdateConfig(key string, value string) {
246259
c.Core.VerifyCert = value == "true"
247260
}
248261

249-
reloadConfig(c)
262+
if update {
263+
reloadConfig(c)
264+
}
250265
}
251266

252267
// NewConfig creates or reload config and loads API cache

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ require (
2121
github.com/briandowns/spinner v0.0.0-20181018151057-dd69c579ff20
2222
github.com/c-bata/go-prompt v0.2.2
2323
github.com/fatih/color v1.7.0 // indirect
24+
github.com/gofrs/flock v0.7.0
2425
github.com/google/shlex v0.0.0-20150127133951-6f45313302b9
2526
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect
2627
github.com/jtolds/gls v4.2.1+incompatible // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ github.com/c-bata/go-prompt v0.2.2 h1:uyKRz6Z6DUyj49QVijyM339UJV9yhbr70gESwbNU3e
44
github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34=
55
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
66
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
7+
github.com/gofrs/flock v0.7.0 h1:pGFUjl501gafK9HBt1VGL1KCOd/YhIooID+xgyJCf3g=
8+
github.com/gofrs/flock v0.7.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
79
github.com/google/shlex v0.0.0-20150127133951-6f45313302b9 h1:JM174NTeGNJ2m/oLH3UOWOvWQQKd+BoL3hcSCUWFLt0=
810
github.com/google/shlex v0.0.0-20150127133951-6f45313302b9/go.mod h1:RpwtwJQFrIEPstU94h88MWPXP2ektJZ8cZ0YntAmXiE=
911
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=

vendor/github.com/gofrs/flock/.gitignore

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/gofrs/flock/.travis.yml

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/gofrs/flock/LICENSE

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/gofrs/flock/README.md

Lines changed: 40 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/gofrs/flock/appveyor.yml

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/gofrs/flock/flock.go

Lines changed: 127 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)