|
Services Function Chaining tried to commit the modified node below to the datastore but there is a failure. Modified node is clearly different from original node but datastore complains with the message below.
This functionality is extremely important for SFC OVS integration.
ERROR MESSAGE:
==============
2015-05-13 01:32:23,511 | ERROR | ult-dispatcher-3 | Shard | 208 - org.opendaylight.controller.sal-akka-raft - 1.2.0.SNAPSHOT | member-1-shard-default-config An exception occurred while preCommitting transaction member-1-txn-24
java.lang.IllegalArgumentException: Unmodified candidate should never be in the payload
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeNode(DataTreeCandidatePayload.java:81)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeChildren(DataTreeCandidatePayload.java:60)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeNode(DataTreeCandidatePayload.java:74)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeChildren(DataTreeCandidatePayload.java:60)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeNode(DataTreeCandidatePayload.java:74)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeChildren(DataTreeCandidatePayload.java:60)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeNode(DataTreeCandidatePayload.java:74)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeChildren(DataTreeCandidatePayload.java:60)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeNode(DataTreeCandidatePayload.java:74)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeChildren(DataTreeCandidatePayload.java:60)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeNode(DataTreeCandidatePayload.java:74)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.writeChildren(DataTreeCandidatePayload.java:60)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.DataTreeCandidatePayload.create(DataTreeCandidatePayload.java:99)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.Shard.continueCommit(Shard.java:322)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCommit(ShardCommitCoordinator.java:339)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.doCanCommit(ShardCommitCoordinator.java:296)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleCanCommit(ShardCommitCoordinator.java:254)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.ShardCommitCoordinator.handleBatchedModifications(ShardCommitCoordinator.java:187)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.Shard.handleBatchedModifications(Shard.java:423)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.cluster.datastore.Shard.onReceiveCommand(Shard.java:228)[215:org.opendaylight.controller.sal-distributed-datastore:1.2.0.SNAPSHOT]
at akka.persistence.UntypedPersistentActor.onReceive(Eventsourced.scala:430)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at org.opendaylight.controller.cluster.common.actor.MeteringBehavior.apply(MeteringBehavior.java:97)[207:org.opendaylight.controller.sal-clustering-commons:1.2.0.SNAPSHOT]
at akka.actor.ActorCell$$anonfun$become$1.applyOrElse(ActorCell.scala:534)[200:com.typesafe.akka.actor:2.3.10]
at akka.persistence.Recovery$State$class.process(Recovery.scala:30)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.ProcessorImpl$$anon$2.process(Processor.scala:103)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.ProcessorImpl$$anon$2.aroundReceive(Processor.scala:114)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Recovery$class.aroundReceive(Recovery.scala:265)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.UntypedPersistentActor.akka$persistence$Eventsourced$$super$aroundReceive(Eventsourced.scala:428)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Eventsourced$$anon$2.doAroundReceive(Eventsourced.scala:82)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Eventsourced$$anon$2.aroundReceive(Eventsourced.scala:78)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.Eventsourced$class.aroundReceive(Eventsourced.scala:369)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.persistence.UntypedPersistentActor.aroundReceive(Eventsourced.scala:428)[205:com.typesafe.akka.persistence.experimental:2.3.10]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)[200:com.typesafe.akka.actor:2.3.10]
at akka.actor.ActorCell.invoke(ActorCell.scala:487)[200:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)[200:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.run(Mailbox.scala:221)[200:com.typesafe.akka.actor:2.3.10]
at akka.dispatch.Mailbox.exec(Mailbox.scala:231)[200:com.typesafe.akka.actor:2.3.10]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[197:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.pollAndExecAll(ForkJoinPool.java:1253)[197:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1346)[197:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[197:org.scala-lang.scala-library:2.10.4.v20140209-180020-VFINAL-b66a39653b]
ORIGINAL NODE:
2015-05-13 01:32:23,496 | ERROR | lt-dispatcher-31 | SfcOvsNodeDataListener | 342 - org.opendaylight.sfc.ovs - 0.1.0.SNAPSHOT |
Original Node: Node{getNodeId=Uri [_value=ovsdb://192.168.1.27:37275/bridge/br-tun], getTerminationPoint=[TerminationPoint{getTpId=Uri [_value=br-tun], augmentations={interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation=OvsdbTerminationPointAugmentation
{getInterfaceType=class org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeInternal, getInterfaceUuid=Uuid [_value=2d6002ea-cb17-4f32-a4cf-ccee06adb6a7], getName=br-tun, getOfport=65534, getPortUuid=Uuid [_value=4e787c70-c862-4366-b922-e652294134f1]}}}], augmentations={interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation=OvsdbBridgeAugmentation{getBridgeName=OvsdbBridgeName [_value=br-tun], getBridgeUuid=Uuid [_value=45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f], getDatapathId=DatapathId [_value=00:00:fa:cd:e8:45:9a:44], getDatapathType=class org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeSystem, getManagedBy=OvsdbNodeRef [_value=KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=ovsdb:1]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=ovsdb://192.168.1.27:37275]]]]}]}}}
2015-05-13 01:32:23,499 | ERROR | lt-dispatcher-31 | SfcOvsNodeDataListener | 342 - org.opendaylight.sfc.ovs - 0.1.0.SNAPSHOT |
MODIFIED NODE:
=============
Modified OVS Node : Node{getNodeId=Uri [_value=ovsdb://192.168.1.27:37275/bridge/br-tun], getTerminationPoint=[TerminationPoint{getTpId=Uri [_value=vx1], augmentations={interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation=OvsdbTerminationPointAugmentation{getInterfaceType=class org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeVxlan, getInterfaceUuid=Uuid [_value=9d3d208b-5e60-4fc9-9fc6-5a30f6e4d02f], getName=vx1, getOptions=[Options{getOption=remote_ip, getValue=10.0.0.1, augmentations={}}], getPortUuid=Uuid [_value=a1a0a2b2-7043-4b49-a5ad-c3bd44793fcc]}}}, TerminationPoint{getTpId=Uri [_value=br-tun], augmentations={interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation=OvsdbTerminationPointAugmentation{getInterfaceType=class org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeInternal, getInterfaceUuid=Uuid [_value=2d6002ea-cb17-4f32-a4cf-ccee06adb6a7], getName=br-tun, getOfport=65534, getPortUuid=Uuid [_value=4e787c70-c862-4366-b922-e652294134f1]}
}}], augmentations={interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation=OvsdbBridgeAugmentation{getBridgeName=OvsdbBridgeName [_value=br-tun], getBridgeUuid=Uuid [_value=45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f], getDatapathId=DatapathId [_value=00:00:fa:cd:e8:45:9a:44], getDatapathType=class org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeSystem, getManagedBy=OvsdbNodeRef [_value=KeyedInstanceIdentifier
{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=ovsdb:1]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=ovsdb://192.168.1.27:37275]]]]}
]}}}
|
|
I should point out that we try to write the modified node with a write merge.
|
|
I should point out that we try to commit the modified node with a write merge, not a overwrite.
|
|
Hi Moiz,
can you take a look at this? It is really important and pressing.
thanks,
|
|
Reinaldo,
Couple of questions,
1. Is this happening in code that has been merged into the SFC project?
2. If it has been, what are the steps to reproduce this problem?
I need to create a unit test to reproduce this problem.
|
|
Steps to reproduce.
1 - Check out SFC distribution or get integration build.
2 - Start an OVS switch with the following configuration:
Manager "tcp:192.168.1.14:6640"
Bridge br-tun
Port br-tun
Interface br-tun
type:internal
The IP address is your ODL's IP address
3 - (Run SFC karaf) or (integration and load all SFC features)
4 - After OVS connects state will be created in SFC. Then use the following command
to update state on OVS:
sudo ovs-vsctl add-port br-tun vx1 – set interface type=vxlan options:local_ip=10.0.0.1
This will create a notification in the OVS->OVSDB->SFC direction. When SFC tries to commit the modified
OVS node configuration to the datastore you will see all those errors and the system will stop operating. Not only this
transaction but any further transactions will not happen
|
|
This appears to be a serialization issue. When Reinaldo disabled persistence things worked fine.
This issue affects persistence and replication so still high priority.
|
|
Yes - DataTreeCandidatePayload is only created for persistence to the journal. I don't know why DataTreeCandidatePayload fails fast is there's a nested unmodified node (would have to ask Robert) but have you tried removing IllegalArgumentException and writing the UNMODIFIED byte? Maybe it's benign or is valid. The read code seems to handle UNMODIFIED.
(In reply to Moiz Raja from comment #6)
> This appears to be a serialization issue. When Reinaldo disabled persistence
> things worked fine.
>
> This issue affects persistence and replication so still high priority.
|
|
As I told Moiz, if I use a write-put (overwrite) instead of write-merge things work better. This is just a data point that I hope helps but I can not use write overwrite.
|
|
So the top-level node is defensive in order to deal with empty transactions. An UNMODIFIED node nested below root is an anomaly, as such nodes should normally be pruned during DataTreeModification.ready().
Reinaldo, can you explain what 'work better' means?
|
|
Slight correction... I believe that in the reproduction instructions:
sudo ovs-vsctl add-port br-tun vx1 – set interface type=vxlan options:local_ip=10.0.0.1
should be replaced with:
sudo ovs-vsctl add-port br-tun vx1 – set interface br-tun options:type=vxlan,local_ip=10.0.0.1
|
|
Works better as in I do not see barf messages with simple OVS transactions but I have not done serious testing because I can not use it.
|
|
Robert, this is not a top level node where this exception happens so as Tom recommends maybe it's ok to just write a UNMODIFIED byte here.
|
|
Reinaldo please try this fix https://git.opendaylight.org/gerrit/20310. Make sure you turn persistence on again.
|
|
I think that this is happening for a specific case. This is the node which appeared as UNMODIFIED
mod
—
NodeModification [identifier=AugmentationIdentifier
{childNames=[(urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-01)ovs-options]}
, modificationType=MERGE, childModification={(urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-01)ovs-options=NodeModification [identifier=(urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-01)ovs-options, modificationType=MERGE, childModification={}]}]
newMeta.data
------------
ImmutableAugmentationNode{nodeIdentifier=AugmentationIdentifier
{childNames=[(urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-01)ovs-options]}
, value=[ImmutableContainerNode{nodeIdentifier=(urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-01)ovs-options, value=[], attributes={}}]}
oldMeta.data
------------
ImmutableAugmentationNode{nodeIdentifier=AugmentationIdentifier
{childNames=[(urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-01)ovs-options]}
, value=[ImmutableContainerNode{nodeIdentifier=(urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-01)ovs-options, value=[], attributes={}}]}
|
|
I tried and the fix worked. I do not see clustering errors and all OVS information appears in SFC.
|
|
I tried to repro in a unit test by writing or merging the same node twice. But it succeeded.
It appears to be a specific case.
As Robert pointed out, InMemoryDataTreeModification.ready() is supposed to prune the tree of UNMODIFIED children. However, in the code path from the ex trace, I don't see where InMemoryDataTreeModification.ready() is called. There are other code paths in CDS (e.g. on recovery) where it is called. It seems like that might be the problem. However I'm unclear at this point exactly where ready() should/would be called.
Regardless, I think your patch is good - we really don't need the code to be that paranoid about UNMODIFIED children. There may be cases where something may not be pruned.
(In reply to Moiz Raja from comment #14)
> I think that this is happening for a specific case. This is the node which
> appeared as UNMODIFIED
>
> mod
> —
>
> NodeModification
> [identifier=AugmentationIdentifier
{childNames=[(urn:cisco:params:xml:ns:yang:
> sfc-sff-ovs?revision=2014-07-01)ovs-options]}
, modificationType=MERGE,
> childModification={(urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-
> 07-01)ovs-options=NodeModification
> [identifier=(urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-
> 01)ovs-options, modificationType=MERGE, childModification={}]}]
>
> newMeta.data
> ------------
>
> ImmutableAugmentationNode{nodeIdentifier=AugmentationIdentifier
{childNames=[(
> urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-01)ovs-options]}
,
> value=[ImmutableContainerNode{nodeIdentifier=(urn:cisco:params:xml:ns:yang:
> sfc-sff-ovs?revision=2014-07-01)ovs-options, value=[], attributes={}}]}
>
> oldMeta.data
> ------------
>
> ImmutableAugmentationNode{nodeIdentifier=AugmentationIdentifier
{childNames=[(
> urn:cisco:params:xml:ns:yang:sfc-sff-ovs?revision=2014-07-01)ovs-options]}
,
> value=[ImmutableContainerNode{nodeIdentifier=(urn:cisco:params:xml:ns:yang:
> sfc-sff-ovs?revision=2014-07-01)ovs-options, value=[], attributes={}}]}
|
|
Did you try restarting the controller? Would also be good to verify the data recovers correctly from persistence.
(In reply to Reinaldo Penno from comment #15)
> I tried and the fix worked. I do not see clustering errors and all OVS
> information appears in SFC.
|
|
Hi Tom,
just tested that as you requested. I restarted the controller and all SFC-OVS info is there.
{
"service-function-forwarders": {
"service-function-forwarder": [
{
"name": "ovsdb://192.168.1.27:39707/bridge/br-tun",
"sff-data-plane-locator": [
{
"name": "vx1",
"service-function-forwarder-ovs:ovs-options":
{
"remote-ip": "10.0.0.1",
"local-ip": "10.0.0.2"
}
,
"data-plane-locator":
{
"ip": "10.0.0.1",
"transport": "service-locator:vxlan-gpe"
}
,
"service-function-forwarder-ovs:ovs-bridge":
{
"bridge-name": "br-tun",
"openflow-node-id": "openflow:275762272115268",
"uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
}
},
{
"name": "br-tun",
"service-function-forwarder-ovs:ovs-options": {},
"service-function-forwarder-ovs:ovs-bridge":
{
"bridge-name": "br-tun",
"openflow-node-id": "openflow:275762272115268",
"uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
}
,
"data-plane-locator":
{
"other-name": "Other",
"transport": "service-locator:other"
}
}
],
"service-function-forwarder-ovs:ovs-bridge":
{
"bridge-name": "br-tun",
"openflow-node-id": "openflow:275762272115268",
"uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
}
,
"service-function-forwarder-ovs:ovs-node":
{
"node-id": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-id='ovsdb://192.168.1.27:39707']"
}
},
{
"name": "ovsdb://192.168.1.27:39717/bridge/br-tun",
"sff-data-plane-locator": [
{
"name": "br-tun",
"service-function-forwarder-ovs:ovs-bridge":
{
"bridge-name": "br-tun",
"openflow-node-id": "openflow:275762272115268",
"uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
}
,
"data-plane-locator":
{
"transport": "service-locator:other",
"other-name": "Other"
}
,
"service-function-forwarder-ovs:ovs-options": {}
},
{
"name": "vx1",
"service-function-forwarder-ovs:ovs-bridge":
{
"bridge-name": "br-tun",
"openflow-node-id": "openflow:275762272115268",
"uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
}
,
"data-plane-locator":
{
"transport": "service-locator:vxlan-gpe",
"ip": "10.0.0.2"
}
,
"service-function-forwarder-ovs:ovs-options":
{
"remote-ip": "10.0.0.1",
"local-ip": "10.0.0.2"
}
}
],
"service-function-forwarder-ovs:ovs-bridge":
{
"bridge-name": "br-tun",
"openflow-node-id": "openflow:275762272115268",
"uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
}
,
"service-function-forwarder-ovs:ovs-node":
{
"node-id": "/network-topology:network-topology/network-topology:topology[network-topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-id='ovsdb://192.168.1.27:39717']"
}
}
]
}
}
|
|
What do you do with ovs-options? That is the child which appears unmodified.
|
|
Cool. I'm good with merging the patch. We can continue looking into why there were UNMODIFIED children but this will unblock you.
(In reply to Reinaldo Penno from comment #18)
> Hi Tom,
>
> just tested that as you requested. I restarted the controller and all
> SFC-OVS info is there.
>
> {
> "service-function-forwarders": {
> "service-function-forwarder": [
> {
> "name": "ovsdb://192.168.1.27:39707/bridge/br-tun",
> "sff-data-plane-locator": [
> {
> "name": "vx1",
> "service-function-forwarder-ovs:ovs-options":
{
> "remote-ip": "10.0.0.1",
> "local-ip": "10.0.0.2"
> }
,
> "data-plane-locator":
{
> "ip": "10.0.0.1",
> "transport": "service-locator:vxlan-gpe"
> }
,
> "service-function-forwarder-ovs:ovs-bridge":
{
> "bridge-name": "br-tun",
> "openflow-node-id": "openflow:275762272115268",
> "uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
> }
> },
> {
> "name": "br-tun",
> "service-function-forwarder-ovs:ovs-options": {},
> "service-function-forwarder-ovs:ovs-bridge":
{
> "bridge-name": "br-tun",
> "openflow-node-id": "openflow:275762272115268",
> "uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
> }
,
> "data-plane-locator":
{
> "other-name": "Other",
> "transport": "service-locator:other"
> }
> }
> ],
> "service-function-forwarder-ovs:ovs-bridge":
{
> "bridge-name": "br-tun",
> "openflow-node-id": "openflow:275762272115268",
> "uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
> }
,
> "service-function-forwarder-ovs:ovs-node":
{
> "node-id":
> "/network-topology:network-topology/network-topology:topology[network-
> topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-
> id='ovsdb://192.168.1.27:39707']"
> }
> },
> {
> "name": "ovsdb://192.168.1.27:39717/bridge/br-tun",
> "sff-data-plane-locator": [
> {
> "name": "br-tun",
> "service-function-forwarder-ovs:ovs-bridge":
{
> "bridge-name": "br-tun",
> "openflow-node-id": "openflow:275762272115268",
> "uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
> }
,
> "data-plane-locator":
{
> "transport": "service-locator:other",
> "other-name": "Other"
> }
,
> "service-function-forwarder-ovs:ovs-options": {}
> },
> {
> "name": "vx1",
> "service-function-forwarder-ovs:ovs-bridge":
{
> "bridge-name": "br-tun",
> "openflow-node-id": "openflow:275762272115268",
> "uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
> }
,
> "data-plane-locator":
{
> "transport": "service-locator:vxlan-gpe",
> "ip": "10.0.0.2"
> }
,
> "service-function-forwarder-ovs:ovs-options":
{
> "remote-ip": "10.0.0.1",
> "local-ip": "10.0.0.2"
> }
> }
> ],
> "service-function-forwarder-ovs:ovs-bridge":
{
> "bridge-name": "br-tun",
> "openflow-node-id": "openflow:275762272115268",
> "uuid": "45e8cdf8-b4d7-449a-b7e9-9fca8409bd7f"
> }
,
> "service-function-forwarder-ovs:ovs-node":
{
> "node-id":
> "/network-topology:network-topology/network-topology:topology[network-
> topology:topology-id='ovsdb:1']/network-topology:node[network-topology:node-
> id='ovsdb://192.168.1.27:39717']"
> }
> }
> ]
> }
> }
|
|
DataTreeModification.ready() is called via ShardDataTree.finishTransaction(), which is invoked from CohortEntry.ready().
|
|
Yup - missed that.
(In reply to Robert Varga from comment #21)
> DataTreeModification.ready() is called via
> ShardDataTree.finishTransaction(), which is invoked from CohortEntry.ready().
|
Generated at Wed Feb 07 19:55:13 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.