export registry util function to safe copy registry data

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
2019-07-04 00:15:44 +03:00
parent 7008809eff
commit 0e34c572b4
7 changed files with 66 additions and 259 deletions

View File

@@ -22,17 +22,6 @@ var (
timeout = time.Millisecond * 10
)
/*
// Setup sets mock data
func (m *Registry) Setup() {
m.Lock()
defer m.Unlock()
// add some memory data
m.Services = Data
}
*/
func (m *Registry) watch(r *registry.Result) {
var watchers []*Watcher
@@ -66,7 +55,7 @@ func (m *Registry) Init(opts ...registry.Option) error {
m.Lock()
for k, v := range getServices(m.options.Context) {
s := m.Services[k]
m.Services[k] = addServices(s, v)
m.Services[k] = registry.AddServices(s, v)
}
m.Unlock()
return nil
@@ -76,20 +65,20 @@ func (m *Registry) Options() registry.Options {
return m.options
}
func (m *Registry) GetService(service string) ([]*registry.Service, error) {
func (m *Registry) GetService(name string) ([]*registry.Service, error) {
m.RLock()
s, ok := m.Services[service]
if !ok || len(s) == 0 {
m.RUnlock()
service, ok := m.Services[name]
m.RUnlock()
if !ok {
return nil, registry.ErrNotFound
}
m.RUnlock()
return s, nil
return service, nil
}
func (m *Registry) ListServices() ([]*registry.Service, error) {
m.RLock()
var services []*registry.Service
m.RLock()
for _, service := range m.Services {
services = append(services, service...)
}
@@ -99,11 +88,14 @@ func (m *Registry) ListServices() ([]*registry.Service, error) {
func (m *Registry) Register(s *registry.Service, opts ...registry.RegisterOption) error {
go m.watch(&registry.Result{Action: "update", Service: s})
m.Lock()
services := addServices(m.Services[s.Name], []*registry.Service{s})
m.Services[s.Name] = services
if service, ok := m.Services[s.Name]; !ok {
m.Services[s.Name] = []*registry.Service{s}
} else {
m.Services[s.Name] = registry.AddServices(service, []*registry.Service{s})
}
m.Unlock()
return nil
}
@@ -111,9 +103,15 @@ func (m *Registry) Deregister(s *registry.Service) error {
go m.watch(&registry.Result{Action: "delete", Service: s})
m.Lock()
services := delServices(m.Services[s.Name], []*registry.Service{s})
m.Services[s.Name] = services
if service, ok := m.Services[s.Name]; ok {
if service := registry.DelServices(service, []*registry.Service{s}); len(service) == 0 {
delete(m.Services, s.Name)
} else {
m.Services[s.Name] = service
}
}
m.Unlock()
return nil
}