Package io.deephaven.engine.table.impl
Class NaturalJoinModifiedSlotTracker
java.lang.Object
io.deephaven.engine.table.impl.NaturalJoinModifiedSlotTracker
A tracker for modified join hash table slots.
After adding an entry, you get back a cookie, which must be passed in on future modification operations for that
slot.
To process the entries after modifications are complete, call
forAllModifiedSlots(ModifiedSlotConsumer).-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final bytethe slot has accumulated left row keys to add (inslotLeftRowSetBuilders)static final bytethe slot has accumulated left row keys to remove (inslotLeftRowSetBuilders)static final bytethe slot has accumulated post-shift left row keys of one shift range (inslotLeftRowSetBuilders)static final intstatic final bytestatic final bytestatic final bytestatic final byte -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionlongaddLeftAddition(long cookie, int slot, long addedRowKey, long rightValue) Accumulate a left row key that must be added toslot.longaddLeftRemoval(long cookie, int slot, long removedRowKey, long rightValue) Accumulate a left row key that must be removed fromslot.longaddLeftShift(long cookie, int slot, long shiftedRowKey, long rightValue) Accumulate the post-shift row key of a left row ofslotthat one shift range moves.longaddMain(long cookie, int slot, long originalRightValue, byte flags) Add a slot in the main table.longaddMainRightAdd(long cookie, int slot, long originalRightValue, long addedRightRowKey, byte flags) Record a right row arriving ataddedRightRowKeyinslot.voidforAllLeftAdditions(boolean addedToTable, NaturalJoinModifiedSlotTracker.LeftRowSetConsumer consumer) For each slot that has accumulated left additions, build the added-key row set and pass it to the consumer, then discard the slot's builder and clear itsFLAG_LEFT_ADDflag (so the finalforAllModifiedSlots(ModifiedSlotConsumer)pass does not re-process it).voidFor each slot that has accumulated left removals, build the removed-key row set and pass it to the consumer, then discard the slot's builder and clear itsFLAG_LEFT_REMOVEflag (so a subsequent removal pass and the finalforAllModifiedSlots(ModifiedSlotConsumer)pass do not re-process it).voidFor each slot that has accumulated left shifts, build the post-shift row set of the shifted keys and pass it to the consumer, then discard the slot's builder and clear itsFLAG_LEFT_SHIFTflag (so a subsequent shift range and the finalforAllModifiedSlots(ModifiedSlotConsumer)pass do not re-process it).voidmoveTableLocation(long cookie, int oldTableLocation, int newTableLocation) Move a main table location.voidremoveEntry(long cookie) Discard the entry for a slot that has been tombstoned.
-
Field Details
-
FLAG_MASK
public static final int FLAG_MASK- See Also:
-
FLAG_RIGHT_SHIFT
public static final byte FLAG_RIGHT_SHIFT- See Also:
-
FLAG_RIGHT_MODIFY_PROBE
public static final byte FLAG_RIGHT_MODIFY_PROBE- See Also:
-
FLAG_RIGHT_CHANGE
public static final byte FLAG_RIGHT_CHANGE- See Also:
-
FLAG_RIGHT_ADD
public static final byte FLAG_RIGHT_ADD- See Also:
-
FLAG_LEFT_REMOVE
public static final byte FLAG_LEFT_REMOVEthe slot has accumulated left row keys to remove (inslotLeftRowSetBuilders)- See Also:
-
FLAG_LEFT_ADD
public static final byte FLAG_LEFT_ADDthe slot has accumulated left row keys to add (inslotLeftRowSetBuilders)- See Also:
-
FLAG_LEFT_SHIFT
public static final byte FLAG_LEFT_SHIFTthe slot has accumulated post-shift left row keys of one shift range (inslotLeftRowSetBuilders)- See Also:
-
-
Constructor Details
-
NaturalJoinModifiedSlotTracker
public NaturalJoinModifiedSlotTracker()
-
-
Method Details
-
addMain
public long addMain(long cookie, int slot, long originalRightValue, byte flags) Add a slot in the main table.- Parameters:
slot- the slot to add.originalRightValue- the slot's right state before this modification (a right row key, a duplicate location token, or one of the no-right-row markers); recorded only if this call creates the entryflags- the flags to or into our state- Returns:
- the cookie for future access
-
addMainRightAdd
public long addMainRightAdd(long cookie, int slot, long originalRightValue, long addedRightRowKey, byte flags) Record a right row arriving ataddedRightRowKeyinslot. Beyondflags, this marksFLAG_RIGHT_ADDwhen the arriving row takes the row key this slot's entry recorded as its original right row: the left rows' redirection then names a different row than it did before, even though the row key it holds is unchanged. That happens when the previously selected right row shifts away from its key within the same cycle and a new right row for the same join key is added at the vacated key.- Parameters:
cookie- the slot's existing cookie (or an invalid cookie if this slot has not been tracked yet)slot- the hash slot (encoding main/alternate via the insert mask)originalRightValue- the slot's right state before this additionaddedRightRowKey- the row key of the arriving right rowflags- the flags to or into our state- Returns:
- the cookie for future access
-
addLeftRemoval
public long addLeftRemoval(long cookie, int slot, long removedRowKey, long rightValue) Accumulate a left row key that must be removed fromslot. The removal is not performed here; the key is appended to the slot's sequential builder and theFLAG_LEFT_REMOVEflag is set. The caller performs the removals in bulk later viaforAllLeftRemovals(LeftRowSetConsumer).- Parameters:
cookie- the slot's existing cookie (or an invalid cookie if this slot has not been tracked yet)slot- the hash slot (encoding main/alternate via the insert mask)removedRowKey- the left row key to remove from the slotrightValue- the slot's current right state, used as the original right value if we must allocate an entry- Returns:
- the cookie for future access
-
addLeftAddition
public long addLeftAddition(long cookie, int slot, long addedRowKey, long rightValue) Accumulate a left row key that must be added toslot. The insertion is not performed here; the key is appended to the slot's sequential builder and theFLAG_LEFT_ADDflag is set. The caller performs the insertions in bulk later viaforAllLeftAdditions(boolean, LeftRowSetConsumer).- Parameters:
cookie- the slot's existing cookie (or an invalid cookie if this slot has not been tracked yet)slot- the hash slot (encoding main/alternate via the insert mask)addedRowKey- the left row key to add to the slotrightValue- the slot's current right state, used as the original right value if we must allocate an entry- Returns:
- the cookie for future access
-
addLeftShift
public long addLeftShift(long cookie, int slot, long shiftedRowKey, long rightValue) Accumulate the post-shift row key of a left row ofslotthat one shift range moves. The slot's left row set is not touched here; the key is appended to the slot's sequential builder and theFLAG_LEFT_SHIFTflag is set. The caller performs the shift of each slot's rows in bulk viaforAllLeftShifts(LeftRowSetConsumer)once the range's rows have all been probed.- Parameters:
cookie- the slot's existing cookie (or an invalid cookie if this slot has not been tracked yet)slot- the hash slot (encoding main/alternate via the insert mask)shiftedRowKey- the post-shift row key of the left rowrightValue- the slot's current right state, used as the original right value if we must allocate an entry- Returns:
- the cookie for future access
-
removeEntry
public void removeEntry(long cookie) Discard the entry for a slot that has been tombstoned. The slot no longer describes the key the entry was recorded for, so the entry must not be applied to whatever key later reuses the slot.- Parameters:
cookie- the slot's cookie; an invalid cookie means the slot has no entry this cycle
-
moveTableLocation
public void moveTableLocation(long cookie, int oldTableLocation, int newTableLocation) Move a main table location.- Parameters:
oldTableLocation- the old hash slotnewTableLocation- the new hash slot
-
forAllLeftRemovals
For each slot that has accumulated left removals, build the removed-key row set and pass it to the consumer, then discard the slot's builder and clear itsFLAG_LEFT_REMOVEflag (so a subsequent removal pass and the finalforAllModifiedSlots(ModifiedSlotConsumer)pass do not re-process it). The row set handed to the consumer is owned by this method and closed after the consumer returns.- Parameters:
consumer- the consumer of each slot's removed left row keys
-
forAllLeftShifts
For each slot that has accumulated left shifts, build the post-shift row set of the shifted keys and pass it to the consumer, then discard the slot's builder and clear itsFLAG_LEFT_SHIFTflag (so a subsequent shift range and the finalforAllModifiedSlots(ModifiedSlotConsumer)pass do not re-process it). The row set handed to the consumer is owned by this method and closed after the consumer returns.- Parameters:
consumer- the consumer of each slot's shifted left row keys
-
forAllLeftAdditions
public void forAllLeftAdditions(boolean addedToTable, NaturalJoinModifiedSlotTracker.LeftRowSetConsumer consumer) For each slot that has accumulated left additions, build the added-key row set and pass it to the consumer, then discard the slot's builder and clear itsFLAG_LEFT_ADDflag (so the finalforAllModifiedSlots(ModifiedSlotConsumer)pass does not re-process it). The row set handed to the consumer is owned by this method and closed after the consumer returns.- Parameters:
addedToTable- whether the accumulated keys are rows added to the left table this cycle, in which case they are counted forNaturalJoinModifiedSlotTracker.ModifiedSlotConsumer.accept(int, long, byte, long)consumer- the consumer of each slot's added left row keys
-