DOMDataTreeIdentifier inside a shard is heavily reused. Do not trust
the user to give us an optimized YangInstanceIdentifier but try
optimizing it.
Change-Id: I8a73b21562393a5f9100359d5ffaf3e2af057b6e
Signed-off-by: Robert Varga <rovarga@cisco.com>
(cherry picked from commit
7488878f65eef4396e5985f2228fbbad2f05d536)
* A unique identifier for a particular subtree. It is composed of the logical
* data store type and the instance identifier of the root node.
*/
-public final class DOMDataTreeIdentifier implements Immutable, Path<DOMDataTreeIdentifier>, Serializable, Comparable<DOMDataTreeIdentifier> {
+public final class DOMDataTreeIdentifier implements Immutable, Path<DOMDataTreeIdentifier>, Serializable,
+ Comparable<DOMDataTreeIdentifier> {
private static final long serialVersionUID = 1L;
+
private final YangInstanceIdentifier rootIdentifier;
private final LogicalDatastoreType datastoreType;
return datastoreType == other.datastoreType && rootIdentifier.contains(other.rootIdentifier);
}
+ public DOMDataTreeIdentifier toOptimized() {
+ final YangInstanceIdentifier opt = rootIdentifier.toOptimized();
+ return opt == rootIdentifier ? this : new DOMDataTreeIdentifier(datastoreType, opt);
+ }
+
@Override
public int hashCode() {
final int prime = 31;
public static InMemoryDOMDataTreeShard create(final DOMDataTreeIdentifier id,
final Executor dataTreeChangeExecutor,
final int maxDataChangeListenerQueueSize) {
- return new InMemoryDOMDataTreeShard(id, dataTreeChangeExecutor,
+ return new InMemoryDOMDataTreeShard(id.toOptimized(), dataTreeChangeExecutor,
maxDataChangeListenerQueueSize, DEFAULT_SUBMIT_QUEUE_SIZE);
}
final Executor dataTreeChangeExecutor,
final int maxDataChangeListenerQueueSize,
final int submitQueueSize) {
- return new InMemoryDOMDataTreeShard(id, dataTreeChangeExecutor,
+ return new InMemoryDOMDataTreeShard(id.toOptimized(), dataTreeChangeExecutor,
maxDataChangeListenerQueueSize, submitQueueSize);
}
import java.util.HashMap;
import java.util.Map;
-import java.util.Map.Entry;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
abstract class ModificationContextNodeBuilder<T extends WriteableModificationNode> {
}
final T build() {
- HashMap<PathArgument, WriteableModificationNode> builtChildren =
- new HashMap<PathArgument, WriteableModificationNode>(boundaryChildren);
- for (Entry<PathArgument, InteriorNodeBuilder> interiorNode : interiorChildren.entrySet()) {
- WriteableModificationNode builded = interiorNode.getValue().build();
+ final Map<PathArgument, WriteableModificationNode> builtChildren = new HashMap<>(boundaryChildren);
+ for (InteriorNodeBuilder interiorNode : interiorChildren.values()) {
+ WriteableModificationNode builded = interiorNode.build();
builtChildren.put(builded.getIdentifier(), builded);
}