[YANGTOOLS-374] Continuous WARN logs org.opendaylight.yangtools.yang-data-impl - 0.7.0.SNAPSHOT | Invocation of inefficient entrySet Created: 18/Nov/14  Updated: 10/Apr/22  Resolved: 19/Nov/14

Status: Resolved
Project: yangtools
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug
Reporter: Flavio Fernandes Assignee: Robert Varga
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


Issue Links:
Blocks
blocks YANGTOOLS-367 yang-data-impl: decrease memory overh... Resolved
Duplicate
is duplicated by CONTROLLER-1027 Exception : Invocation of inefficient... Resolved
External issue ID: 2401

 Description   

When doing a simple neutron stack, I see endless logs entries that look
like this [1]. Log is pretty much non-useable with all the noise generated.

I suspect that this issue is related to this commit:

$ grep -lr "Invocation of inefficient entrySet" *
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/UnmodifiableChildrenMap.java
[Flavios-MacBook-Pro:yangtools.git]$
[Flavios-MacBook-Pro:yangtools.git]$ git log yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/UnmodifiableChildrenMap.java
commit 59d197fc60bccd1fef2e3bef39c859f12a9c1ae8
Author: Robert Varga <rovarga@cisco.com>
Date: Thu Nov 13 14:47:26 2014 +0100

BUG-2377: introduce internal UnmodifiableChildrenMap

This new class acts a replacement of java.util.Collection's version of
the same. Unlike the standard class, this one does not retain cached
versions of keySet and entrySet, since those are unused anyway. We can
also perform an instanceof check, which should speed up operations.
Finally, we check for map emptiness and use Collections.emptyMap()
when possible.

Change-Id: I84c8ac428d6b207fafccf8cc898f0555b104a4ee
Signed-off-by: Robert Varga <rovarga@cisco.com>

[1]: https://gist.github.com/c674afa3f930e7c36358

2014-11-18 11:22:52,813 | WARN | ds-oper-thread-0 | UnmodifiableChildrenMap | 253 - org.opendaylight.yangtools.yang-data-impl - 0.7.0.SNAPSHOT | Invocation of inefficient entrySet()
java.lang.Throwable
at org.opendaylight.yangtools.yang.data.impl.schema.nodes.UnmodifiableChildrenMap.entrySet(UnmodifiableChildrenMap.java:118)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at java.util.HashMap.putAllForCreate(HashMap.java:554)[:1.7.0_67]
at java.util.HashMap.<init>(HashMap.java:298)[:1.7.0_67]
at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.AbstractImmutableDataContainerNodeBuilder.checkDirty(AbstractImmutableDataContainerNodeBuilder.java:65)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.AbstractImmutableDataContainerNodeBuilder.withChild(AbstractImmutableDataContainerNodeBuilder.java:81)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.AbstractImmutableDataContainerNodeAttrBuilder.withChild(AbstractImmutableDataContainerNodeAttrBuilder.java:55)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder.withChild(ImmutableMapEntryNodeBuilder.java:89)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder.withChild(ImmutableMapEntryNodeBuilder.java:22)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.AbstractImmutableDataContainerNodeBuilder.addChild(AbstractImmutableDataContainerNodeBuilder.java:102)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder.addChild(ImmutableMapEntryNodeBuilder.java:22)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.AbstractImmutableDataContainerNodeBuilder.addChild(AbstractImmutableDataContainerNodeBuilder.java:21)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.mutateChildren(NormalizedNodeContainerModificationStrategy.java:127)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.applySubtreeChange(NormalizedNodeContainerModificationStrategy.java:154)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.DataNodeContainerModificationStrategy$ListEntryModificationStrategy.applySubtreeChange(DataNodeContainerModificationStrategy.java:133)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.applyMerge(NormalizedNodeContainerModificationStrategy.java:142)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:213)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.mutateChildren(NormalizedNodeContainerModificationStrategy.java:123)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.applySubtreeChange(NormalizedNodeContainerModificationStrategy.java:154)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy$UnorderedMapModificationStrategy.applySubtreeChange(NormalizedNodeContainerModificationStrategy.java:312)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.applyMerge(NormalizedNodeContainerModificationStrategy.java:142)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:213)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.mutateChildren(NormalizedNodeContainerModificationStrategy.java:123)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.NormalizedNodeContainerModificationStrategy.applySubtreeChange(NormalizedNodeContainerModificationStrategy.java:154)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.DataNodeContainerModificationStrategy$AugmentationModificationStrategy.applySubtreeChange(DataNodeContainerModificationStrategy.java:96)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaAwareApplyOperation.apply(SchemaAwareApplyOperation.java:209)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeModification.resolveSnapshot(InMemoryDataTreeModification.java:124)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeModification.readNode(InMemoryDataTreeModification.java:107)[253:org.opendaylight.yangtools.yang-data-impl:0.7.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.dom.store.impl.SnapshotBackedWriteTransaction.readSnapshotNode(SnapshotBackedWriteTransaction.java:129)[313:org.opendaylight.controller.sal-inmemory-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.dom.store.impl.SnapshotBackedReadWriteTransaction.read(SnapshotBackedReadWriteTransaction.java:49)[313:org.opendaylight.controller.sal-inmemory-datastore:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.dom.broker.impl.DOMForwardedReadWriteTransaction.read(DOMForwardedReadWriteTransaction.java:47)[307:org.opendaylight.controller.sal-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedTransaction.doRead(AbstractForwardedTransaction.java:63)[310:org.opendaylight.controller.sal-binding-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.BindingDataReadWriteTransactionImpl.read(BindingDataReadWriteTransactionImpl.java:31)[310:org.opendaylight.controller.sal-binding-broker-impl:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.statistics.manager.impl.StatListenCommitFlow$1.applyOperation(StatListenCommitFlow.java:148)[339:org.opendaylight.controller.md.statistics-manager:1.2.0.SNAPSHOT]
at org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerImpl.run(StatisticsManagerImpl.java:196)[339:org.opendaylight.controller.md.statistics-manager:1.2.0.SNAPSHOT]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_67]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_67]
at java.lang.Thread.run(Thread.java:745)[:1.7.0_67]



 Comments   
Comment by Robert Varga [ 18/Nov/14 ]

Sorry, I forgot HashMap calls it internally.

Comment by Robert Varga [ 18/Nov/14 ]

https://git.opendaylight.org/gerrit/12924

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