use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPool in project genius by opendaylight.
the class IdUtils method syncReleaseIdHolder.
public void syncReleaseIdHolder(ReleasedIdHolder releasedIdHolder, IdPoolBuilder idPool) {
long delayTime = releasedIdHolder.getTimeDelaySec();
ReleasedIdsHolderBuilder releasedIdsBuilder = new ReleasedIdsHolderBuilder();
List<DelayedIdEntries> delayedIdEntriesList = new ArrayList<>();
List<DelayedIdEntry> delayList = releasedIdHolder.getDelayedEntries();
for (DelayedIdEntry delayedId : delayList) {
DelayedIdEntries delayedIdEntry = createDelayedIdEntry(delayedId.getId(), delayedId.getReadyTimeSec());
delayedIdEntriesList.add(delayedIdEntry);
}
releasedIdsBuilder.setAvailableIdCount((long) delayedIdEntriesList.size()).setDelayedTimeSec(delayTime).setDelayedIdEntries(delayedIdEntriesList);
idPool.setReleasedIdsHolder(releasedIdsBuilder.build());
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPool in project genius by opendaylight.
the class IdUtils method syncAvailableIdHolder.
public void syncAvailableIdHolder(AvailableIdHolder availableIdHolder, IdPoolBuilder idPool) {
long cur = availableIdHolder.getCur().get();
long low = availableIdHolder.getLow();
long high = availableIdHolder.getHigh();
AvailableIdsHolder availableIdsHolder = createAvailableIdsHolder(low, high, cur);
idPool.setAvailableIdsHolder(availableIdsHolder);
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPool in project genius by opendaylight.
the class IdHolderSyncJob method call.
@Override
public List<ListenableFuture<Void>> call() {
IdPoolBuilder idPool = new IdPoolBuilder().setKey(new IdPoolKey(localPoolName));
idHolder.refreshDataStore(idPool);
InstanceIdentifier<IdPool> localPoolInstanceIdentifier = idUtils.getIdPoolInstance(localPoolName);
return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> {
tx.merge(CONFIGURATION, localPoolInstanceIdentifier, idPool.build(), true);
idUtils.incrementPoolUpdatedMap(localPoolName);
if (LOG.isDebugEnabled()) {
LOG.debug("IdHolder synced {}", idHolder);
}
}));
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPool in project genius by opendaylight.
the class LocalPoolCreateJob method call.
@Override
public List<ListenableFuture<Void>> call() {
String localPoolName = idLocalPool.getPoolName();
if (LOG.isDebugEnabled()) {
LOG.debug("Started localPoolCreateJob for {}", localPoolName);
}
InstanceIdentifier<IdPool> localPoolInstanceIdentifier = idUtils.getIdPoolInstance(localPoolName);
IdPoolBuilder idPool = new IdPoolBuilder().setKey(new IdPoolKey(localPoolName)).setBlockSize(blockSize).setParentPoolName(parentPoolName).setPoolName(localPoolName);
idLocalPool.getAvailableIds().refreshDataStore(idPool);
idLocalPool.getReleasedIds().refreshDataStore(idPool);
return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> tx.put(LogicalDatastoreType.CONFIGURATION, localPoolInstanceIdentifier, idPool.build(), WriteTransaction.CREATE_MISSING_PARENTS)));
}
use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPool in project genius by opendaylight.
the class ResourceManager method getAvailableResources.
@Override
public Future<RpcResult<GetAvailableResourcesOutput>> getAvailableResources(GetAvailableResourcesInput input) {
Objects.requireNonNull(input.getResourceType(), RESOURCE_TYPE_CANNOT_BE_NULL);
Objects.requireNonNull(resourcesCache.get(input.getResourceType()), RESOURCE_TYPE_NOT_FOUND);
long totalIdsAvailableForAllocation = 0;
long currentTimeSec = System.currentTimeMillis() / 1000;
InstanceIdentifier<IdPool> parentId = ResourceManagerUtils.getIdPoolInstance(resourcesCache.get(input.getResourceType()));
Optional<IdPool> optionalParentIdPool = MDSALUtil.read(LogicalDatastoreType.CONFIGURATION, parentId, dataBroker);
if (optionalParentIdPool != null && optionalParentIdPool.isPresent()) {
IdPool parentIdPool = optionalParentIdPool.get();
AvailableIdsHolder availableParentIdsHolder = parentIdPool.getAvailableIdsHolder();
totalIdsAvailableForAllocation = availableParentIdsHolder.getEnd() - availableParentIdsHolder.getCursor();
ReleasedIdsHolder releasedParentIdsHolder = parentIdPool.getReleasedIdsHolder();
if (releasedParentIdsHolder != null) {
List<DelayedIdEntries> delayedIdParentList = releasedParentIdsHolder.getDelayedIdEntries();
if (delayedIdParentList != null && !delayedIdParentList.isEmpty()) {
totalIdsAvailableForAllocation += delayedIdParentList.size();
}
}
}
String localPool = ResourceManagerUtils.getLocalPoolName(resourcesCache.get(input.getResourceType()));
InstanceIdentifier<IdPool> localId = ResourceManagerUtils.getIdPoolInstance(localPool);
Optional<IdPool> optionalLocalId = MDSALUtil.read(LogicalDatastoreType.CONFIGURATION, localId, dataBroker);
if (optionalLocalId != null && optionalLocalId.isPresent()) {
IdPool localIdPool = optionalLocalId.get();
AvailableIdsHolder availableLocalIdsHolder = localIdPool.getAvailableIdsHolder();
if (availableLocalIdsHolder != null) {
totalIdsAvailableForAllocation += availableLocalIdsHolder.getEnd() - availableLocalIdsHolder.getCursor();
}
ReleasedIdsHolder releasedLocalIdsHolder = localIdPool.getReleasedIdsHolder();
if (releasedLocalIdsHolder != null) {
long count = 0;
List<DelayedIdEntries> delayedIdLocalList = releasedLocalIdsHolder.getDelayedIdEntries();
if (delayedIdLocalList != null && !delayedIdLocalList.isEmpty()) {
for (DelayedIdEntries delayedLocalEntry : delayedIdLocalList) {
if (delayedLocalEntry.getReadyTimeSec() > currentTimeSec) {
break;
}
}
count++;
}
totalIdsAvailableForAllocation += count;
}
}
GetAvailableResourcesOutputBuilder outputBuilder = new GetAvailableResourcesOutputBuilder().setTotalAvailableIdCount(totalIdsAvailableForAllocation);
RpcResultBuilder<GetAvailableResourcesOutput> rpcOutputBuilder = null;
rpcOutputBuilder = RpcResultBuilder.success();
rpcOutputBuilder.withResult(outputBuilder.build());
return Futures.immediateFuture(rpcOutputBuilder.build());
}
Aggregations