// Check if the address array file can be found on disk
boolean found = isAddressArrayFound(_config.getHomeDir());
// Create dynamic address array
AddressArray addrArray = createAddressArray(
_config.getHomeDir(),
_config.getBatchSize(),
_config.getNumSyncBatches(),
_config.getIndexesCached());
_unitCapacity = DynamicConstants.SUB_ARRAY_SIZE;
// Compute maxLevel
LinearHashing h = new LinearHashing(_unitCapacity);
h.reinit(Integer.MAX_VALUE);
_maxLevel = h.getLevel();
int initLevel = StoreParams.getDynamicStoreInitialLevel(_config.getInitialCapacity());
if(initLevel > _maxLevel) {
_log.warn("initLevel reset from " + initLevel + " to " + _maxLevel);
initLevel = _maxLevel;
}
// Expand address array length upon first-time creation
if(!found) {
addrArray.expandCapacity((_unitCapacity << initLevel) - 1);
_log.info("capacity initialized to " + addrArray.length());
}
// Create underlying segment manager
String segmentHome = _homeDir.getCanonicalPath() + File.separator + "segs";
SegmentManager segmentManager = SegmentManager.getInstance(
segmentHome,
_config.getSegmentFactory(),
_config.getSegmentFileSizeMB());
// Create underlying simple data array
this._scn = addrArray.getHWMark();
this._dataArray = new SimpleDataArray(addrArray, segmentManager, _config.getSegmentCompactFactor());
this._hashFunction = _config.getHashFunction();
this._loadThreshold = _config.getHashLoadFactor();
this._loadCount = scan();
this.initLinearHashing();