@Override public void remapOrdinal(String type, int originalOrdinal, int mappedOrdinal) { IntMap remap = unmatchedOrdinalRemapping.get(type); if(remap == null) throw new IllegalStateException("Must call hintUnmatchedOrdinalCount for type " + type + " before attempting to remap unmatched ordinals"); remap.put(originalOrdinal, mappedOrdinal); }
public void removed(HollowTypeReadState typeState, int stateEngineOrdinal, int mappedOrdinal) { int recordKeyOrdinal = keyIndex.findKeyIndexOrdinal((HollowObjectTypeReadState)typeState, stateEngineOrdinal); removedOrdinalMap.put(recordKeyOrdinal, mappedOrdinal); }
public void added(HollowTypeReadState typeState, int ordinal) { int recordKeyOrdinal = keyIndex.findKeyIndexOrdinal((HollowObjectTypeReadState)typeState, ordinal); addedOrdinalMap.put(recordKeyOrdinal, ordinal); }
private void copyRecord(int ordinal) { int shard = ordinal & shardNumberMask; int shardOrdinal = ordinal >> shardOrdinalShift; long bitsPerElement = stateEngineDataElements[shard].bitsPerElement; long fromStartElement = shardOrdinal == 0 ? 0 : stateEngineDataElements[shard].listPointerArray.getElementValue((long)(shardOrdinal - 1) * stateEngineDataElements[shard].bitsPerListPointer, stateEngineDataElements[shard].bitsPerListPointer); long fromEndElement = stateEngineDataElements[shard].listPointerArray.getElementValue((long)shardOrdinal * stateEngineDataElements[shard].bitsPerListPointer, stateEngineDataElements[shard].bitsPerListPointer); long size = fromEndElement - fromStartElement; historicalDataElements.elementArray.copyBits(stateEngineDataElements[shard].elementArray, fromStartElement * bitsPerElement, nextStartElement * bitsPerElement, size * bitsPerElement); historicalDataElements.listPointerArray.setElementValue((long)nextOrdinal * historicalDataElements.bitsPerListPointer, historicalDataElements.bitsPerListPointer, nextStartElement + size); ordinalMapping.put(ordinal, nextOrdinal); nextOrdinal++; nextStartElement += size; }
private IntMap copyAllRecords(HollowTypeReadState typeState, DiffEqualityMappingOrdinalRemapper ordinalRemapper, HollowWriteStateEngine writeEngine) { String typeName = typeState.getSchema().getName(); HollowRecordCopier recordCopier = HollowRecordCopier.createCopier(typeState, ordinalRemapper, false); ///NOTE: This will invalidate custom hash codes PopulatedOrdinalListener listener = typeState.getListener(PopulatedOrdinalListener.class); IntMap ordinalLookupMap = new IntMap(listener.getPopulatedOrdinals().cardinality()); int ordinal = listener.getPopulatedOrdinals().nextSetBit(0); while(ordinal != -1) { HollowWriteRecord rec = recordCopier.copy(ordinal); int mappedOrdinal = writeEngine.add(typeName, rec); ordinalLookupMap.put(ordinal, mappedOrdinal); ordinal = listener.getPopulatedOrdinals().nextSetBit(ordinal + 1); } return ordinalLookupMap; }
public void populateHistory() { populateStats(); historicalDataElements.setPointerAndSizeArray = new FixedLengthElementArray(historicalDataElements.memoryRecycler, ((long)historicalDataElements.maxOrdinal + 1) * historicalDataElements.bitsPerFixedLengthSetPortion); historicalDataElements.elementArray = new FixedLengthElementArray(historicalDataElements.memoryRecycler, historicalDataElements.totalNumberOfBuckets * historicalDataElements.bitsPerElement); iter.reset(); int ordinal = iter.next(); while(ordinal != ORDINAL_NONE) { ordinalMapping.put(ordinal, nextOrdinal); copyRecord(ordinal); ordinal = iter.next(); } }
public void populateHistory() { populateStats(); historicalDataElements.listPointerArray = new FixedLengthElementArray(historicalDataElements.memoryRecycler, ((long)historicalDataElements.maxOrdinal + 1) * historicalDataElements.bitsPerListPointer); historicalDataElements.elementArray = new FixedLengthElementArray(historicalDataElements.memoryRecycler, historicalDataElements.totalNumberOfElements * historicalDataElements.bitsPerElement); iter.reset(); int ordinal = iter.next(); while(ordinal != ORDINAL_NONE) { ordinalMapping.put(ordinal, nextOrdinal); copyRecord(ordinal); ordinal = iter.next(); } }
private IntMap remapPreviousOrdinalMapping(IntMap previousOrdinalMapping, String typeName, OrdinalRemapper ordinalRemapper) { IntMapEntryIterator ordinalMappingIter = previousOrdinalMapping.iterator(); IntMap ordinalLookupMap = new IntMap(previousOrdinalMapping.size()); while(ordinalMappingIter.next()) ordinalLookupMap.put(ordinalRemapper.getMappedOrdinal(typeName, ordinalMappingIter.getKey()), ordinalMappingIter.getValue()); return ordinalLookupMap; }
public void populateHistory() { populateStats(); historicalDataElements.mapPointerAndSizeArray = new FixedLengthElementArray(historicalDataElements.memoryRecycler, ((long)historicalDataElements.maxOrdinal + 1) * historicalDataElements.bitsPerFixedLengthMapPortion); historicalDataElements.entryArray = new FixedLengthElementArray(historicalDataElements.memoryRecycler, historicalDataElements.totalNumberOfBuckets * historicalDataElements.bitsPerMapEntry); iter.reset(); int ordinal = iter.next(); while(ordinal != ORDINAL_NONE) { ordinalMapping.put(ordinal, nextOrdinal); copyRecord(ordinal); ordinal = iter.next(); } }
public HollowHistoricalStateTypeKeyOrdinalMapping remap(OrdinalRemapper remapper) { IntMap newAddedOrdinalMap = new IntMap(addedOrdinalMap.size()); IntMapEntryIterator addedIter = addedOrdinalMap.iterator(); while(addedIter.next()) newAddedOrdinalMap.put(addedIter.getKey(), remapper.getMappedOrdinal(typeName, addedIter.getValue())); IntMap newRemovedOrdinalMap = new IntMap(removedOrdinalMap.size()); IntMapEntryIterator removedIter = removedOrdinalMap.iterator(); while(removedIter.next()) newRemovedOrdinalMap.put(removedIter.getKey(), remapper.getMappedOrdinal(typeName, removedIter.getValue())); return new HollowHistoricalStateTypeKeyOrdinalMapping(typeName, keyIndex, newAddedOrdinalMap, newRemovedOrdinalMap); }
HollowWriteRecord rec = copier.copy(ordinalToRelocate); writeState.mapOrdinal(rec, relocatePosition, false, true); remappedOrdinals.put(ordinalToRelocate, relocatePosition); HollowWriteRecord rec = copier.copy(remapOrdinal); int newOrdinal = writeState.add(rec); remappedOrdinals.put(remapOrdinal, newOrdinal); writeState.removeOrdinalFromThisCycle(remapOrdinal);
private void remapTheChangedDataToUnusedOrdinals() { PartialOrdinalRemapper remapper = new PartialOrdinalRemapper(); for(HollowSchema schema : schemas) { BitSet ordinalsToRemap = changedOrdinalsBetweenStates.get(schema.getName()); HollowTypeReadState fromTypeState = from.getTypeState(schema.getName()); HollowTypeReadState toTypeState = to.getTypeState(schema.getName()); HollowTypeWriteState typeWriteState = writeEngine.getTypeState(schema.getName()); IntMap ordinalRemapping = new IntMap(ordinalsToRemap.cardinality()); int nextFreeOrdinal = Math.max(fromTypeState.maxOrdinal(), toTypeState.maxOrdinal()) + 1; boolean preserveHashPositions = shouldPreserveHashPositions(schema); HollowRecordCopier copier = HollowRecordCopier.createCopier(fromTypeState, schema, remapper, preserveHashPositions); int ordinal = ordinalsToRemap.nextSetBit(0); while(ordinal != -1 && ordinal <= fromTypeState.maxOrdinal()) { HollowWriteRecord copy = copier.copy(ordinal); typeWriteState.mapOrdinal(copy, nextFreeOrdinal, false, true); ordinalRemapping.put(ordinal, nextFreeOrdinal++); ordinal = ordinalsToRemap.nextSetBit(ordinal + 1); } remapper.addOrdinalRemapping(schema.getName(), ordinalRemapping); typeWriteState.recalculateFreeOrdinals(); } }
public void populateHistory() { populateStats(); historicalDataElements.fixedLengthData = new FixedLengthElementArray(historicalDataElements.memoryRecycler, (long)historicalDataElements.bitsPerRecord * (historicalDataElements.maxOrdinal + 1)); for(int i=0;i<historicalDataElements.schema.numFields();i++) { if(stateEngineDataElements[0].varLengthData[i] != null) { historicalDataElements.varLengthData[i] = new SegmentedByteArray(historicalDataElements.memoryRecycler); } } iter.reset(); int ordinal = iter.next(); while(ordinal != ORDINAL_NONE) { ordinalMapping.put(ordinal, nextOrdinal); copyRecord(ordinal); ordinal = iter.next(); } }