Merge pull request #4822 from mitake/auth-backend

auth, etcdserver: add a method for updating backend during apply snap…
release-3.0
Xiang Li 2016-03-21 23:34:46 -07:00
commit afb1bc242b
2 changed files with 19 additions and 12 deletions

View File

@ -19,10 +19,6 @@ import (
"github.com/coreos/etcd/storage/backend"
)
type backendGetter interface {
Backend() backend.Backend
}
var (
enableFlagKey = []byte("authEnabled")
authBucketName = []byte("auth")
@ -33,16 +29,19 @@ var (
type AuthStore interface {
// AuthEnable() turns on the authentication feature
AuthEnable()
// Recover recovers the state of auth store from the given backend
Recover(b backend.Backend)
}
type authStore struct {
bgetter backendGetter
be backend.Backend
}
func (as *authStore) AuthEnable() {
value := []byte{1}
b := as.bgetter.Backend()
b := as.be
tx := b.BatchTx()
tx.Lock()
tx.UnsafePut(authBucketName, enableFlagKey, value)
@ -52,15 +51,19 @@ func (as *authStore) AuthEnable() {
plog.Noticef("Authentication enabled")
}
func NewAuthStore(bgetter backendGetter) *authStore {
b := bgetter.Backend()
tx := b.BatchTx()
func (as *authStore) Recover(be backend.Backend) {
as.be = be
// TODO(mitake): recovery process
}
func NewAuthStore(be backend.Backend) *authStore {
tx := be.BatchTx()
tx.Lock()
tx.UnsafeCreateBucket(authBucketName)
tx.Unlock()
b.ForceCommit()
be.ForceCommit()
return &authStore{
bgetter: bgetter,
be: be,
}
}

View File

@ -374,7 +374,7 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) {
srv.be = backend.NewDefaultBackend(path.Join(cfg.SnapDir(), databaseFilename))
srv.lessor = lease.NewLessor(srv.be)
srv.kv = dstorage.New(srv.be, srv.lessor, &srv.consistIndex)
srv.authStore = auth.NewAuthStore(srv)
srv.authStore = auth.NewAuthStore(srv.be)
if h := cfg.AutoCompactionRetention; h != 0 {
srv.compactor = compactor.NewPeriodic(h, srv.kv, srv)
srv.compactor.Run()
@ -621,6 +621,10 @@ func (s *EtcdServer) applySnapshot(ep *etcdProgress, apply *apply) {
if s.lessor != nil {
s.lessor.Recover(newbe, s.kv)
}
if s.authStore != nil {
s.authStore.Recover(newbe)
}
}
if err := s.store.Recovery(apply.snapshot.Data); err != nil {
plog.Panicf("recovery store error: %v", err)