diff --git a/controller/northbound/server/networkElement.go b/controller/northbound/server/networkElement.go index 473a2fe417364ea7d195aa9999298e60878fe24a..89407828b56b8574ae605da29d5a46d6e2994be0 100644 --- a/controller/northbound/server/networkElement.go +++ b/controller/northbound/server/networkElement.go @@ -723,49 +723,67 @@ func (n *NetworkElementServer) addMne(ctx context.Context, name string, opt *tpb mne, err := nucleus.NewNetworkElement(name, networkElementID, opt, pndID, plugin, conflict.Metadata{ResourceVersion: 0}) if err != nil { - plugin.Remove() + if pluginRmErr := plugin.Remove(); err != nil { + return uuid.Nil, pluginRmErr + } return uuid.Nil, err } if mne.IsTransportValid() { - resp, err := n.getPath(ctx, mne, "/") - if err != nil { - plugin.Remove() - return uuid.Nil, err - } - - err = mne.ProcessResponse(resp) + err := n.initialNetworkElementRootPathRequest(ctx, mne, plugin) if err != nil { - plugin.Remove() return uuid.Nil, err } err = n.mneService.Add(mne) if err != nil { - plugin.Remove() + if pluginRmErr := plugin.Remove(); err != nil { + return uuid.Nil, pluginRmErr + } return uuid.Nil, err } err = n.pluginService.Add(plugin) if err != nil { - if err := plugin.Remove(); err != nil { - return uuid.Nil, status.Errorf(codes.Internal, "failed to clean up plugin: ", err) + if pluginRmErr := plugin.Remove(); err != nil { + return uuid.Nil, pluginRmErr } if err := n.mneService.Delete(mne); err != nil { - return uuid.Nil, status.Errorf(codes.Internal, "failed to clean up device: ", err) + return uuid.Nil, err } return uuid.Nil, err } n.networkElementWatchter.SubscribeToNetworkElement(mne, config.GetGnmiSubscriptionPaths(), nil) } else { - plugin.Remove() - return uuid.Nil, status.Errorf(codes.InvalidArgument, "invalid transport data provided") + if pluginRmErr := plugin.Remove(); err != nil { + return uuid.Nil, pluginRmErr + } + return uuid.Nil, fmt.Errorf("invalid transport data provided") } return mne.ID(), nil } +func (n *NetworkElementServer) initialNetworkElementRootPathRequest(ctx context.Context, mne networkelement.NetworkElement, plugin plugin.Plugin) error { + resp, err := n.getPath(ctx, mne, "/") + if err != nil { + if pluginRmErr := plugin.Remove(); err != nil { + return pluginRmErr + } + return err + } + + err = mne.ProcessResponse(resp) + if err != nil { + if pluginRmErr := plugin.Remove(); err != nil { + return pluginRmErr + } + return err + } + return nil +} + // SetChangeList sets a list of changes. func (n *NetworkElementServer) SetChangeList(ctx context.Context, request *mnepb.SetChangeListRequest) (*mnepb.SetChangeListResponse, error) { labels := prometheus.Labels{"service": "mne", "rpc": "set"}