etcdserver: Create MemberDir() and base {Snap,WAL}Dir() thereon. Audit DataDir.

This commit is contained in:
Barak Michener 2015-02-12 12:45:12 -05:00
parent fade9b6065
commit cd50f0e058
3 changed files with 16 additions and 12 deletions

View File

@ -83,9 +83,11 @@ func (c *ServerConfig) VerifyBootstrapConfig() error {
return nil return nil
} }
func (c *ServerConfig) WALDir() string { return path.Join(c.DataDir, "wal") } func (c *ServerConfig) MemberDir() string { return path.Join(c.DataDir, "member") }
func (c *ServerConfig) SnapDir() string { return path.Join(c.DataDir, "snap") } func (c *ServerConfig) WALDir() string { return path.Join(c.MemberDir(), "wal") }
func (c *ServerConfig) SnapDir() string { return path.Join(c.MemberDir(), "snap") }
func (c *ServerConfig) ShouldDiscover() bool { return c.DiscoveryURL != "" } func (c *ServerConfig) ShouldDiscover() bool { return c.DiscoveryURL != "" }
@ -99,6 +101,7 @@ func (c *ServerConfig) print(initial bool) {
log.Println("etcdserver: force new cluster") log.Println("etcdserver: force new cluster")
} }
log.Printf("etcdserver: data dir = %s", c.DataDir) log.Printf("etcdserver: data dir = %s", c.DataDir)
log.Printf("etcdserver: member dir = %s", c.MemberDir())
log.Printf("etcdserver: heartbeat = %dms", c.TickMs) log.Printf("etcdserver: heartbeat = %dms", c.TickMs)
log.Printf("etcdserver: election = %dms", c.ElectionTicks*int(c.TickMs)) log.Printf("etcdserver: election = %dms", c.ElectionTicks*int(c.TickMs))
log.Printf("etcdserver: snapshot count = %d", c.SnapCount) log.Printf("etcdserver: snapshot count = %d", c.SnapCount)

View File

@ -129,8 +129,8 @@ func TestBootstrapConfigVerify(t *testing.T) {
func TestSnapDir(t *testing.T) { func TestSnapDir(t *testing.T) {
tests := map[string]string{ tests := map[string]string{
"/": "/snap", "/": "/member/snap",
"/var/lib/etc": "/var/lib/etc/snap", "/var/lib/etc": "/var/lib/etc/member/snap",
} }
for dd, w := range tests { for dd, w := range tests {
cfg := ServerConfig{ cfg := ServerConfig{
@ -144,8 +144,8 @@ func TestSnapDir(t *testing.T) {
func TestWALDir(t *testing.T) { func TestWALDir(t *testing.T) {
tests := map[string]string{ tests := map[string]string{
"/": "/wal", "/": "/member/wal",
"/var/lib/etc": "/var/lib/etc/wal", "/var/lib/etc": "/var/lib/etc/member/wal",
} }
for dd, w := range tests { for dd, w := range tests {
cfg := ServerConfig{ cfg := ServerConfig{

View File

@ -145,16 +145,13 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) {
var s *raft.MemoryStorage var s *raft.MemoryStorage
var id types.ID var id types.ID
var ss *snap.Snapshotter var ss *snap.Snapshotter
baseDataDir := cfg.DataDir
// Data dir lives under member now.
cfg.DataDir = path.Join(cfg.DataDir, "member")
walVersion, err := wal.DetectVersion(baseDataDir) walVersion, err := wal.DetectVersion(cfg.DataDir)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if walVersion == wal.WALUnknown { if walVersion == wal.WALUnknown {
return nil, fmt.Errorf("unknown wal version in data dir %s", baseDataDir) return nil, fmt.Errorf("unknown wal version in data dir %s", cfg.DataDir)
} }
haveWAL := walVersion != wal.WALNotExist haveWAL := walVersion != wal.WALNotExist
@ -194,7 +191,7 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) {
id, n, s, w = startNode(cfg, cfg.Cluster.MemberIDs()) id, n, s, w = startNode(cfg, cfg.Cluster.MemberIDs())
case haveWAL: case haveWAL:
// Run the migrations. // Run the migrations.
if err := upgradeWAL(baseDataDir, cfg.Name, walVersion); err != nil { if err := upgradeWAL(cfg.DataDir, cfg.Name, walVersion); err != nil {
return nil, err return nil, err
} }
@ -202,6 +199,10 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) {
return nil, fmt.Errorf("cannot write to data directory: %v", err) return nil, fmt.Errorf("cannot write to data directory: %v", err)
} }
if err := fileutil.IsDirWriteable(cfg.MemberDir()); err != nil {
return nil, fmt.Errorf("cannot write to member directory: %v", err)
}
if cfg.ShouldDiscover() { if cfg.ShouldDiscover() {
log.Printf("etcdserver: discovery token ignored since a cluster has already been initialized. Valid log found at %q", cfg.WALDir()) log.Printf("etcdserver: discovery token ignored since a cluster has already been initialized. Valid log found at %q", cfg.WALDir())
} }