mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
etcdserver: Create AlarmBackend interface
This commit is contained in:
@@ -21,7 +21,6 @@ import (
|
||||
pb "go.etcd.io/etcd/api/v3/etcdserverpb"
|
||||
"go.etcd.io/etcd/client/pkg/v3/types"
|
||||
"go.etcd.io/etcd/server/v3/storage/backend"
|
||||
"go.etcd.io/etcd/server/v3/storage/schema"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
@@ -30,6 +29,14 @@ type BackendGetter interface {
|
||||
Backend() backend.Backend
|
||||
}
|
||||
|
||||
type AlarmBackend interface {
|
||||
CreateAlarmBucket()
|
||||
MustPutAlarm(member *pb.AlarmMember)
|
||||
MustDeleteAlarm(alarm *pb.AlarmMember)
|
||||
GetAllAlarms() ([]*pb.AlarmMember, error)
|
||||
ForceCommit()
|
||||
}
|
||||
|
||||
type alarmSet map[types.ID]*pb.AlarmMember
|
||||
|
||||
// AlarmStore persists alarms to the backend.
|
||||
@@ -38,14 +45,14 @@ type AlarmStore struct {
|
||||
mu sync.Mutex
|
||||
types map[pb.AlarmType]alarmSet
|
||||
|
||||
bg BackendGetter
|
||||
be AlarmBackend
|
||||
}
|
||||
|
||||
func NewAlarmStore(lg *zap.Logger, bg BackendGetter) (*AlarmStore, error) {
|
||||
func NewAlarmStore(lg *zap.Logger, be AlarmBackend) (*AlarmStore, error) {
|
||||
if lg == nil {
|
||||
lg = zap.NewNop()
|
||||
}
|
||||
ret := &AlarmStore{lg: lg, types: make(map[pb.AlarmType]alarmSet), bg: bg}
|
||||
ret := &AlarmStore{lg: lg, types: make(map[pb.AlarmType]alarmSet), be: be}
|
||||
err := ret.restore()
|
||||
return ret, err
|
||||
}
|
||||
@@ -59,7 +66,7 @@ func (a *AlarmStore) Activate(id types.ID, at pb.AlarmType) *pb.AlarmMember {
|
||||
return m
|
||||
}
|
||||
|
||||
schema.MustPutAlarm(a.lg, a.bg.Backend().BatchTx(), newAlarm)
|
||||
a.be.MustPutAlarm(newAlarm)
|
||||
return newAlarm
|
||||
}
|
||||
|
||||
@@ -79,7 +86,7 @@ func (a *AlarmStore) Deactivate(id types.ID, at pb.AlarmType) *pb.AlarmMember {
|
||||
|
||||
delete(t, id)
|
||||
|
||||
schema.MustDeleteAlarm(a.lg, a.bg.Backend().BatchTx(), m)
|
||||
a.be.MustDeleteAlarm(m)
|
||||
return m
|
||||
}
|
||||
|
||||
@@ -101,20 +108,15 @@ func (a *AlarmStore) Get(at pb.AlarmType) (ret []*pb.AlarmMember) {
|
||||
}
|
||||
|
||||
func (a *AlarmStore) restore() error {
|
||||
b := a.bg.Backend()
|
||||
tx := b.BatchTx()
|
||||
|
||||
tx.Lock()
|
||||
schema.UnsafeCreateAlarmBucket(tx)
|
||||
ms, err := schema.UnsafeGetAllAlarms(tx)
|
||||
tx.Unlock()
|
||||
a.be.CreateAlarmBucket()
|
||||
ms, err := a.be.GetAllAlarms()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, m := range ms {
|
||||
a.addToMap(m)
|
||||
}
|
||||
b.ForceCommit()
|
||||
a.be.ForceCommit()
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user