@@ -3,10 +3,10 @@ package config
33import (
44 "flag"
55 "fmt"
6- "os"
7-
86 "github.com/BurntSushi/toml"
97 "github.com/pkg/errors"
8+ "os"
9+ "path"
1010)
1111
1212type ServerEnv interface {
@@ -15,7 +15,9 @@ type ServerEnv interface {
1515}
1616
1717type env struct {
18- firstRun bool
18+ firstRun bool
19+ initLockFile string
20+
1921 configFile string
2022}
2123
@@ -54,8 +56,6 @@ type ClusterBootstrap struct {
5456}
5557
5658type Cluster struct {
57- // State enum: new, existing
58- State EnumClusterState `toml:"state"`
5959 Token string `toml:"token"`
6060 Bootstrap []ClusterBootstrap `toml:"bootstrap"`
6161}
@@ -85,7 +85,24 @@ type Config struct {
8585}
8686
8787func (c * Config ) setupEnv () {
88- c .env .firstRun = c .Cluster .State == ClusterStateNew
88+ c .env .initLockFile = path .Join (c .Node .DataDir , ".init.lock" )
89+
90+ // write init lock
91+ if _ , err := os .Stat (c .env .initLockFile ); os .IsNotExist (err ) {
92+ c .env .firstRun = true
93+
94+ if err = os .MkdirAll (path .Clean (c .Node .DataDir ), os .ModePerm ); err != nil {
95+ panic ("Setup config error:" + err .Error ())
96+ }
97+
98+ f , err := os .OpenFile (c .env .initLockFile , os .O_WRONLY | os .O_TRUNC | os .O_CREATE , 0644 )
99+ if err != nil {
100+ panic ("Setup config error:" + err .Error ())
101+ }
102+ defer f .Close ()
103+ _ , _ = f .WriteString ("LOCK" )
104+ }
105+
89106}
90107
91108func (c * Config ) Env () ServerEnv {
@@ -127,7 +144,6 @@ func bindServerFromArgs(cfg *Config, args ...string) error {
127144 fs .Var (newValidatorStringValue [EnumNutsRWMode ](DefaultStoreNutsRWMode , & cfg .Store .Nuts .RWMode ), "nuts-rw-mode" , "select read & write mode, options: fileio, mmap" )
128145
129146 // main config::cluster
130- fs .Var (newValidatorStringValue [EnumClusterState ](DefaultClusterState , & cfg .Cluster .State ), "cluster-state" , "status of the cluster at startup" )
131147 fs .StringVar (& cfg .Cluster .Token , "cluster-token" , "" , "" )
132148
133149 // main config::cluster::bootstrap(s)
@@ -168,7 +184,6 @@ func bindServerFromEnv(cfg *Config) {
168184 BindEnvVar (newValidatorStringValue [EnumNutsRWMode ](DefaultStoreNutsRWMode , & cfg .Store .Nuts .RWMode ), "RQ_NUTS_RW_MODE" )
169185
170186 // main config::cluster
171- BindEnvVar (newValidatorStringValue [EnumClusterState ](DefaultClusterState , & cfg .Cluster .State ), "RQ_CLUSTER_STATE" )
172187 EnvStringVar (& cfg .Cluster .Token , "RQ_CLUSTER_TOKEN" , "" )
173188
174189 // main config::cluster::bootstrap(s)
0 commit comments