Skip to content

Commit

Permalink
Use primitive long diff set for index state diffs
Browse files Browse the repository at this point in the history
  • Loading branch information
MishaDemianenko committed Jan 9, 2018
1 parent deec9de commit 66f4d22
Show file tree
Hide file tree
Showing 18 changed files with 804 additions and 561 deletions.
Expand Up @@ -102,6 +102,7 @@
import org.neo4j.storageengine.api.schema.IndexReader; import org.neo4j.storageengine.api.schema.IndexReader;
import org.neo4j.storageengine.api.schema.PopulationProgress; import org.neo4j.storageengine.api.schema.PopulationProgress;
import org.neo4j.storageengine.api.txstate.NodeState; import org.neo4j.storageengine.api.txstate.NodeState;
import org.neo4j.storageengine.api.txstate.PrimitiveLongReadableDiffSets;
import org.neo4j.storageengine.api.txstate.ReadableDiffSets; import org.neo4j.storageengine.api.txstate.ReadableDiffSets;
import org.neo4j.values.storable.Value; import org.neo4j.values.storable.Value;
import org.neo4j.values.storable.ValueTuple; import org.neo4j.values.storable.ValueTuple;
Expand Down Expand Up @@ -947,7 +948,7 @@ private PrimitiveLongResourceIterator filterIndexStateChangesForScan(
{ {
if ( state.hasTxStateWithChanges() ) if ( state.hasTxStateWithChanges() )
{ {
ReadableDiffSets<Long> labelPropertyChanges = PrimitiveLongReadableDiffSets labelPropertyChanges =
state.txState().indexUpdatesForScan( index ); state.txState().indexUpdatesForScan( index );
ReadableDiffSets<Long> nodes = state.txState().addedAndRemovedNodes(); ReadableDiffSets<Long> nodes = state.txState().addedAndRemovedNodes();


Expand All @@ -963,7 +964,7 @@ private PrimitiveLongResourceIterator filterIndexStateChangesForSeek(
{ {
if ( state.hasTxStateWithChanges() ) if ( state.hasTxStateWithChanges() )
{ {
ReadableDiffSets<Long> labelPropertyChanges = PrimitiveLongReadableDiffSets labelPropertyChanges =
state.txState().indexUpdatesForSeek( index, propertyValues ); state.txState().indexUpdatesForSeek( index, propertyValues );
ReadableDiffSets<Long> nodes = state.txState().addedAndRemovedNodes(); ReadableDiffSets<Long> nodes = state.txState().addedAndRemovedNodes();


Expand All @@ -981,10 +982,10 @@ private PrimitiveLongResourceIterator filterIndexStateChangesForRangeSeekByNumbe
{ {
if ( state.hasTxStateWithChanges() ) if ( state.hasTxStateWithChanges() )
{ {
ReadableDiffSets<Long> labelPropertyChangesForNumber = TransactionState txState = state.txState();
state.txState().indexUpdatesForRangeSeekByNumber( PrimitiveLongReadableDiffSets labelPropertyChangesForNumber =
index, lower, includeLower, upper, includeUpper ); txState.indexUpdatesForRangeSeekByNumber( index, lower, includeLower, upper, includeUpper );
ReadableDiffSets<Long> nodes = state.txState().addedAndRemovedNodes(); ReadableDiffSets<Long> nodes = txState.addedAndRemovedNodes();


// Apply to actual index lookup // Apply to actual index lookup
return nodes.augmentWithRemovals( labelPropertyChangesForNumber.augment( nodeIds ) ); return nodes.augmentWithRemovals( labelPropertyChangesForNumber.augment( nodeIds ) );
Expand All @@ -1001,10 +1002,10 @@ private PrimitiveLongResourceIterator filterIndexStateChangesForRangeSeekByStrin
{ {
if ( state.hasTxStateWithChanges() ) if ( state.hasTxStateWithChanges() )
{ {
ReadableDiffSets<Long> labelPropertyChangesForString = TransactionState txState = state.txState();
state.txState().indexUpdatesForRangeSeekByString( PrimitiveLongReadableDiffSets labelPropertyChangesForString = txState.indexUpdatesForRangeSeekByString(
index, lower, includeLower, upper, includeUpper ); index, lower, includeLower, upper, includeUpper );
ReadableDiffSets<Long> nodes = state.txState().addedAndRemovedNodes(); ReadableDiffSets<Long> nodes = txState.addedAndRemovedNodes();


// Apply to actual index lookup // Apply to actual index lookup
return nodes.augmentWithRemovals( labelPropertyChangesForString.augment( nodeIds ) ); return nodes.augmentWithRemovals( labelPropertyChangesForString.augment( nodeIds ) );
Expand All @@ -1020,9 +1021,10 @@ private PrimitiveLongResourceIterator filterIndexStateChangesForRangeSeekByPrefi
{ {
if ( state.hasTxStateWithChanges() ) if ( state.hasTxStateWithChanges() )
{ {
ReadableDiffSets<Long> labelPropertyChangesForPrefix = TransactionState txState = state.txState();
state.txState().indexUpdatesForRangeSeekByPrefix( index, prefix ); PrimitiveLongReadableDiffSets labelPropertyChangesForPrefix =
ReadableDiffSets<Long> nodes = state.txState().addedAndRemovedNodes(); txState.indexUpdatesForRangeSeekByPrefix( index, prefix );
ReadableDiffSets<Long> nodes = txState.addedAndRemovedNodes();


// Apply to actual index lookup // Apply to actual index lookup
return nodes.augmentWithRemovals( labelPropertyChangesForPrefix.augment( nodeIds ) ); return nodes.augmentWithRemovals( labelPropertyChangesForPrefix.augment( nodeIds ) );
Expand Down
Expand Up @@ -19,8 +19,7 @@
*/ */
package org.neo4j.kernel.impl.api.state; package org.neo4j.kernel.impl.api.state;


import java.util.Collections; import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;


Expand All @@ -31,6 +30,7 @@
import org.neo4j.internal.kernel.api.exceptions.schema.ConstraintValidationException; import org.neo4j.internal.kernel.api.exceptions.schema.ConstraintValidationException;
import org.neo4j.kernel.impl.api.state.RelationshipChangesForNode.DiffStrategy; import org.neo4j.kernel.impl.api.state.RelationshipChangesForNode.DiffStrategy;
import org.neo4j.kernel.impl.util.diffsets.DiffSets; import org.neo4j.kernel.impl.util.diffsets.DiffSets;
import org.neo4j.kernel.impl.util.diffsets.PrimitiveLongDiffSets;
import org.neo4j.storageengine.api.Direction; import org.neo4j.storageengine.api.Direction;
import org.neo4j.storageengine.api.StorageProperty; import org.neo4j.storageengine.api.StorageProperty;
import org.neo4j.storageengine.api.txstate.NodeState; import org.neo4j.storageengine.api.txstate.NodeState;
Expand All @@ -45,7 +45,8 @@ public class NodeStateImpl extends PropertyContainerStateImpl implements NodeSta
private DiffSets<Integer> labelDiffSets; private DiffSets<Integer> labelDiffSets;
private RelationshipChangesForNode relationshipsAdded; private RelationshipChangesForNode relationshipsAdded;
private RelationshipChangesForNode relationshipsRemoved; private RelationshipChangesForNode relationshipsRemoved;
private Set<DiffSets<Long>> indexDiffs; // TODO: does this really fill any function?
private Set<PrimitiveLongDiffSets> indexDiffs;
private final TxState state; private final TxState state;


NodeStateImpl( long id, TxState state ) NodeStateImpl( long id, TxState state )
Expand Down Expand Up @@ -176,16 +177,16 @@ public PrimitiveIntSet relationshipTypes()
return intSet(); return intSet();
} }


void addIndexDiff( DiffSets<Long> diff ) void addIndexDiff( PrimitiveLongDiffSets diff )
{ {
if ( indexDiffs == null ) if ( indexDiffs == null )
{ {
indexDiffs = Collections.newSetFromMap( new IdentityHashMap<DiffSets<Long>, Boolean>() ); indexDiffs = new HashSet<>();
} }
indexDiffs.add( diff ); indexDiffs.add( diff );
} }


void removeIndexDiff( DiffSets<Long> diff ) void removeIndexDiff( PrimitiveLongDiffSets diff )
{ {
if ( indexDiffs != null ) if ( indexDiffs != null )
{ {
Expand All @@ -197,7 +198,7 @@ void clearIndexDiffs( long nodeId )
{ {
if ( indexDiffs != null ) if ( indexDiffs != null )
{ {
for ( DiffSets<Long> diff : indexDiffs ) for ( PrimitiveLongDiffSets diff : indexDiffs )
{ {
if ( diff.getAdded().contains( nodeId ) ) if ( diff.getAdded().contains( nodeId ) )
{ {
Expand Down

0 comments on commit 66f4d22

Please sign in to comment.