import org.onosproject.incubator.net.resource.label.LabelResourcePool; //导入方法依赖的package包/类
private boolean internalRelease(LabelResourceRequest request) {
DeviceId deviceId = request.deviceId();
Collection release = request.releaseCollection();
Versioned poolOld = resourcePool.get(deviceId);
if (poolOld == null) {
log.info("the label resource pool of device id {} not allocated");
return false;
}
LabelResourcePool pool = poolOld.value();
if (pool == null) {
log.info("the label resource pool of device id {} does not exist");
return false;
}
Set storeSet = new HashSet<>(pool.releaseLabelId());
LabelResource labelResource = null;
long realReleasedNum = 0;
for (Iterator it = release.iterator(); it.hasNext();) {
labelResource = it.next();
if (labelResource.labelResourceId().labelId() < pool.beginLabel()
.labelId()
|| labelResource.labelResourceId().labelId() > pool
.endLabel().labelId()) {
continue;
}
if (pool.currentUsedMaxLabelId().labelId() > labelResource
.labelResourceId().labelId()
|| !storeSet.contains(labelResource)) {
storeSet.add(labelResource);
realReleasedNum++;
}
}
long beginNum = pool.beginLabel().labelId();
long endNum = pool.endLabel().labelId();
long totalNum = pool.totalNum();
long usedNum = pool.usedNum() - realReleasedNum;
long current = pool.currentUsedMaxLabelId().labelId();
ImmutableSet s = ImmutableSet.copyOf(storeSet);
LabelResourcePool newPool = new LabelResourcePool(deviceId.toString(),
beginNum, endNum,
totalNum, usedNum,
current, s);
resourcePool.put(deviceId, newPool);
log.info("success to release label resource");
return true;
}