blob: ae64559683f696e51b83572a77c0d3abe07ed7c0 [file] [log] [blame]
Brian O'Connorabafb502014-12-02 22:26:20 -08001package org.onosproject.core.impl;
Brian O'Connor520c0522014-11-23 23:50:47 -08002
Brian O'Connorabafb502014-12-02 22:26:20 -08003import org.onosproject.core.IdBlock;
4import org.onosproject.core.IdGenerator;
5import org.onosproject.core.UnavailableIdException;
Brian O'Connor520c0522014-11-23 23:50:47 -08006
7/**
8 * Base class of {@link IdGenerator} implementations which use {@link IdBlockAllocator} as
9 * backend.
10 */
11public class BlockAllocatorBasedIdGenerator implements IdGenerator {
12 protected final IdBlockAllocator allocator;
13 protected IdBlock idBlock;
14
15 /**
16 * Constructs an ID generator which use {@link IdBlockAllocator} as backend.
17 *
Pavlin Radoslavov119fd5c2014-11-25 19:08:19 -080018 * @param allocator the ID block allocator to use
Brian O'Connor520c0522014-11-23 23:50:47 -080019 */
20 protected BlockAllocatorBasedIdGenerator(IdBlockAllocator allocator) {
21 this.allocator = allocator;
22 this.idBlock = allocator.allocateUniqueIdBlock();
23 }
24
25 @Override
26 public long getNewId() {
27 try {
28 return idBlock.getNextId();
29 } catch (UnavailableIdException e) {
30 synchronized (allocator) {
31 idBlock = allocator.allocateUniqueIdBlock();
32 return idBlock.getNextId();
33 }
34 }
35 }
36}