layer1: add namespace manager subscribers step 9
This commit is contained in:
@@ -6,10 +6,16 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type NamespaceSubscriber interface {
|
||||
Name() string
|
||||
}
|
||||
|
||||
type NamespaceManager interface {
|
||||
Snapshot() []string
|
||||
SnapshotRecords() []NamespaceRecord
|
||||
Get(name string) (NamespaceRecord, bool)
|
||||
Subscribe(subscriber NamespaceSubscriber)
|
||||
SnapshotSubscribers() []string
|
||||
Upsert(event NamespaceEvent) NamespaceRecord
|
||||
MarkPartState(namespace string, part string, state NamespacePartState) (NamespaceRecord, bool)
|
||||
Remove(name string) bool
|
||||
@@ -18,14 +24,34 @@ type NamespaceManager interface {
|
||||
type inMemoryNamespaceManager struct {
|
||||
mu sync.RWMutex
|
||||
records map[string]NamespaceRecord
|
||||
subs map[string]NamespaceSubscriber
|
||||
}
|
||||
|
||||
func NewNamespaceManager() NamespaceManager {
|
||||
return &inMemoryNamespaceManager{
|
||||
records: make(map[string]NamespaceRecord),
|
||||
subs: make(map[string]NamespaceSubscriber),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *inMemoryNamespaceManager) Subscribe(subscriber NamespaceSubscriber) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
m.subs[subscriber.Name()] = subscriber
|
||||
}
|
||||
|
||||
func (m *inMemoryNamespaceManager) SnapshotSubscribers() []string {
|
||||
m.mu.RLock()
|
||||
defer m.mu.RUnlock()
|
||||
|
||||
names := make([]string, 0, len(m.subs))
|
||||
for name := range m.subs {
|
||||
names = append(names, name)
|
||||
}
|
||||
sort.Strings(names)
|
||||
return names
|
||||
}
|
||||
|
||||
func (m *inMemoryNamespaceManager) Snapshot() []string {
|
||||
m.mu.RLock()
|
||||
defer m.mu.RUnlock()
|
||||
|
||||
Reference in New Issue
Block a user