Skip to content
Snippets Groups Projects
Commit 28d5313e authored by Fabian Seidl's avatar Fabian Seidl
Browse files

changed device watcher to use service manager and not require...

changed device watcher to use service manager and not require pndImplementation anymore, fixed controller_test
parent a8ce38b1
No related branches found
No related tags found
1 merge request!416Resolve "Refactor how PNDs are implemented in the code"
Pipeline #130062 failed
This commit is part of merge request !416. Comments created here will be created in the context of that merge request.
...@@ -41,7 +41,7 @@ type NetworkDomain interface { ...@@ -41,7 +41,7 @@ type NetworkDomain interface {
// LoadedPnd represents a PND that was loaded. // LoadedPnd represents a PND that was loaded.
type LoadedPnd struct { type LoadedPnd struct {
ID string `json:"_id" bson:"_id"` ID string `json:"id" bson:"id"`
Name string `json:"name,omitempty"` Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"` Description string `json:"description,omitempty"`
} }
...@@ -8,7 +8,6 @@ import ( ...@@ -8,7 +8,6 @@ import (
"code.fbi.h-da.de/danet/gosdn/controller/customerrs" "code.fbi.h-da.de/danet/gosdn/controller/customerrs"
"code.fbi.h-da.de/danet/gosdn/controller/event" "code.fbi.h-da.de/danet/gosdn/controller/event"
eventInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/event" eventInterfaces "code.fbi.h-da.de/danet/gosdn/controller/interfaces/event"
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkelement"
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/transport"
"code.fbi.h-da.de/danet/gosdn/controller/nucleus/types" "code.fbi.h-da.de/danet/gosdn/controller/nucleus/types"
...@@ -22,7 +21,7 @@ import ( ...@@ -22,7 +21,7 @@ import (
const ( const (
subscribeSampleInterval uint64 = 1000000000 // 1 second in nanoseconds subscribeSampleInterval uint64 = 1000000000 // 1 second in nanoseconds
// TODO: These gNMI options are adjusted to arista gNMI fork. Change when switching to native gNMI. // Note: These gNMI options are adjusted to arista gNMI fork. Change when switching to native gNMI.
gNMISubscribeMode string = "stream" gNMISubscribeMode string = "stream"
gNMIStreamMode string = "on_change" gNMIStreamMode string = "on_change"
) )
...@@ -63,37 +62,38 @@ func (n *NetworkElementWatcher) SubToNetworkElements(paths [][]string, opts *gnm ...@@ -63,37 +62,38 @@ func (n *NetworkElementWatcher) SubToNetworkElements(paths [][]string, opts *gnm
} }
} }
pnds, err := n.serviceManager.PndService.GetAll() mnes, err := n.serviceManager.MneService.GetAll()
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return
} }
for _, pnd := range pnds { for _, mne := range mnes {
n.subscribeToPndNetworkElements(pnd, opts) n.subscribeToPndNetworkElements(mne, opts)
} }
} }
func (n *NetworkElementWatcher) subscribeToPndNetworkElements(pnd networkdomain.NetworkDomain, opts *gnmi.SubscribeOptions) { func (n *NetworkElementWatcher) subscribeToPndNetworkElements(mne networkelement.NetworkElement, opts *gnmi.SubscribeOptions) {
for _, mne := range pnd.NetworkElements() { subID := uuid.New()
subID := uuid.New()
stopContext, cancel := context.WithCancel(context.Background()) stopContext, cancel := context.WithCancel(context.Background())
n.addToNetworkElementSubscriptions(subID, &networkelementSubscriptionHelper{ n.addToNetworkElementSubscriptions(subID, &networkelementSubscriptionHelper{
stopSubscribeCtx: stopContext, stopSubscribeCtx: stopContext,
stopFunc: cancel, stopFunc: cancel,
}) })
go n.callSubscribe(stopContext, pnd.ID().String(), mne, opts)
} go n.callSubscribe(stopContext, mne, opts)
} }
func (n *NetworkElementWatcher) callSubscribe(stopContext context.Context, pndID string, mne networkelement.NetworkElement, opts *gnmi.SubscribeOptions) { func (n *NetworkElementWatcher) callSubscribe(stopContext context.Context, mne networkelement.NetworkElement, opts *gnmi.SubscribeOptions) {
gNMIOptionsCtx := context.Background() gNMIOptionsCtx := context.Background()
gNMIOptionsCtx = context.WithValue(gNMIOptionsCtx, types.CtxKeyOpts, opts) gNMIOptionsCtx = context.WithValue(gNMIOptionsCtx, types.CtxKeyOpts, opts)
// SubscriptionInformation contains pnd ID, network element ID and name to be used in the internal subscribe to check // SubscriptionInformation contains pnd ID, network element ID and name to be used in the internal subscribe to check
// from which network element a response was sent // from which network element a response was sent
if err := mne.Transport().ControlPlaneSubscribe(gNMIOptionsCtx, n.handleSubscribeResponse, &transport.SubscriptionInformation{ if err := mne.Transport().ControlPlaneSubscribe(gNMIOptionsCtx, n.handleSubscribeResponse, &transport.SubscriptionInformation{
PndID: pndID, //TODO(PND): add pndID here, when adding pndID as reference to MNE!
//PndID: pndID,
NetworkElementID: mne.ID().String(), NetworkElementID: mne.ID().String(),
NetworkElementName: mne.Name(), NetworkElementName: mne.Name(),
StopContext: stopContext, StopContext: stopContext,
...@@ -148,17 +148,7 @@ func (n *NetworkElementWatcher) handleSubscribeResponse(resp *gpb.SubscribeRespo ...@@ -148,17 +148,7 @@ func (n *NetworkElementWatcher) handleSubscribeResponse(resp *gpb.SubscribeRespo
} }
func (n *NetworkElementWatcher) handleSubscribeResponseUpdate(resp *gpb.SubscribeResponse_Update, subscriptionInfo *transport.SubscriptionInformation) { func (n *NetworkElementWatcher) handleSubscribeResponseUpdate(resp *gpb.SubscribeResponse_Update, subscriptionInfo *transport.SubscriptionInformation) {
pndID, err := uuid.Parse(subscriptionInfo.PndID) mne, err := n.serviceManager.MneService.Get(store.Query{ID: uuid.MustParse(subscriptionInfo.NetworkElementID)})
if err != nil {
log.Error(err)
}
pnd, err := n.serviceManager.PndService.Get(store.Query{ID: pndID})
if err != nil {
log.Error(err)
}
mne, err := pnd.GetNetworkElement(subscriptionInfo.NetworkElementID)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment