mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-21 12:22:18 +02:00
Fix race condition when processing first Update of gNMI Subscribe RPC
We simply update the subscription map before starting the RPC Change-Id: I0cedea3ef8415e29d021fc7d396d84cb9a2a33ed
This commit is contained in:
parent
a1cabe50a5
commit
67a317d0f0
@ -27,7 +27,6 @@ import gnmi.Gnmi.Subscription;
|
|||||||
import gnmi.Gnmi.SubscriptionList;
|
import gnmi.Gnmi.SubscriptionList;
|
||||||
import gnmi.Gnmi.SubscriptionMode;
|
import gnmi.Gnmi.SubscriptionMode;
|
||||||
import gnmi.Gnmi.Update;
|
import gnmi.Gnmi.Update;
|
||||||
import org.onosproject.gnmi.api.GnmiClient;
|
|
||||||
import org.onosproject.gnmi.api.GnmiController;
|
import org.onosproject.gnmi.api.GnmiController;
|
||||||
import org.onosproject.gnmi.api.GnmiEvent;
|
import org.onosproject.gnmi.api.GnmiEvent;
|
||||||
import org.onosproject.gnmi.api.GnmiEventListener;
|
import org.onosproject.gnmi.api.GnmiEventListener;
|
||||||
@ -155,34 +154,25 @@ class GnmiDeviceStateSubscriber {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GnmiClient client = gnmiController.getClient(deviceId);
|
// Subscribe for the new set of ports.
|
||||||
|
deviceSubscribed.put(deviceId, ports);
|
||||||
|
|
||||||
SubscriptionList.Builder subscriptionList = SubscriptionList.newBuilder();
|
// Send subscription request.
|
||||||
subscriptionList.setMode(SubscriptionList.Mode.STREAM);
|
final SubscriptionList subscriptionList = SubscriptionList.newBuilder()
|
||||||
subscriptionList.setUpdatesOnly(true);
|
.setMode(SubscriptionList.Mode.STREAM)
|
||||||
|
.setUpdatesOnly(true)
|
||||||
ports.forEach(port -> {
|
.addAllSubscription(ports.stream().map(
|
||||||
String portName = port.name();
|
port -> Subscription.newBuilder()
|
||||||
// Subscribe /interface/interface[name=port-name]/state/oper-status
|
.setPath(interfaceOperStatusPath(port.name()))
|
||||||
Path subscribePath = interfaceOperStatusPath(portName);
|
|
||||||
Subscription interfaceOperStatusSub =
|
|
||||||
Subscription.newBuilder()
|
|
||||||
.setPath(subscribePath)
|
|
||||||
.setMode(SubscriptionMode.ON_CHANGE)
|
.setMode(SubscriptionMode.ON_CHANGE)
|
||||||
|
.build()).collect(Collectors.toList()))
|
||||||
.build();
|
.build();
|
||||||
// TODO: more state subscription
|
gnmiController.getClient(deviceId).subscribe(
|
||||||
subscriptionList.addSubscription(interfaceOperStatusSub);
|
SubscribeRequest.newBuilder()
|
||||||
});
|
.setSubscribe(subscriptionList)
|
||||||
|
.build());
|
||||||
SubscribeRequest subscribeRequest = SubscribeRequest.newBuilder()
|
|
||||||
.setSubscribe(subscriptionList.build())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
client.subscribe(subscribeRequest);
|
|
||||||
|
|
||||||
log.info("Started gNMI subscription for {} ports on {}", ports.size(), deviceId);
|
log.info("Started gNMI subscription for {} ports on {}", ports.size(), deviceId);
|
||||||
|
|
||||||
deviceSubscribed.put(deviceId, ports);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleGnmiUpdate(GnmiUpdate eventSubject) {
|
private void handleGnmiUpdate(GnmiUpdate eventSubject) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user