2 * Copyright © 2018 Orange Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.transportpce.olm.util;
11 import java.math.BigDecimal;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.HashMap;
15 import java.util.List;
17 import java.util.Optional;
18 import org.opendaylight.mdsal.binding.api.DataBroker;
19 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
20 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
21 import org.opendaylight.transportpce.common.NetworkUtils;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.Network;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.Nodes;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.NodesBuilder;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.NodesKey;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.CpToDegree;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.CpToDegreeBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.CpToDegreeKey;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.Mapping;
30 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.MappingBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.MappingKey;
32 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.NodeInfo.OpenroadmVersion;
33 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.NodeInfoBuilder;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.FiberPmd;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.RatioDB;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link.attributes.AmplifiedLink;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link.attributes.AmplifiedLinkKey;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link.attributes.amplified.link.SectionElementBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.span.attributes.LinkConcatenation;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.span.attributes.LinkConcatenationBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.span.attributes.LinkConcatenationKey;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.Link1Builder;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.link.OMSAttributesBuilder;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.link.oms.attributes.SpanBuilder;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLink;
63 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLinkBuilder;
64 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLinkKey;
65 import org.opendaylight.yangtools.yang.binding.Augmentation;
66 import org.opendaylight.yangtools.yang.binding.DataObject;
67 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
68 import org.opendaylight.yangtools.yang.common.Uint16;
69 import org.opendaylight.yangtools.yang.common.Uint32;
71 public final class TransactionUtils {
73 private TransactionUtils() {
77 @SuppressWarnings("unchecked")
78 public static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
80 ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
81 transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object);
82 transaction.commit();// submit(Timeouts.DATASTORE_WRITE, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get();
87 // public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType,
88 // InstanceIdentifier instanceIdentifier,
91 // public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager,
93 // LogicalDatastoreType logicalDatastoreType,
94 // InstanceIdentifier<? extends DataObject> instanceIdentifier)
95 // throws ExecutionException, InterruptedException {
96 // Future<Optional<DeviceTransaction>> deviceTxFuture =
97 // deviceTransactionManager.getDeviceTransaction(nodeId);
98 // if (!deviceTxFuture.get().isPresent()) {
101 // DeviceTransaction deviceTx = deviceTxFuture.get().get();
102 // com.google.common.base.Optional<? extends DataObject> readOpt
103 // = deviceTx.read(logicalDatastoreType, instanceIdentifier).get();
104 // if (!readOpt.isPresent()) {
107 // return readOpt.get();
110 public static Network1 getNullNetwork() {
111 Map<LinkKey, Link> nullMap = null;
112 Network1 network = new Network1Builder().setLink(nullMap).build();
113 Optional.of(network);
117 public static Network1 getEmptyNetwork() {
118 Network1 network = new Network1Builder().setLink(Map.of()).build();
119 Optional.of(network);
123 public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network
124 .rev180226.networks.Network getOverLayNetwork() {
125 SupportingNode supportingNode = new SupportingNodeBuilder()
126 .setNodeRef(new NodeId("node 1"))
127 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
129 NodeBuilder node1Builder = new NodeBuilder()
130 .setNodeId(new NodeId("node 1"))
131 .withKey(new NodeKey(new NodeId("node 1")))
132 .setSupportingNode(Map.of(supportingNode.key(),supportingNode));
133 Map<NodeKey,Node> nodes = new HashMap<>();
134 Node node1 = node1Builder.build();
135 nodes.put(node1.key(),node1);
136 SupportingNode supportingNode2 = new SupportingNodeBuilder()
137 .setNodeRef(new NodeId("node 2"))
138 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
140 NodeBuilder node2Builder = new NodeBuilder()
141 .setNodeId(new NodeId("node 2"))
142 .withKey(new NodeKey(new NodeId("node 2")))
143 .setSupportingNode(Map.of(supportingNode2.key(),supportingNode2));
144 Node node2 = node2Builder.build();
145 nodes.put(node2.key(),node2);
146 SupportingNode supportingNode3 = new SupportingNodeBuilder()
147 .setNodeRef(new NodeId("node 3"))
148 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
150 NodeBuilder node3Builder = new NodeBuilder()
151 .setNodeId(new NodeId("node 3"))
152 .withKey(new NodeKey(new NodeId("node 3")))
153 .setSupportingNode(Map.of(supportingNode3.key(),supportingNode3));
154 Node node3 = node3Builder.build();
155 nodes.put(node3.key(),node3);
156 SupportingNode supportingNode4 = new SupportingNodeBuilder()
157 .setNodeRef(new NodeId("node 4"))
158 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
160 NodeBuilder node4Builder = new NodeBuilder()
161 .setNodeId(new NodeId("node 4"))
162 .withKey(new NodeKey(new NodeId("node 4")))
163 .setSupportingNode(Map.of(supportingNode4.key(),supportingNode4));
164 Node node4 = node4Builder.build();
165 nodes.put(node4.key(),node4);
166 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder
168 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks
171 .setNetworkId(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID));
172 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network network =
173 networkBuilder.build();
174 Optional.of(network);
178 public static Network1 getNetwork() {
179 Map<SupportingLinkKey,SupportingLink> supportingLinks = new HashMap<>();
180 SupportingLink supportingLink1 = new SupportingLinkBuilder()
182 .setNetworkRef(new NetworkId("net1"))
184 SupportingLink supportingLink2 = new SupportingLinkBuilder()
186 .setNetworkRef(new NetworkId("net2"))
188 supportingLinks.put(supportingLink1.key(),supportingLink1);
189 supportingLinks.put(supportingLink2.key(),supportingLink2);
190 Map<LinkKey,Link> links = new HashMap<>();
191 Link link1 = new LinkBuilder()
192 .setLinkId(new LinkId("link 1"))
194 new DestinationBuilder()
195 .setDestNode(new NodeId("node 1"))
196 .setDestTp("dest tp").build())
199 .setSourceNode(new NodeId("node 2"))
200 .setSourceTp("src tp")
202 .setSupportingLink(supportingLinks)
205 Link link2 = new LinkBuilder()
206 .setLinkId(new LinkId("link 2"))
208 new DestinationBuilder()
209 .setDestNode(new NodeId("node 3"))
210 .setDestTp("dest tp")
214 .setSourceNode(new NodeId("node 4"))
215 .setSourceTp("src tp")
217 .setSupportingLink(supportingLinks)
219 links.put(link1.key(),link1);
220 links.put(link2.key(),link2);
221 Network1 network = new Network1Builder().setLink(links).build();
222 Optional.of(network);
226 public static Network1 getNetwork2() {
227 Map<LinkConcatenationKey,LinkConcatenation> linkConcentationValues = new HashMap<>();
228 LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
229 .setFiberType(LinkConcatenation.FiberType.Truewave)
230 .setPmd(new FiberPmd(BigDecimal.ONE))
231 .setSRLGId(Uint32.valueOf(1))
232 .setSRLGLength(Uint32.valueOf(1))
234 LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
235 .setFiberType(LinkConcatenation.FiberType.Truewave)
236 .setPmd(new FiberPmd(BigDecimal.ONE))
237 .setSRLGId(Uint32.valueOf(1))
238 .setSRLGLength(Uint32.valueOf(1))
240 linkConcentationValues.put(linkConcatenation.key(),linkConcatenation);
241 linkConcentationValues.put(linkConcatenation2.key(),linkConcatenation2);
242 Map<AmplifiedLinkKey,AmplifiedLink>
243 amplifiedLinkValues = new HashMap<>();
244 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link.attributes.AmplifiedLink al =
245 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link.attributes
246 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
247 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link
248 .attributes.amplified.link.section.element.section.element.SpanBuilder()
249 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link
250 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
251 .setAdministrativeState(AdminStates.InService)
252 .setAutoSpanloss(true)
253 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
254 .setLinkConcatenation(linkConcentationValues)
255 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
256 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
260 .setSectionEltNumber(Uint16.valueOf(1)).build();
261 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link.attributes.AmplifiedLink al2 = new
262 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link.attributes
263 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
264 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link
265 .attributes.amplified.link.section.element.section.element.SpanBuilder()
266 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.amplified.link
267 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
268 .setAdministrativeState(AdminStates.InService)
269 .setAutoSpanloss(true)
270 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
271 .setLinkConcatenation(linkConcentationValues)
272 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
273 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
277 .setSectionEltNumber(Uint16.valueOf(1)).build();
278 amplifiedLinkValues.put(al.key(),al);
279 amplifiedLinkValues.put(al2.key(),al2);
280 Map<Class<? extends Augmentation<Link>>, Augmentation<Link>> map = Collections.emptyMap();
281 Augmentation<Link> aug1 = new Link1Builder()
283 .setOMSAttributes(new OMSAttributesBuilder()
284 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
285 .setSpan(new SpanBuilder().build())
288 Augmentation<Link> aug2 = new Link1Builder()
290 .setOMSAttributes(new OMSAttributesBuilder()
291 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
292 .setSpan(new SpanBuilder().build())
296 Map<SupportingLinkKey,SupportingLink> supportingLinks = new HashMap<>();
297 SupportingLink supportingLink = new SupportingLinkBuilder().setLinkRef("ref1")
298 .setNetworkRef(new NetworkId("net1")).build();
299 SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
300 .setNetworkRef(new NetworkId("net1")).build();
301 supportingLinks.put(supportingLink.key(),supportingLink);
302 supportingLinks.put(supportingLink2.key(),supportingLink2);
303 Map<LinkKey,Link> links = new HashMap<>();
304 Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
305 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
306 .setDestTp("dest tp").build())
307 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
308 .setSourceTp("src tp").build())
309 .setSupportingLink(supportingLinks)
310 .addAugmentation(aug1)
311 .addAugmentation(aug2).build();
313 Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
314 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
315 .setDestTp("dest tp").build())
316 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
317 .setSourceTp("src tp").build())
318 .setSupportingLink(supportingLinks).build();
319 links.put(link1.key(),link1);
320 links.put(link2.key(),link2);
321 Network1 network = new Network1Builder().setLink(links).build();
322 Optional.of(network);
326 public static List<NodeId> getNodeIds() {
327 List<NodeId> nodes = new ArrayList<>();
328 NodeId node = new NodeId("node 1");
329 NodeId node2 = new NodeId("node 1");
330 NodeId node3 = new NodeId("node 1");
331 NodeId node4 = new NodeId("node 1");
339 public static Nodes getNodes(String nodeId, String mappingKey) {
340 Map<CpToDegreeKey,CpToDegree> cpList = new HashMap<>();
341 CpToDegree cp1 = new CpToDegreeBuilder()
342 .setCircuitPackName("circuit name1")
343 .setDegreeNumber(Uint32.valueOf(123))
345 CpToDegree cp2 = new CpToDegreeBuilder()
346 .setCircuitPackName("circuit name2")
347 .setDegreeNumber(Uint32.valueOf(123))
349 cpList.put(cp1.key(),cp1);
350 cpList.put(cp2.key(),cp2);
351 Mapping map1 = new MappingBuilder()
352 .setLogicalConnectionPoint("point")
353 .setSupportingCircuitPackName("circuit name")
354 .setSupportingOms("oms")
355 .setSupportingOts("ots")
356 .setSupportingPort("port")
357 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
359 Nodes nodes = new NodesBuilder()
361 .setNodeInfo(new NodeInfoBuilder()
362 .setNodeType(org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes.Xpdr)
363 .setOpenroadmVersion(OpenroadmVersion._121)
365 .setCpToDegree(cpList)
366 .setMapping(Map.of(map1.key(),map1))
371 public static Nodes getNodes2(String nodeId, String mappingKey) {
372 Map<CpToDegreeKey,CpToDegree> cpList = new HashMap<>();
373 CpToDegree cp1 = new CpToDegreeBuilder()
374 .setCircuitPackName("circuit name1")
375 .setDegreeNumber(Uint32.valueOf(123))
377 CpToDegree cp2 = new CpToDegreeBuilder()
378 .setCircuitPackName("circuit name2")
379 .setDegreeNumber(Uint32.valueOf(123))
381 cpList.put(cp1.key(),cp1);
382 cpList.put(cp2.key(),cp2);
383 Mapping map1 = new MappingBuilder()
384 .setLogicalConnectionPoint("point")
385 .setSupportingCircuitPackName("circuit name")
386 .setSupportingOms("oms")
387 .setSupportingOts("ots")
388 .setSupportingPort("port")
389 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
391 Nodes nodes = new NodesBuilder()
393 .setNodeInfo(new NodeInfoBuilder()
395 .setOpenroadmVersion(OpenroadmVersion._121)
397 .setCpToDegree(cpList)
398 .setMapping(Map.of(map1.key(),map1))
403 public static Nodes getNodes3(String nodeId, String mappingKey) {
404 Map<CpToDegreeKey,CpToDegree> cpList = new HashMap<>();
405 CpToDegree cp1 = new CpToDegreeBuilder()
406 .setCircuitPackName("circuit name1")
407 .setDegreeNumber(Uint32.valueOf(123))
409 CpToDegree cp2 = new CpToDegreeBuilder()
410 .setCircuitPackName("circuit name2")
411 .setDegreeNumber(Uint32.valueOf(123))
413 cpList.put(cp1.key(),cp1);
414 cpList.put(cp2.key(),cp2);
415 Mapping map1 = new MappingBuilder()
416 .setLogicalConnectionPoint("point")
417 .setSupportingCircuitPackName("circuit name")
418 .setSupportingOms("oms")
419 .setSupportingOts("ots")
420 .setSupportingPort("port")
421 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
423 Nodes nodes = new NodesBuilder()
425 .setNodeInfo(new NodeInfoBuilder()
426 .setNodeType(org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes.Rdm)
427 .setOpenroadmVersion(OpenroadmVersion._121)
429 .setCpToDegree(cpList)
430 .setMapping(Map.of(map1.key(),map1))
435 public static void writeNodeTransaction(String nodeId, DataBroker dataBroker, String mappingKey) {
436 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
437 .child(Nodes.class, new NodesKey(nodeId));
438 Nodes nodes = getNodes(nodeId, mappingKey);
439 writeTransaction(dataBroker, nodesIID, nodes);
442 public static void writeNodeTransaction2(String nodeId, DataBroker dataBroker, String mappingKey) {
443 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
444 .child(Nodes.class, new NodesKey(nodeId));
445 Nodes nodes = getNodes2(nodeId, mappingKey);
446 writeTransaction(dataBroker, nodesIID, nodes);
449 public static void writeNodeTransaction3(String nodeId, DataBroker dataBroker, String mappingKey) {
450 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
451 .child(Nodes.class, new NodesKey(nodeId));
452 Nodes nodes = getNodes3(nodeId, mappingKey);
453 writeTransaction(dataBroker, nodesIID, nodes);