Search in sources :

Example 1 with DelayedIdEntry

use of org.opendaylight.genius.idmanager.ReleasedIdHolder.DelayedIdEntry in project genius by opendaylight.

the class IdManager method updateLocalIdPoolCache.

public boolean updateLocalIdPoolCache(IdPool idPool, String parentPoolName) {
    AvailableIdsHolder availableIdsHolder = idPool.getAvailableIdsHolder();
    AvailableIdHolder availableIdHolder = new AvailableIdHolder(idUtils, availableIdsHolder.getStart(), availableIdsHolder.getEnd());
    availableIdHolder.setCur(availableIdsHolder.getCursor());
    ReleasedIdsHolder releasedIdsHolder = idPool.getReleasedIdsHolder();
    ReleasedIdHolder releasedIdHolder = new ReleasedIdHolder(idUtils, releasedIdsHolder.getDelayedTimeSec());
    releasedIdHolder.setAvailableIdCount(releasedIdsHolder.getAvailableIdCount());
    List<DelayedIdEntries> delayedEntries = releasedIdsHolder.getDelayedIdEntries();
    List<DelayedIdEntry> delayedIdEntryInCache = delayedEntries.stream().map(delayedIdEntry -> new DelayedIdEntry(delayedIdEntry.getId(), delayedIdEntry.getReadyTimeSec())).sorted(comparing(DelayedIdEntry::getReadyTimeSec)).collect(toCollection(ArrayList::new));
    releasedIdHolder.replaceDelayedEntries(delayedIdEntryInCache);
    IdLocalPool idLocalPool = new IdLocalPool(idUtils, idPool.getPoolName());
    idLocalPool.setAvailableIds(availableIdHolder);
    idLocalPool.setReleasedIds(releasedIdHolder);
    localPool.put(parentPoolName, idLocalPool);
    if (LOG.isDebugEnabled()) {
        LOG.debug("Populating cache for {} with {}", idLocalPool.getPoolName(), idLocalPool);
    }
    return true;
}
Also used : ReleasedIdsHolder(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolder) AvailableIdsHolder(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolder) DelayedIdEntry(org.opendaylight.genius.idmanager.ReleasedIdHolder.DelayedIdEntry) DelayedIdEntries(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntries)

Example 2 with DelayedIdEntry

use of org.opendaylight.genius.idmanager.ReleasedIdHolder.DelayedIdEntry in project genius by opendaylight.

the class IdManager method allocateIdBlockFromReleasedIdsHolder.

private long allocateIdBlockFromReleasedIdsHolder(IdLocalPool localIdPool, ReleasedIdsHolderBuilder releasedIdsBuilderParent, IdPool parentIdPool, WriteTransaction tx) {
    if (releasedIdsBuilderParent.getAvailableIdCount() == 0) {
        LOG.debug("Ids unavailable in releasedIds of parent pool {}", parentIdPool);
        return 0;
    }
    List<DelayedIdEntries> delayedIdEntriesParent = releasedIdsBuilderParent.getDelayedIdEntries();
    int idCount = Math.min(delayedIdEntriesParent.size(), parentIdPool.getBlockSize());
    List<DelayedIdEntries> idEntriesToBeRemoved = delayedIdEntriesParent.subList(0, idCount);
    ReleasedIdHolder releasedIds = (ReleasedIdHolder) localIdPool.getReleasedIds();
    List<DelayedIdEntry> delayedIdEntriesLocalCache = releasedIds.getDelayedEntries();
    List<DelayedIdEntry> delayedIdEntriesFromParentPool = idEntriesToBeRemoved.stream().map(delayedIdEntry -> new DelayedIdEntry(delayedIdEntry.getId(), delayedIdEntry.getReadyTimeSec())).sorted(comparing(DelayedIdEntry::getReadyTimeSec)).collect(toCollection(ArrayList::new));
    delayedIdEntriesFromParentPool.addAll(delayedIdEntriesLocalCache);
    releasedIds.replaceDelayedEntries(delayedIdEntriesFromParentPool);
    releasedIds.setAvailableIdCount(releasedIds.getAvailableIdCount() + idCount);
    localIdPool.setReleasedIds(releasedIds);
    delayedIdEntriesParent.removeAll(idEntriesToBeRemoved);
    releasedIdsBuilderParent.setDelayedIdEntries(delayedIdEntriesParent);
    InstanceIdentifier<ReleasedIdsHolder> releasedIdsHolderInstanceIdentifier = InstanceIdentifier.builder(IdPools.class).child(IdPool.class, new IdPoolKey(parentIdPool.getPoolName())).child(ReleasedIdsHolder.class).build();
    releasedIdsBuilderParent.setAvailableIdCount(releasedIdsBuilderParent.getAvailableIdCount() - idCount);
    LOG.debug("Allocated {} ids from releasedIds of parent pool {}", idCount, parentIdPool);
    tx.merge(CONFIGURATION, releasedIdsHolderInstanceIdentifier, releasedIdsBuilderParent.build(), true);
    return idCount;
}
Also used : ReleasedIdsHolder(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolder) DelayedIdEntry(org.opendaylight.genius.idmanager.ReleasedIdHolder.DelayedIdEntry) IdPools(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdPools) IdPoolKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPoolKey) DelayedIdEntries(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntries)

Example 3 with DelayedIdEntry

use of org.opendaylight.genius.idmanager.ReleasedIdHolder.DelayedIdEntry 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());
}
Also used : ReleasedIdsHolderBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolderBuilder) ArrayList(java.util.ArrayList) DelayedIdEntry(org.opendaylight.genius.idmanager.ReleasedIdHolder.DelayedIdEntry) DelayedIdEntries(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntries)

Aggregations

DelayedIdEntry (org.opendaylight.genius.idmanager.ReleasedIdHolder.DelayedIdEntry)3 DelayedIdEntries (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntries)3 ReleasedIdsHolder (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolder)2 ArrayList (java.util.ArrayList)1 IdPools (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdPools)1 IdPoolKey (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPoolKey)1 AvailableIdsHolder (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolder)1 ReleasedIdsHolderBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolderBuilder)1