Committed by
Gerrit Code Review
ONOS-2088: Lazy id block allocation
Change-Id: Ie99d2ba017f45f1ca99b04da05cdb06b41202d3a
Showing
1 changed file
with
14 additions
and
2 deletions
... | @@ -15,6 +15,8 @@ | ... | @@ -15,6 +15,8 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.core.impl; | 16 | package org.onosproject.core.impl; |
17 | 17 | ||
18 | +import java.util.concurrent.atomic.AtomicBoolean; | ||
19 | + | ||
18 | import org.onosproject.core.IdBlock; | 20 | import org.onosproject.core.IdBlock; |
19 | import org.onosproject.core.IdGenerator; | 21 | import org.onosproject.core.IdGenerator; |
20 | import org.onosproject.core.UnavailableIdException; | 22 | import org.onosproject.core.UnavailableIdException; |
... | @@ -26,6 +28,8 @@ import org.onosproject.core.UnavailableIdException; | ... | @@ -26,6 +28,8 @@ import org.onosproject.core.UnavailableIdException; |
26 | public class BlockAllocatorBasedIdGenerator implements IdGenerator { | 28 | public class BlockAllocatorBasedIdGenerator implements IdGenerator { |
27 | protected final IdBlockAllocator allocator; | 29 | protected final IdBlockAllocator allocator; |
28 | protected IdBlock idBlock; | 30 | protected IdBlock idBlock; |
31 | + protected AtomicBoolean initialized; | ||
32 | + | ||
29 | 33 | ||
30 | /** | 34 | /** |
31 | * Constructs an ID generator which use {@link IdBlockAllocator} as backend. | 35 | * Constructs an ID generator which use {@link IdBlockAllocator} as backend. |
... | @@ -34,18 +38,26 @@ public class BlockAllocatorBasedIdGenerator implements IdGenerator { | ... | @@ -34,18 +38,26 @@ public class BlockAllocatorBasedIdGenerator implements IdGenerator { |
34 | */ | 38 | */ |
35 | protected BlockAllocatorBasedIdGenerator(IdBlockAllocator allocator) { | 39 | protected BlockAllocatorBasedIdGenerator(IdBlockAllocator allocator) { |
36 | this.allocator = allocator; | 40 | this.allocator = allocator; |
37 | - this.idBlock = allocator.allocateUniqueIdBlock(); | 41 | + this.initialized = new AtomicBoolean(false); |
38 | } | 42 | } |
39 | 43 | ||
40 | @Override | 44 | @Override |
41 | public long getNewId() { | 45 | public long getNewId() { |
42 | try { | 46 | try { |
47 | + if (!initialized.get()) { | ||
48 | + synchronized (allocator) { | ||
49 | + if (!initialized.get()) { | ||
50 | + idBlock = allocator.allocateUniqueIdBlock(); | ||
51 | + initialized.set(true); | ||
52 | + } | ||
53 | + } | ||
54 | + } | ||
43 | return idBlock.getNextId(); | 55 | return idBlock.getNextId(); |
44 | } catch (UnavailableIdException e) { | 56 | } catch (UnavailableIdException e) { |
45 | synchronized (allocator) { | 57 | synchronized (allocator) { |
46 | idBlock = allocator.allocateUniqueIdBlock(); | 58 | idBlock = allocator.allocateUniqueIdBlock(); |
47 | - return idBlock.getNextId(); | ||
48 | } | 59 | } |
60 | + return idBlock.getNextId(); | ||
49 | } | 61 | } |
50 | } | 62 | } |
51 | } | 63 | } | ... | ... |
-
Please register or login to post a comment