Skip to content
Snippets Groups Projects

Resolve "Requesting information from the Controller via NBI takes very long"

1 file
+ 91
0
Compare changes
  • Side-by-side
  • Inline
+ 91
0
 
package nucleus
 
 
import (
 
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/device"
 
"code.fbi.h-da.de/danet/gosdn/controller/store"
 
"github.com/google/uuid"
 
)
 
 
// DeviceServiceMock provides a in-memory implementation for multiple stores.
 
type DeviceServiceMock struct {
 
Store map[uuid.UUID]device.Device
 
nameLookupTable map[string]uuid.UUID
 
}
 
 
// NewDeviceServiceMock returns a specific in-memory store for device service.
 
func NewDeviceServiceMock() device.Service {
 
return &DeviceServiceMock{
 
Store: make(map[uuid.UUID]device.Device),
 
nameLookupTable: make(map[string]uuid.UUID),
 
}
 
}
 
 
// Add adds a item device.Device
 
func (t *DeviceServiceMock) Add(item device.Device) error {
 
_, ok := t.Store[item.ID()]
 
if ok {
 
return nil
 
}
 
 
t.Store[item.ID()] = item
 
t.nameLookupTable[item.Name()] = item.ID()
 
 
return nil
 
}
 
 
// Update updates a item device.Device
 
func (t *DeviceServiceMock) Update(item device.Device) error {
 
_, ok := t.Store[item.ID()]
 
if ok {
 
return nil
 
}
 
 
t.Store[item.ID()] = item
 
t.nameLookupTable[item.Name()] = item.ID()
 
 
return nil
 
}
 
 
// Delete deletes a item device.Device
 
func (t *DeviceServiceMock) Delete(item device.Device) error {
 
delete(t.Store, item.ID())
 
 
return nil
 
}
 
 
// Get gets a item device.Device
 
func (t *DeviceServiceMock) Get(query store.Query) (device.Device, error) {
 
// First search for direct hit on UUID.
 
item, ok := t.Store[query.ID]
 
if !ok {
 
// Second search for name
 
id, ok := t.nameLookupTable[query.Name]
 
if !ok {
 
return nil, nil
 
}
 
 
item, ok := t.Store[id]
 
if !ok {
 
return nil, nil
 
}
 
 
return item, nil
 
}
 
 
return item, nil
 
}
 
 
// GetAll gets all items
 
func (t *DeviceServiceMock) GetAll() ([]device.LoadedDevice, error) {
 
var allItems []device.LoadedDevice
 
 
for _, item := range t.Store {
 
allItems = append(allItems, device.LoadedDevice{
 
ID: item.ID().String(),
 
Name: item.Name(),
 
SBI: item.SBI().ID().String(),
 
})
 
}
 
 
return allItems, nil
 
}
Loading