2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.genius.idmanager.test;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Matchers.eq;
14 import static org.mockito.Mockito.doReturn;
15 import static org.mockito.Mockito.when;
17 import java.net.InetAddress;
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.List;
22 import java.util.concurrent.Future;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.mockito.Mock;
28 import org.mockito.runners.MockitoJUnitRunner;
29 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
30 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
31 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
32 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
33 import org.opendaylight.genius.idmanager.IdManager;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdInputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.AllocateIdOutput;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.CreateIdPoolInput;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.CreateIdPoolInputBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.DeleteIdPoolInput;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.DeleteIdPoolInputBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdPools;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.ReleaseIdInput;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.ReleaseIdInputBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPool;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPoolBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.IdPoolKey;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.AvailableIdsHolderBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPools;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPoolsBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ChildPoolsKey;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntries;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntriesBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.IdEntriesKey;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.id.pools.id.pool.ReleasedIdsHolderBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntries;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.released.ids.DelayedIdEntriesBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.lockmanager.rev160413.LockInput;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.lockmanager.rev160413.LockManagerService;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.lockmanager.rev160413.UnlockInput;
62 import org.opendaylight.yangtools.yang.binding.DataObject;
63 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
64 import org.opendaylight.yangtools.yang.common.RpcResult;
65 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
66 import org.slf4j.Logger;
67 import org.slf4j.LoggerFactory;
69 import com.google.common.base.Optional;
70 import com.google.common.net.InetAddresses;
71 import com.google.common.util.concurrent.Futures;
74 @RunWith(MockitoJUnitRunner.class)
75 public class IdManagerTest {
76 private static final Logger LOG = LoggerFactory.getLogger(IdManagerTest.class);
77 private static int BLADE_ID;
80 BLADE_ID = InetAddresses.coerceToInteger(InetAddress.getLocalHost());
81 } catch (Exception e) {
82 LOG.error("IdManager - Exception - {}", e.getMessage());
86 Map<InstanceIdentifier<?>,DataObject> configDataStore = new HashMap<>();
87 @Mock DataBroker dataBroker;
88 @Mock ReadOnlyTransaction mockReadTx;
89 @Mock WriteTransaction mockWriteTx;
90 @Mock LockManagerService lockManager;
91 Future<RpcResult<Void>> rpcResult;
94 InstanceIdentifier<IdPool> identifier;
95 InstanceIdentifier<IdPool> childIdentifier;
96 InstanceIdentifier<ChildPools> childPoolIdentifier;
97 String globalPoolName = "test-pool";
98 String localPoolName = new StringBuilder(globalPoolName).append(".").append(BLADE_ID).toString();
99 String idKey = "test-key1";
103 String idKey2 = "test-key2";
107 public void setUp() throws Exception {
109 idManager = new IdManager(dataBroker);
110 idManager.setLockManager(lockManager);
114 private void setupMocks() {
115 globalIdPool = buildGlobalIdPool(globalPoolName, idStart, idEnd, blockSize, buildChildPool(localPoolName)).build();
116 identifier = buildInstanceIdentifier(globalPoolName);
117 childIdentifier = buildInstanceIdentifier(localPoolName);
118 childPoolIdentifier = buildChildPoolInstanceIdentifier(globalPoolName, localPoolName);
119 when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
120 when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
121 when(lockManager.lock(any(LockInput.class))).thenReturn(Futures.immediateFuture(RpcResultBuilder.<Void>success().build()));
122 when(lockManager.unlock(any(UnlockInput.class))).thenReturn(Futures.immediateFuture(RpcResultBuilder.<Void>success().build()));
123 doReturn(Futures.immediateCheckedFuture(null)).when(mockWriteTx).submit();
124 doReturn(Futures.immediateCheckedFuture(null)).when(mockReadTx).read(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
128 public void testCreateIdPool() throws Exception
130 CreateIdPoolInput createPoolTest = buildCreateIdPool(globalPoolName, idStart, idEnd);
131 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
132 LogicalDatastoreType.CONFIGURATION, identifier);
133 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
134 LogicalDatastoreType.CONFIGURATION, childIdentifier);
135 Future<RpcResult<Void>> result = idManager.createIdPool(createPoolTest);
136 DataObject dataObject;
138 assertTrue(result.get().isSuccessful());
139 assertEquals(0,configDataStore.size());
140 dataObject = configDataStore.get(childIdentifier);
141 if (dataObject instanceof IdPool) {
142 pool = (IdPool) dataObject;
143 assertEquals(localPoolName, pool.getPoolName());
144 assertEquals(createPoolTest.getPoolName(), pool.getParentPoolName());
145 assertEquals(null, pool.getAvailableIdsHolder());
146 assertEquals(30, pool.getReleasedIdsHolder().getDelayedTimeSec().longValue());
147 assertEquals(0, pool.getReleasedIdsHolder().getAvailableIdCount().longValue());
148 assertEquals(blockSize, pool.getBlockSize().longValue());
150 dataObject = configDataStore.get(identifier);
151 if (dataObject instanceof IdPool) {
152 pool = (IdPool) dataObject;
153 assertEquals(createPoolTest.getPoolName(), pool.getPoolName());
154 assertEquals(0, pool.getReleasedIdsHolder().getDelayedTimeSec().longValue());
155 assertEquals(0, pool.getReleasedIdsHolder().getAvailableIdCount().longValue());
156 assertEquals(createPoolTest.getLow(), pool.getAvailableIdsHolder().getStart());
157 assertEquals(createPoolTest.getHigh(), pool.getAvailableIdsHolder().getEnd());
158 assertEquals(createPoolTest.getLow() - 1, pool.getAvailableIdsHolder().getCursor().intValue());
159 assertEquals(blockSize, pool.getBlockSize().longValue());
161 dataObject = configDataStore.get(childPoolIdentifier);
162 if (dataObject instanceof ChildPools) {
163 ChildPools childPool = (ChildPools) dataObject;
164 assertEquals(localPoolName, childPool.getChildPoolName());
169 public void testAllocateId() throws Exception
171 AllocateIdInput allocateIdInput = buildAllocateId(globalPoolName, idKey);
172 List<IdEntries> idEntries = new ArrayList<>();
173 List<Long> idValuesList = new ArrayList<>();
174 idValuesList.add(idValue);
175 idEntries.add(buildIdEntry(idKey2, idValuesList));
176 Optional<IdPool> expectedLocalPool = Optional.of(buildLocalIdPool(blockSize, localPoolName, globalPoolName).build());
177 IdPool globalIdPool = buildGlobalIdPool(globalPoolName, idStart, idEnd, blockSize, buildChildPool(localPoolName)).setIdEntries(idEntries).build();
178 Optional<IdPool> expectedGlobalPool = Optional.of(globalIdPool);
179 doReturn(Futures.immediateCheckedFuture(expectedGlobalPool)).when(mockReadTx).read(
180 LogicalDatastoreType.CONFIGURATION, identifier);
181 doReturn(Futures.immediateCheckedFuture(expectedLocalPool)).when(mockReadTx).read(
182 LogicalDatastoreType.CONFIGURATION, childIdentifier);
183 InstanceIdentifier<IdEntries> idEntriesIdentifier = buildIdEntriesIdentifier(idKey);
184 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
185 LogicalDatastoreType.CONFIGURATION, idEntriesIdentifier);
186 InstanceIdentifier<AvailableIdsHolder> availableIdsIdentifier = buildAvailbaleIdsIdentifier(globalPoolName);
188 Future<RpcResult<AllocateIdOutput>> result = idManager.allocateId(allocateIdInput);
189 assertTrue(result.get().isSuccessful());
190 assertEquals(0,configDataStore.size());
191 DataObject dataObject = configDataStore.get(childIdentifier);
192 if (dataObject instanceof IdPool) {
193 IdPool pool = (IdPool) dataObject;
194 assertEquals(localPoolName, pool.getPoolName());
195 assertEquals(idStart, pool.getAvailableIdsHolder().getStart().intValue());
196 assertEquals(idStart + blockSize - 1 , pool.getAvailableIdsHolder().getEnd().intValue());
197 assertEquals(idStart, pool.getAvailableIdsHolder().getCursor().intValue());
199 dataObject = configDataStore.get(identifier);
200 if (dataObject instanceof IdPool) {
201 IdPool parentPool = (IdPool) dataObject;
202 assertEquals(2, parentPool.getIdEntries().size());
204 dataObject = configDataStore.get(availableIdsIdentifier);
205 if (dataObject instanceof AvailableIdsHolder) {
206 AvailableIdsHolder availableIds = (AvailableIdsHolder) dataObject;
207 assertEquals(idEnd, availableIds.getEnd().intValue());
208 assertEquals(idStart, availableIds.getStart().intValue());
209 assertEquals(idStart + blockSize - 1, availableIds.getCursor().intValue());
214 public void testReleaseId() throws Exception {
215 ReleaseIdInput releaseIdInput = createReleaseIdInput(globalPoolName, idKey);
216 List<IdEntries> idEntries = new ArrayList<>();
217 List<Long> idValuesList = new ArrayList<>();
218 idValuesList.add(idValue);
219 idEntries.add(buildIdEntry(idKey, idValuesList));
220 Optional<IdPool> expectedLocalPool = Optional.of(buildLocalIdPool(blockSize, localPoolName, globalPoolName).build());
221 IdPool globalIdPool = buildGlobalIdPool(globalPoolName, idStart, idEnd, blockSize, buildChildPool(localPoolName)).setIdEntries(idEntries).build();
222 Optional<IdPool> expectedGlobalPool = Optional.of(globalIdPool);
223 doReturn(Futures.immediateCheckedFuture(expectedGlobalPool)).when(mockReadTx).read(
224 LogicalDatastoreType.CONFIGURATION, identifier);
225 doReturn(Futures.immediateCheckedFuture(expectedLocalPool)).when(mockReadTx).read(
226 LogicalDatastoreType.CONFIGURATION, childIdentifier);
227 InstanceIdentifier<IdEntries> idEntriesIdentifier = buildIdEntriesIdentifier(idKey);
228 idValuesList.add(idValue);
229 Optional<IdEntries> expectedIdEntry = Optional.of(buildIdEntry(idKey, idValuesList));
230 doReturn(Futures.immediateCheckedFuture(expectedIdEntry)).when(mockReadTx).read(
231 LogicalDatastoreType.CONFIGURATION, idEntriesIdentifier);
232 Future<RpcResult<Void>> result = idManager.releaseId(releaseIdInput);
233 assertTrue(result.get().isSuccessful());
234 assertEquals(0, configDataStore.size());
235 DataObject idPoolVal = configDataStore.get(childIdentifier);
236 if (idPoolVal instanceof IdPool) {
237 IdPool pool = (IdPool) idPoolVal;
238 assertEquals(0, pool.getReleasedIdsHolder().getAvailableIdCount().intValue());
239 assertEquals(idValue, pool.getReleasedIdsHolder().getDelayedIdEntries().get(0).getId().intValue());
241 idPoolVal = configDataStore.get(identifier);
242 if (idPoolVal instanceof IdPool) {
243 IdPool parentPool = (IdPool) idPoolVal;
244 assertEquals(0, parentPool.getIdEntries().size());
249 public void testCleanupReleasedIds() throws Exception {
250 AllocateIdInput allocateIdInput = buildAllocateId(globalPoolName, idKey2);
251 Optional<ReleasedIdsHolder> expected = Optional.of(createReleasedIdsHolder(0, null, 0));
252 long[] excessIds = new long[] { 1, 2, 3, 4, 5 };
253 List<IdEntries> idEntries = new ArrayList<>();
254 List<Long> idValuesList = new ArrayList<>();
255 idValuesList.add(idValue);
256 idEntries.add(buildIdEntry(idKey2, idValuesList));
257 ReleasedIdsHolder excessReleasedIds = createReleasedIdsHolder(0, buildDelayedIdEntries(excessIds), (long) 30);
258 Optional<IdPool> expectedLocalPool = Optional.of(buildLocalIdPool(blockSize, localPoolName, globalPoolName)
259 .setReleasedIdsHolder(excessReleasedIds)
261 InstanceIdentifier<ReleasedIdsHolder> releaseIdsIdentifier = buildReleaseIdsIdentifier(globalPoolName);
262 IdPool globalIdPool = buildGlobalIdPool(globalPoolName, idStart, idEnd, blockSize, buildChildPool(localPoolName)).setIdEntries(idEntries).build();
263 Optional<IdPool> expectedGlobalPool = Optional.of(globalIdPool);
264 doReturn(Futures.immediateCheckedFuture(expectedGlobalPool)).when(mockReadTx).read(
265 LogicalDatastoreType.CONFIGURATION, identifier);
266 doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx)
267 .read(LogicalDatastoreType.CONFIGURATION, releaseIdsIdentifier);
268 doReturn(Futures.immediateCheckedFuture(expectedLocalPool)).when(
269 mockReadTx).read(LogicalDatastoreType.CONFIGURATION,
271 InstanceIdentifier<IdEntries> idEntriesIdentifier = buildIdEntriesIdentifier(idKey2);
272 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(
273 mockReadTx).read(LogicalDatastoreType.CONFIGURATION,
274 idEntriesIdentifier);
276 Future<RpcResult<AllocateIdOutput>> result = idManager.allocateId(allocateIdInput);
277 assertTrue(result.get().isSuccessful());
278 assertEquals(0, configDataStore.size());
279 DataObject dataObject = configDataStore.get(childIdentifier);
280 if (dataObject instanceof IdPool) {
281 IdPool pool = (IdPool) dataObject;
282 assertEquals(localPoolName, pool.getPoolName());
283 assertEquals(excessIds.length - 3, pool.getReleasedIdsHolder().getAvailableIdCount().intValue());
285 dataObject = configDataStore.get(identifier);
286 if (dataObject instanceof IdPool) {
287 IdPool parentPool = (IdPool) dataObject;
288 assertEquals(2, parentPool.getIdEntries().size());
290 dataObject = configDataStore.get(releaseIdsIdentifier);
291 if (dataObject instanceof ReleasedIdsHolder) {
292 ReleasedIdsHolder releasedIds = (ReleasedIdsHolder) dataObject;
293 assertEquals(2, releasedIds.getAvailableIdCount().intValue());
294 assertEquals(2, releasedIds.getDelayedIdEntries().size());
299 public void testAllocateIdBlockFromReleasedIds() throws Exception {
300 AllocateIdInput allocateIdInput = buildAllocateId(globalPoolName, globalPoolName);
301 List<DelayedIdEntries> delayedIdEntries = buildDelayedIdEntries(new long[] {1, 2, 3});
302 ReleasedIdsHolder expectedReleasedIds = createReleasedIdsHolder(3, delayedIdEntries , 0);
303 IdPool globalIdPool = buildGlobalIdPool(globalPoolName, idStart, idEnd, blockSize, buildChildPool(localPoolName)).setReleasedIdsHolder(expectedReleasedIds).build();
304 Optional<IdPool> expected = Optional.of(globalIdPool);
305 Optional<IdPool> expectedLocalPool = Optional.of(buildLocalIdPool(blockSize, localPoolName, globalPoolName).build());
306 doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
307 LogicalDatastoreType.CONFIGURATION, identifier);
308 doReturn(Futures.immediateCheckedFuture(expectedLocalPool)).when(mockReadTx).read(
309 LogicalDatastoreType.CONFIGURATION, childIdentifier);
310 InstanceIdentifier<IdEntries> idEntriesIdentifier = buildIdEntriesIdentifier(globalPoolName);
311 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
312 LogicalDatastoreType.CONFIGURATION, idEntriesIdentifier);
313 InstanceIdentifier<ReleasedIdsHolder> releaseIdsIdentifier = buildReleaseIdsIdentifier(globalPoolName);
315 Future<RpcResult<AllocateIdOutput>> result = idManager.allocateId(allocateIdInput);
316 assertTrue(result.get().isSuccessful());
317 assertEquals(0,configDataStore.size());
318 DataObject dataObject = configDataStore.get(childIdentifier);
319 if (dataObject instanceof IdPool) {
320 IdPool pool = (IdPool) dataObject;
321 assertEquals(localPoolName, pool.getPoolName());
322 assertEquals(1, pool.getReleasedIdsHolder().getDelayedIdEntries().size());
323 assertEquals(1, pool.getReleasedIdsHolder().getAvailableIdCount().intValue());
325 dataObject = configDataStore.get(identifier);
326 if (dataObject instanceof IdPool) {
327 IdPool parentPool = (IdPool) dataObject;
328 assertEquals(1, parentPool.getIdEntries().size());
330 dataObject = configDataStore.get(releaseIdsIdentifier);
331 if (dataObject instanceof ReleasedIdsHolder) {
332 ReleasedIdsHolder releasedIds = (ReleasedIdsHolder) dataObject;
333 assertEquals(1, releasedIds.getAvailableIdCount().intValue());
334 assertEquals(1, releasedIds.getDelayedIdEntries().size());
339 public void testDeletePool() throws Exception {
340 IdPool globalIdPool = buildGlobalIdPool(globalPoolName, idStart, idEnd, blockSize, buildChildPool(localPoolName)).build();
341 Optional<IdPool> expected = Optional.of(globalIdPool);
342 Optional<IdPool> expectedLocalPool = Optional.of(buildLocalIdPool(blockSize, localPoolName, globalPoolName).build());
343 doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
344 LogicalDatastoreType.CONFIGURATION, identifier);
345 doReturn(Futures.immediateCheckedFuture(expectedLocalPool)).when(mockReadTx).read(
346 LogicalDatastoreType.CONFIGURATION, childIdentifier);
347 DeleteIdPoolInput deleteIdPoolInput = createDeleteIdPoolInput(globalPoolName);
348 configDataStore.put(childIdentifier, null);
349 configDataStore.put(identifier, null);
350 Future<RpcResult<Void>> result = idManager.deleteIdPool(deleteIdPoolInput);
351 assertTrue(result.get().isSuccessful());
352 assertEquals(2, configDataStore.size());
355 private InstanceIdentifier<ReleasedIdsHolder> buildReleaseIdsIdentifier(
357 InstanceIdentifier<ReleasedIdsHolder> releasedIds = InstanceIdentifier
358 .builder(IdPools.class).child(IdPool.class,
359 new IdPoolKey(poolName)).child(ReleasedIdsHolder.class).build();
363 private InstanceIdentifier<AvailableIdsHolder> buildAvailbaleIdsIdentifier(
365 InstanceIdentifier<AvailableIdsHolder> availableIds = InstanceIdentifier
366 .builder(IdPools.class).child(IdPool.class,
367 new IdPoolKey(poolName)).child(AvailableIdsHolder.class).build();
371 private InstanceIdentifier<ChildPools> buildChildPoolInstanceIdentifier(String poolName, String childPoolName) {
372 InstanceIdentifier<ChildPools> childPool = InstanceIdentifier
373 .builder(IdPools.class).child(IdPool.class,
374 new IdPoolKey(poolName)).child(ChildPools.class, new ChildPoolsKey(childPoolName)).build();
378 private ReleaseIdInput createReleaseIdInput(String poolName, String idKey) {
379 return new ReleaseIdInputBuilder().setIdKey(idKey).setPoolName(poolName).build();
382 private IdEntries buildIdEntry(String idKey, List<Long> idValuesList) {
383 return new IdEntriesBuilder().setIdKey(idKey).setIdValue(idValuesList).build();
386 private InstanceIdentifier<IdEntries> buildIdEntriesIdentifier(String idKey) {
387 InstanceIdentifier.InstanceIdentifierBuilder<IdEntries> idEntriesBuilder = identifier
388 .builder().child(IdEntries.class, new IdEntriesKey(idKey));
389 InstanceIdentifier<IdEntries> idEntry = idEntriesBuilder.build();
393 private CreateIdPoolInput buildCreateIdPool(String poolName, long low, long high) {
394 CreateIdPoolInput createPool = new CreateIdPoolInputBuilder().setPoolName(poolName)
401 private IdPoolBuilder buildGlobalIdPool(String poolName, long idStart, long poolSize, int blockSize, List<ChildPools> childPools) {
402 AvailableIdsHolder availableIdsHolder = createAvailableIdsHolder(idStart, poolSize, idStart - 1);
403 ReleasedIdsHolder releasedIdsHolder = createReleasedIdsHolder(0, null, 0);
404 return new IdPoolBuilder().setKey(new IdPoolKey(poolName))
405 .setPoolName(poolName)
406 .setBlockSize(blockSize)
407 .setChildPools(childPools)
408 .setAvailableIdsHolder(availableIdsHolder)
409 .setReleasedIdsHolder(releasedIdsHolder);
412 private IdPoolBuilder buildLocalIdPool(int blockSize, String localPoolName, String parentPoolName) {
413 ReleasedIdsHolder releasedIdsHolder = createReleasedIdsHolder(0, null, (long) 30);
414 return new IdPoolBuilder().setBlockSize(blockSize)
415 .setKey(new IdPoolKey(localPoolName))
416 .setParentPoolName(parentPoolName)
417 .setReleasedIdsHolder(releasedIdsHolder);
420 private AllocateIdInput buildAllocateId(String poolName, String idKey) {
421 AllocateIdInput getIdInput = new AllocateIdInputBuilder().setPoolName(poolName)
422 .setIdKey(idKey).build();
426 private InstanceIdentifier<IdPool> buildInstanceIdentifier(String poolName) {
427 InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
428 InstanceIdentifier.builder(IdPools.class).child(IdPool.class, new IdPoolKey(poolName));
429 InstanceIdentifier<IdPool> id = idBuilder.build();
433 private AvailableIdsHolder createAvailableIdsHolder(long low, long high, long cursor) {
434 AvailableIdsHolder availableIdsHolder = new AvailableIdsHolderBuilder()
435 .setStart(low).setEnd(high).setCursor(cursor).build();
436 return availableIdsHolder;
439 private ReleasedIdsHolder createReleasedIdsHolder(long availableIdCount, List<DelayedIdEntries> delayedIdEntries, long delayTime) {
440 ReleasedIdsHolder releasedIdsHolder = new ReleasedIdsHolderBuilder()
441 .setAvailableIdCount(availableIdCount)
442 .setDelayedIdEntries(delayedIdEntries)
443 .setDelayedTimeSec(delayTime).build();
444 return releasedIdsHolder;
447 private DeleteIdPoolInput createDeleteIdPoolInput(String poolName) {
448 return new DeleteIdPoolInputBuilder().setPoolName(poolName).build();
451 private List<DelayedIdEntries> buildDelayedIdEntries(long[] idValues) {
452 List<DelayedIdEntries> delayedIdEntriesList = new ArrayList<>();
453 for (long idValue : idValues) {
454 DelayedIdEntries delayedIdEntries = new DelayedIdEntriesBuilder().setId(idValue).setReadyTimeSec(0L).build();
455 delayedIdEntriesList.add(delayedIdEntries);
457 return delayedIdEntriesList;
460 private List<ChildPools> buildChildPool(String childPoolName) {
461 ChildPools childPools = new ChildPoolsBuilder().setChildPoolName(childPoolName).build();
462 List<ChildPools> childPoolsList = new ArrayList<>();
463 childPoolsList.add(childPools);
464 return childPoolsList;