Yuta HIGUCHI
Committed by Yuta Higuchi

Attempt to fix nested exception

ONOS-375

Change-Id: I623f58f2ea35b01602439a296cf92654ad2a240c
...@@ -182,21 +182,31 @@ public class HazelcastLinkResourceStore ...@@ -182,21 +182,31 @@ public class HazelcastLinkResourceStore
182 182
183 @Override 183 @Override
184 public Set<ResourceAllocation> getFreeResources(Link link) { 184 public Set<ResourceAllocation> getFreeResources(Link link) {
185 - Map<ResourceType, Set<? extends ResourceAllocation>> freeResources = getFreeResourcesEx(link); 185 + TransactionOptions opt = new TransactionOptions();
186 + // read-only and will never be commited, thus does not need durability
187 + opt.setTransactionType(TransactionType.LOCAL);
188 + TransactionContext tx = theInstance.newTransactionContext(opt);
189 + tx.beginTransaction();
190 + try {
191 + Map<ResourceType, Set<? extends ResourceAllocation>> freeResources = getFreeResourcesEx(tx, link);
186 Set<ResourceAllocation> allFree = new HashSet<>(); 192 Set<ResourceAllocation> allFree = new HashSet<>();
187 - for (Set<? extends ResourceAllocation> r:freeResources.values()) { 193 + for (Set<? extends ResourceAllocation> r : freeResources.values()) {
188 allFree.addAll(r); 194 allFree.addAll(r);
189 } 195 }
190 return allFree; 196 return allFree;
197 + } finally {
198 + tx.rollbackTransaction();
199 + }
200 +
191 } 201 }
192 202
193 - private Map<ResourceType, Set<? extends ResourceAllocation>> getFreeResourcesEx(Link link) { 203 + private Map<ResourceType, Set<? extends ResourceAllocation>> getFreeResourcesEx(TransactionContext tx, Link link) {
194 // returns capacity - allocated 204 // returns capacity - allocated
195 205
196 checkNotNull(link); 206 checkNotNull(link);
197 Map<ResourceType, Set<? extends ResourceAllocation>> free = new HashMap<>(); 207 Map<ResourceType, Set<? extends ResourceAllocation>> free = new HashMap<>();
198 final Map<ResourceType, Set<? extends ResourceAllocation>> caps = getResourceCapacity(link); 208 final Map<ResourceType, Set<? extends ResourceAllocation>> caps = getResourceCapacity(link);
199 - final Iterable<LinkResourceAllocations> allocations = getAllocations(link); 209 + final Iterable<LinkResourceAllocations> allocations = getAllocations(tx, link);
200 210
201 for (ResourceType type : ResourceType.values()) { 211 for (ResourceType type : ResourceType.values()) {
202 // there should be class/category of resources 212 // there should be class/category of resources
...@@ -299,7 +309,7 @@ public class HazelcastLinkResourceStore ...@@ -299,7 +309,7 @@ public class HazelcastLinkResourceStore
299 // requested resources 309 // requested resources
300 Set<ResourceAllocation> reqs = allocations.getResourceAllocation(link); 310 Set<ResourceAllocation> reqs = allocations.getResourceAllocation(link);
301 311
302 - Map<ResourceType, Set<? extends ResourceAllocation>> available = getFreeResourcesEx(link); 312 + Map<ResourceType, Set<? extends ResourceAllocation>> available = getFreeResourcesEx(tx, link);
303 for (ResourceAllocation req : reqs) { 313 for (ResourceAllocation req : reqs) {
304 Set<? extends ResourceAllocation> avail = available.get(req.type()); 314 Set<? extends ResourceAllocation> avail = available.get(req.type());
305 if (req instanceof BandwidthResourceAllocation) { 315 if (req instanceof BandwidthResourceAllocation) {
...@@ -446,7 +456,26 @@ public class HazelcastLinkResourceStore ...@@ -446,7 +456,26 @@ public class HazelcastLinkResourceStore
446 } 456 }
447 } 457 }
448 return res; 458 return res;
459 + }
449 460
461 + private Iterable<LinkResourceAllocations> getAllocations(TransactionContext tx,
462 + Link link) {
463 + checkNotNull(tx);
464 + checkNotNull(link);
465 + final LinkKey key = LinkKey.linkKey(link);
466 +
467 + STxMap<LinkKey, List<LinkResourceAllocations>> linkAllocs = getLinkAllocs(tx);
468 + List<LinkResourceAllocations> res = null;
469 + res = linkAllocs.get(key);
470 + if (res == null) {
471 + res = linkAllocs.putIfAbsent(key, new ArrayList<LinkResourceAllocations>());
472 + if (res == null) {
473 + return Collections.emptyList();
474 + } else {
475 + return res;
476 + }
477 + }
478 + return null;
450 } 479 }
451 480
452 @Override 481 @Override
......