Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions pkg/meta/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,37 @@ type Format struct {
MaxClientVersion string
}

func (f *Format) update(old *Format, force bool) error {
if force {
old.RemoveSecret()
logger.Warnf("Existing volume will be overwrited: %+v", *old)
} else {
var args []interface{}
switch {
case f.Name != old.Name:
args = []interface{}{"name", old.Name, f.Name}
case f.Storage != old.Storage:
args = []interface{}{"storage", old.Storage, f.Storage}
case f.BlockSize != old.BlockSize:
args = []interface{}{"block size", old.BlockSize, f.BlockSize}
case f.Compression != old.Compression:
args = []interface{}{"compression", old.Compression, f.Compression}
case f.Shards != old.Shards:
args = []interface{}{"shards", old.Shards, f.Shards}
case f.HashPrefix != old.HashPrefix:
args = []interface{}{"hash prefix", old.HashPrefix, f.HashPrefix}
case f.MetaVersion != old.MetaVersion:
args = []interface{}{"meta version", old.MetaVersion, f.MetaVersion}
}
if args == nil {
f.UUID = old.UUID
} else {
return fmt.Errorf("cannot update volume %s from %v to %v", args...)
}
}
return nil
}

func (f *Format) RemoveSecret() {
if f.SecretKey != "" {
f.SecretKey = "removed"
Expand Down
23 changes: 2 additions & 21 deletions pkg/meta/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -227,27 +227,8 @@ func (r *redisMeta) Init(format Format, force bool) error {
if err != nil {
logger.Fatalf("existing format is broken: %s", err)
}
if force {
old.RemoveSecret()
logger.Warnf("Existing volume will be overwrited: %+v", old)
} else {
format.UUID = old.UUID
// these can be safely updated.
old.Bucket = format.Bucket
old.AccessKey = format.AccessKey
old.SecretKey = format.SecretKey
old.EncryptKey = format.EncryptKey
old.KeyEncrypted = format.KeyEncrypted
old.Capacity = format.Capacity
old.Inodes = format.Inodes
old.TrashDays = format.TrashDays
old.MinClientVersion = format.MinClientVersion
old.MaxClientVersion = format.MaxClientVersion
if format != old {
old.RemoveSecret()
format.RemoveSecret()
return fmt.Errorf("cannot update format from %+v to %+v", old, format)
}
if err = format.update(&old, force); err != nil {
return err
}
}

Expand Down
23 changes: 2 additions & 21 deletions pkg/meta/sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -262,27 +262,8 @@ func (m *dbMeta) Init(format Format, force bool) error {
if err != nil {
return fmt.Errorf("json: %s", err)
}
if force {
old.RemoveSecret()
logger.Warnf("Existing volume will be overwrited: %+v", old)
} else {
format.UUID = old.UUID
// these can be safely updated.
old.Bucket = format.Bucket
old.AccessKey = format.AccessKey
old.SecretKey = format.SecretKey
old.EncryptKey = format.EncryptKey
old.KeyEncrypted = format.KeyEncrypted
old.Capacity = format.Capacity
old.Inodes = format.Inodes
old.TrashDays = format.TrashDays
old.MinClientVersion = format.MinClientVersion
old.MaxClientVersion = format.MaxClientVersion
if format != old {
old.RemoveSecret()
format.RemoveSecret()
return fmt.Errorf("cannot update format from %+v to %+v", old, format)
}
if err = format.update(&old, force); err != nil {
return err
}
}

Expand Down
23 changes: 2 additions & 21 deletions pkg/meta/tkv.go
Original file line number Diff line number Diff line change
Expand Up @@ -325,27 +325,8 @@ func (m *kvMeta) Init(format Format, force bool) error {
if err != nil {
return fmt.Errorf("json: %s", err)
}
if force {
old.RemoveSecret()
logger.Warnf("Existing volume will be overwrited: %+v", old)
} else {
format.UUID = old.UUID
// these can be safely updated.
old.Bucket = format.Bucket
old.AccessKey = format.AccessKey
old.SecretKey = format.SecretKey
old.EncryptKey = format.EncryptKey
old.KeyEncrypted = format.KeyEncrypted
old.Capacity = format.Capacity
old.Inodes = format.Inodes
old.TrashDays = format.TrashDays
old.MinClientVersion = format.MinClientVersion
old.MaxClientVersion = format.MaxClientVersion
if format != old {
old.RemoveSecret()
format.RemoveSecret()
return fmt.Errorf("cannot update format from %+v to %+v", old, format)
}
if err = format.update(&old, force); err != nil {
return err
}
}

Expand Down