Add functionality to add old buckets to etcd on startup

Buckets already present on a Minio server before it joins a
bucket federated deployment will now be added to etcd during
startup. In case of a bucket name collision, admin is informed
via Minio server console message.

Added configuration migration for configuration stored in etcd
backend.

Also, environment variables are updated and ListBucket path style
request is no longer forwarded.
This commit is contained in:
Nitish
2018-04-05 20:48:42 +05:30
committed by kannappanr
parent 853ea371ce
commit 6df1e4a529
11 changed files with 188 additions and 83 deletions

View File

@@ -191,10 +191,10 @@ func NewLocalConfig(data interface{}) (Config, error) {
return d, nil
}
// GetVersion - extracts the version information.
func GetVersion(filename string) (version string, err error) {
// GetLocalVersion - extracts the version information.
func GetLocalVersion(filename string) (version string, err error) {
var qc Config
if qc, err = Load(filename, &struct {
if qc, err = LoadLocalConfig(filename, &struct {
Version string
}{}); err != nil {
return "", err
@@ -202,16 +202,16 @@ func GetVersion(filename string) (version string, err error) {
return qc.Version(), err
}
// Load - loads json config from filename for the a given struct data
func Load(filename string, data interface{}) (qc Config, err error) {
// LoadLocalConfig - loads json config from filename for the a given struct data
func LoadLocalConfig(filename string, data interface{}) (qc Config, err error) {
if qc, err = NewLocalConfig(data); err == nil {
err = qc.Load(filename)
}
return qc, err
}
// Save - saves given configuration data into given file as JSON.
func Save(filename string, data interface{}) (err error) {
// SaveLocalConfig - saves given configuration data into given file as JSON.
func SaveLocalConfig(filename string, data interface{}) (err error) {
var qc Config
if qc, err = NewLocalConfig(data); err == nil {
err = qc.Save(filename)

View File

@@ -71,7 +71,7 @@ func (d etcdConfig) Save(filename string) error {
kapi := etcdc.NewKeysAPI(d.clnt)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
_, err = kapi.Create(ctx, filename, string(dataBytes))
_, err = kapi.Update(ctx, filename, string(dataBytes))
cancel()
return err
}
@@ -173,3 +173,32 @@ func NewEtcdConfig(data interface{}, clnt etcdc.Client) (Config, error) {
d.lock = &sync.Mutex{}
return d, nil
}
// GetEtcdVersion - extracts the version information.
func GetEtcdVersion(filename string, clnt etcdc.Client) (version string, err error) {
var qc Config
if qc, err = LoadEtcdConfig(filename, &struct {
Version string
}{}, clnt); err != nil {
return "", err
}
return qc.Version(), err
}
// LoadEtcdConfig - loads json config from etcd backend for the given struct data
func LoadEtcdConfig(filename string, data interface{}, clnt etcdc.Client) (qc Config, err error) {
if qc, err = NewEtcdConfig(data, clnt); err == nil {
err = qc.Load(filename)
}
return qc, err
}
// SaveEtcdConfig - saves given configuration data into etcd backend.
func SaveEtcdConfig(filename string, data interface{}, clnt etcdc.Client) (err error) {
var qc Config
if qc, err = NewEtcdConfig(data, clnt); err == nil {
err = qc.Save(filename)
}
return err
}

View File

@@ -45,7 +45,7 @@ func TestReadVersion(t *testing.T) {
t.Fatal(err)
}
version, err := GetVersion("test.json")
version, err := GetLocalVersion("test.json")
if err != nil {
t.Fatal(err)
}
@@ -69,7 +69,7 @@ func TestReadVersionErr(t *testing.T) {
t.Fatal(err)
}
_, err = GetVersion("test.json")
_, err = GetLocalVersion("test.json")
if err == nil {
t.Fatal("Unexpected should fail to fetch version")
}
@@ -79,7 +79,7 @@ func TestReadVersionErr(t *testing.T) {
t.Fatal(err)
}
_, err = GetVersion("test.json")
_, err = GetLocalVersion("test.json")
if err == nil {
t.Fatal("Unexpected should fail to fetch version")
}
@@ -155,7 +155,7 @@ func TestLoadFile(t *testing.T) {
Directories []string
}
saveMe := myStruct{}
_, err := Load("test.json", &saveMe)
_, err := LoadLocalConfig("test.json", &saveMe)
if err == nil {
t.Fatal(err)
}
@@ -167,7 +167,7 @@ func TestLoadFile(t *testing.T) {
if err = file.Close(); err != nil {
t.Fatal(err)
}
_, err = Load("test.json", &saveMe)
_, err = LoadLocalConfig("test.json", &saveMe)
if err == nil {
t.Fatal("Unexpected should fail to load empty JSON")
}
@@ -195,7 +195,7 @@ func TestLoadFile(t *testing.T) {
t.Fatal(err)
}
saveMe1 := myStruct{}
_, err = Load("test.json", &saveMe1)
_, err = LoadLocalConfig("test.json", &saveMe1)
if err != nil {
t.Fatal(err)
}