Refactoring BlockAllocatorBasedIdGenerator.java
Allowing first call to getNewId() to throw an NPE, and handling initial setup in catch block
Change-Id: I409aa9c8a309dbbf4fc3738c3870ec4d91831303
diff --git a/core/net/src/main/java/org/onosproject/core/impl/BlockAllocatorBasedIdGenerator.java b/core/net/src/main/java/org/onosproject/core/impl/BlockAllocatorBasedIdGenerator.java
index ca483b4..d48c0d6 100644
--- a/core/net/src/main/java/org/onosproject/core/impl/BlockAllocatorBasedIdGenerator.java
+++ b/core/net/src/main/java/org/onosproject/core/impl/BlockAllocatorBasedIdGenerator.java
@@ -21,6 +21,8 @@
import org.onosproject.core.IdGenerator;
import org.onosproject.core.UnavailableIdException;
+import static com.google.common.base.Preconditions.checkNotNull;
+
/**
* Base class of {@link IdGenerator} implementations which use {@link IdBlockAllocator} as
* backend.
@@ -37,27 +39,29 @@
* @param allocator the ID block allocator to use
*/
protected BlockAllocatorBasedIdGenerator(IdBlockAllocator allocator) {
- this.allocator = allocator;
+ this.allocator = checkNotNull(allocator, "allocator cannot be null");
this.initialized = new AtomicBoolean(false);
}
@Override
public long getNewId() {
try {
- if (!initialized.get()) {
- synchronized (allocator) {
- if (!initialized.get()) {
- idBlock = allocator.allocateUniqueIdBlock();
- initialized.set(true);
- }
- }
- }
return idBlock.getNextId();
} catch (UnavailableIdException e) {
synchronized (allocator) {
idBlock = allocator.allocateUniqueIdBlock();
}
return idBlock.getNextId();
+ } catch (NullPointerException e) {
+ synchronized (allocator) {
+ if (!initialized.get()) {
+ idBlock = allocator.allocateUniqueIdBlock();
+ initialized.set(true);
+ return idBlock.getNextId();
+ } else {
+ throw e;
+ }
+ }
}
}
}