public class AvailableIdHolder implements IdHolder {
- private long low = 0;
- private long high = 0;
+ private final long low;
+ private final long high;
private final AtomicLong cur = new AtomicLong();
private final IdUtils idUtils;
public class IdLocalPool {
- private String poolName;
- private IdHolder availableIds; // List of available IDs
- private IdHolder releasedIds; // List of released IDs
+ private final String poolName;
+ private volatile IdHolder availableIds; // List of available IDs
+ private volatile IdHolder releasedIds; // List of released IDs
public IdLocalPool(IdUtils idUtils, String poolName, long low, long high) {
this.poolName = poolName;
return poolName;
}
- public void setPoolName(String poolName) {
- this.poolName = poolName;
- }
-
public IdHolder getAvailableIds() {
return availableIds;
}
parentPoolName = parentPoolName.intern();
idUtils.lockPool(lockManager, parentPoolName);
try {
+ // Check if the childpool already got id block.
+ long availableIdCount =
+ localIdPool.getAvailableIds().getAvailableIdCount()
+ + localIdPool.getReleasedIds().getAvailableIdCount();
+ if (availableIdCount > 0) {
+ return availableIdCount;
+ }
WriteTransaction tx = broker.newWriteOnlyTransaction();
IdPool parentIdPool = singleTxDB.syncRead(CONFIGURATION, idPoolInstanceIdentifier);
long idCount = allocateIdBlockFromParentPool(localIdPool, parentIdPool, tx);
private final AtomicLong availableIdCount = new AtomicLong();
- private long timeDelaySec;
+ private final long timeDelaySec;
private List<DelayedIdEntry> delayedEntries;
private final IdUtils idUtils;
return delayedEntries;
}
- public void setTimeDelaySec(long timeDelaySec) {
- this.timeDelaySec = timeDelaySec;
- }
-
public void setDelayedEntries(List<DelayedIdEntry> delayedEntries) {
this.delayedEntries = delayedEntries;
}