[NETVIRT-603] Adding rules to the security groups does not take effect Created: 06/Apr/17  Updated: 19/Oct/17  Resolved: 25/Sep/17

Status: Resolved
Project: netvirt
Component/s: General
Affects Version/s: Carbon
Fix Version/s: None

Type: Bug
Reporter: Rong Xu Assignee: Unassigned
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


External issue ID: 8171

 Description   

I added a rule to the security group, and then the controller throws an exception.
The rule does not take effect.

2017-04-06 12:07:14,538 | ERROR | ChangeHandler-12 | AsyncDataTreeChangeListenerBase | 346 - org.opendaylight.genius.mdsalutil-api - 0.2.0.SNAPSHOT | Thread terminated due to uncaught exception: AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-12
java.lang.IllegalArgumentException: All keys must be specified for class org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterfaceKey. Missing key is getName. Supplied key is ElanInterfaceKey []
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)[65:com.google.guava:18.0.0]
at org.opendaylight.yangtools.binding.data.codec.impl.ValueContext.getAndSerialize(ValueContext.java:43)[117:org.opendaylight.mdsal.binding-dom-codec:0.10.0.SNAPSHOT]
at org.opendaylight.yangtools.binding.data.codec.impl.IdentifiableItemCodec.serialize(IdentifiableItemCodec.java:116)[117:org.opendaylight.mdsal.binding-dom-codec:0.10.0.SNAPSHOT]
at org.opendaylight.yangtools.binding.data.codec.impl.IdentifiableItemCodec.serialize(IdentifiableItemCodec.java:30)[117:org.opendaylight.mdsal.binding-dom-codec:0.10.0.SNAPSHOT]
at org.opendaylight.yangtools.binding.data.codec.impl.KeyedListNodeCodecContext.addYangPathArgument(KeyedListNodeCodecContext.java:52)[117:org.opendaylight.mdsal.binding-dom-codec:0.10.0.SNAPSHOT]
at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.bindingPathArgumentChild(DataObjectCodecContext.java:187)[117:org.opendaylight.mdsal.binding-dom-codec:0.10.0.SNAPSHOT]
at org.opendaylight.yangtools.binding.data.codec.impl.BindingCodecContext.getCodecContextNode(BindingCodecContext.java:127)[117:org.opendaylight.mdsal.binding-dom-codec:0.10.0.SNAPSHOT]
at org.opendaylight.yangtools.binding.data.codec.impl.InstanceIdentifierCodec.serialize(InstanceIdentifierCodec.java:29)[117:org.opendaylight.mdsal.binding-dom-codec:0.10.0.SNAPSHOT]
at org.opendaylight.yangtools.binding.data.codec.impl.InstanceIdentifierCodec.serialize(InstanceIdentifierCodec.java:19)[117:org.opendaylight.mdsal.binding-dom-codec:0.10.0.SNAPSHOT]
at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry.toYangInstanceIdentifier(BindingNormalizedNodeCodecRegistry.java:87)[117:org.opendaylight.mdsal.binding-dom-codec:0.10.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toYangInstanceIdentifierBlocking(BindingToNormalizedNodeCodec.java:101)[173:org.opendaylight.controller.sal-binding-broker-impl:1.5.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedTransaction.doRead(AbstractForwardedTransaction.java:64)[173:org.opendaylight.controller.sal-binding-broker-impl:1.5.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMReadTransactionAdapter.read(BindingDOMReadTransactionAdapter.java:31)[173:org.opendaylight.controller.sal-binding-broker-impl:1.5.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.utils.AclServiceUtils.read(AclServiceUtils.java:155)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.utils.AclServiceUtils.getElanInterfaceByElanInterfaceName(AclServiceUtils.java:626)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.utils.AclServiceUtils.getElanIdFromInterface(AclServiceUtils.java:616)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.StatefulEgressAclServiceImpl.syncSpecificAclFlow(StatefulEgressAclServiceImpl.java:79)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.AbstractEgressAclServiceImpl.programAceRule(AbstractEgressAclServiceImpl.java:203)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.AbstractAclServiceImpl.applyAce(AbstractAclServiceImpl.java:229)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.AclServiceManagerImpl.notifyAce(AclServiceManagerImpl.java:86)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.listeners.AclEventListener.updateAceRules(AclEventListener.java:98)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.listeners.AclEventListener.update(AclEventListener.java:81)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.netvirt.aclservice.listeners.AclEventListener.update(AclEventListener.java:33)[395:org.opendaylight.netvirt.aclservice-impl:0.4.0.SNAPSHOT]
at org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase$DataTreeChangeHandler.run(AsyncDataTreeChangeListenerBase.java:149)[346:org.opendaylight.genius.mdsalutil-api:0.2.0.SNAPSHOT]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_121]
at java.lang.Thread.run(Thread.java:745)[:1.8.0_121]



 Comments   
Comment by Rong Xu [ 06/Apr/17 ]

In AclInterfaceStateListener

When you new an instance of AclInterface, you do not call setInterfaceId() to set interface id.

And then, when you update acl rule, you will get a null as key and cause an exception.

private AclInterface updateAclInterfaceCache(Interface dataObjectModification) {
String interfaceId = dataObjectModification.getName();
AclInterface aclInterface = AclInterfaceCacheUtil.getAclInterfaceFromCache(interfaceId);
if (aclInterface == null)

{ aclInterface = new AclInterface(); AclInterfaceCacheUtil.addAclInterfaceToCache(interfaceId, aclInterface); }

aclInterface.setDpId(AclServiceUtils.getDpIdFromIterfaceState(dataObjectModification));
aclInterface.setLPortTag(dataObjectModification.getIfIndex());
aclInterface.setIsMarkedForDelete(false);
return aclInterface;
}

Comment by Rong Xu [ 06/Apr/17 ]

https://git.opendaylight.org/gerrit/#/c/54432/

Comment by Sam Hague [ 06/Apr/17 ]

Let's keep this open until the patch is merged.

Comment by Sam Hague [ 25/Sep/17 ]

https://git.opendaylight.org/gerrit/#/c/54409/

Generated at Wed Feb 07 20:21:59 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.