mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #2210 from yichengq/316
etcdmain: use /member subdir to save member data
This commit is contained in:
commit
afb14a3e7a
@ -88,10 +88,11 @@ func startEtcd(cfg *config) (<-chan struct{}, error) {
|
||||
cfg.dir = fmt.Sprintf("%v.etcd", cfg.name)
|
||||
log.Printf("no data-dir provided, using default data-dir ./%s", cfg.dir)
|
||||
}
|
||||
if err := os.MkdirAll(cfg.dir, privateDirMode); err != nil {
|
||||
return nil, fmt.Errorf("cannot create data directory: %v", err)
|
||||
if err := makeMemberDir(cfg.dir); err != nil {
|
||||
return nil, fmt.Errorf("cannot use /member sub-directory: %v", err)
|
||||
}
|
||||
if err := fileutil.IsDirWriteable(cfg.dir); err != nil {
|
||||
membdir := path.Join(cfg.dir, "member")
|
||||
if err := fileutil.IsDirWriteable(membdir); err != nil {
|
||||
return nil, fmt.Errorf("cannot write to data directory: %v", err)
|
||||
}
|
||||
|
||||
@ -148,7 +149,7 @@ func startEtcd(cfg *config) (<-chan struct{}, error) {
|
||||
Name: cfg.name,
|
||||
ClientURLs: cfg.acurls,
|
||||
PeerURLs: cfg.apurls,
|
||||
DataDir: cfg.dir,
|
||||
DataDir: membdir,
|
||||
SnapCount: cfg.snapCount,
|
||||
MaxSnapFiles: cfg.maxSnapFiles,
|
||||
MaxWALFiles: cfg.maxWalFiles,
|
||||
@ -335,6 +336,42 @@ func setupCluster(cfg *config) (*etcdserver.Cluster, error) {
|
||||
return cls, err
|
||||
}
|
||||
|
||||
func makeMemberDir(dir string) error {
|
||||
membdir := path.Join(dir, "member")
|
||||
_, err := os.Stat(membdir)
|
||||
switch {
|
||||
case err == nil:
|
||||
return nil
|
||||
case !os.IsNotExist(err):
|
||||
return err
|
||||
}
|
||||
if err := os.MkdirAll(membdir, 0700); err != nil {
|
||||
return err
|
||||
}
|
||||
v1Files := types.NewUnsafeSet("conf", "log", "snapshot")
|
||||
v2Files := types.NewUnsafeSet("wal", "snap")
|
||||
names, err := fileutil.ReadDir(dir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, name := range names {
|
||||
switch {
|
||||
case v1Files.Contains(name):
|
||||
// Link it to the subdir and keep the v1 file at the original
|
||||
// location, so v0.4 etcd can still bootstrap if the upgrade
|
||||
// failed.
|
||||
if err := os.Link(path.Join(dir, name), path.Join(membdir, name)); err != nil {
|
||||
return err
|
||||
}
|
||||
case v2Files.Contains(name):
|
||||
if err := os.Rename(path.Join(dir, name), path.Join(membdir, name)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func genClusterString(name string, urls types.URLs) string {
|
||||
addrs := make([]string, 0)
|
||||
for _, u := range urls {
|
||||
|
Loading…
x
Reference in New Issue
Block a user