Skip to content

Commit

Permalink
Revert Token extends NamedToken
Browse files Browse the repository at this point in the history
Having Token extend the public NamedToken introduced a massive change
for a tiny bit of performance that is most probably not needed there.
  • Loading branch information
pontusmelke committed Mar 2, 2018
1 parent 789b7e3 commit 128918f
Show file tree
Hide file tree
Showing 33 changed files with 135 additions and 86 deletions.
Expand Up @@ -22,17 +22,59 @@
/** /**
* A token with its associated name. * A token with its associated name.
*/ */
public interface NamedToken public final class NamedToken
{ {
private final int id;
private final String name;

public NamedToken( int id, String name )
{
this.id = id;
this.name = name;
}

/** /**
* Id of token * Id of token
*
* @return the id of the token * @return the id of the token
*/ */
int id(); public int id()
{
return id;
}


/** /**
* The name associated with the token * The name associated with the token
*
* @return The name corresponding to the token * @return The name corresponding to the token
*/ */
String name(); public String name()
{
return name;
}

@Override
public boolean equals( Object o )
{
if ( this == o )
{
return true;
}
if ( o == null || getClass() != o.getClass() )
{
return false;
}

NamedToken that = (NamedToken) o;

return id == that.id && name.equals( that.name );
}

@Override
public int hashCode()
{
int result = id;
result = 31 * result + name.hashCode();
return result;
}
} }
Expand Up @@ -32,7 +32,6 @@
import org.neo4j.graphdb.Direction; import org.neo4j.graphdb.Direction;
import org.neo4j.internal.kernel.api.IndexQuery; import org.neo4j.internal.kernel.api.IndexQuery;
import org.neo4j.internal.kernel.api.InternalIndexState; import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.NamedToken;
import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException;
import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException;
import org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException;
Expand All @@ -58,6 +57,7 @@
import org.neo4j.storageengine.api.NodeItem; import org.neo4j.storageengine.api.NodeItem;
import org.neo4j.storageengine.api.PropertyItem; import org.neo4j.storageengine.api.PropertyItem;
import org.neo4j.storageengine.api.RelationshipItem; import org.neo4j.storageengine.api.RelationshipItem;
import org.neo4j.storageengine.api.Token;
import org.neo4j.storageengine.api.lock.ResourceType; import org.neo4j.storageengine.api.lock.ResourceType;
import org.neo4j.storageengine.api.schema.PopulationProgress; import org.neo4j.storageengine.api.schema.PopulationProgress;
import org.neo4j.values.storable.Value; import org.neo4j.values.storable.Value;
Expand All @@ -82,7 +82,7 @@ public interface ReadOperations
String labelGetName( int labelId ) throws LabelNotFoundKernelException; String labelGetName( int labelId ) throws LabelNotFoundKernelException;


/** Returns the labels currently stored in the database * */ /** Returns the labels currently stored in the database * */
Iterator<NamedToken> labelsGetAllTokens(); Iterator<Token> labelsGetAllTokens();
/** /**
* Returns a property key id for the given property key. If the property key doesn't exist, * Returns a property key id for the given property key. If the property key doesn't exist,
* {@link StatementConstants#NO_SUCH_PROPERTY_KEY} will be returned. * {@link StatementConstants#NO_SUCH_PROPERTY_KEY} will be returned.
Expand All @@ -93,14 +93,14 @@ public interface ReadOperations
String propertyKeyGetName( int propertyKeyId ) throws PropertyKeyIdNotFoundKernelException; String propertyKeyGetName( int propertyKeyId ) throws PropertyKeyIdNotFoundKernelException;


/** Returns the property keys currently stored in the database */ /** Returns the property keys currently stored in the database */
Iterator<NamedToken> propertyKeyGetAllTokens(); Iterator<Token> propertyKeyGetAllTokens();


int relationshipTypeGetForName( String relationshipTypeName ); int relationshipTypeGetForName( String relationshipTypeName );


String relationshipTypeGetName( int relationshipTypeId ) throws RelationshipTypeIdNotFoundKernelException; String relationshipTypeGetName( int relationshipTypeId ) throws RelationshipTypeIdNotFoundKernelException;


/** Returns the relationship types currently stored in the database */ /** Returns the relationship types currently stored in the database */
Iterator<NamedToken> relationshipTypesGetAllTokens(); Iterator<Token> relationshipTypesGetAllTokens();


int labelCount(); int labelCount();


Expand Down
Expand Up @@ -87,7 +87,7 @@ public Stream<LabelResult> listLabels()
{ {
// Ownership of the reference to the acquired statement is transfered to the returned iterator stream, // Ownership of the reference to the acquired statement is transfered to the returned iterator stream,
// but we still want to eagerly consume the labels, so we can catch any exceptions, // but we still want to eagerly consume the labels, so we can catch any exceptions,
List<LabelResult> labelResults = asList( TokenAccess.LABELS.inUse( statement ).map( LabelResult::new ) ); List<LabelResult> labelResults = asList( TokenAccess.LABELS.inUse( tx ).map( LabelResult::new ) );
return labelResults.stream(); return labelResults.stream();
} }
catch ( Throwable t ) catch ( Throwable t )
Expand All @@ -107,7 +107,7 @@ public Stream<PropertyKeyResult> listPropertyKeys()
// Ownership of the reference to the acquired statement is transfered to the returned iterator stream, // Ownership of the reference to the acquired statement is transfered to the returned iterator stream,
// but we still want to eagerly consume the labels, so we can catch any exceptions, // but we still want to eagerly consume the labels, so we can catch any exceptions,
List<PropertyKeyResult> propertyKeys = List<PropertyKeyResult> propertyKeys =
asList( TokenAccess.PROPERTY_KEYS.inUse( statement ).map( PropertyKeyResult::new ) ); asList( TokenAccess.PROPERTY_KEYS.inUse( tx ).map( PropertyKeyResult::new ) );
return propertyKeys.stream(); return propertyKeys.stream();
} }
catch ( Throwable t ) catch ( Throwable t )
Expand All @@ -127,7 +127,7 @@ public Stream<RelationshipTypeResult> listRelationshipTypes()
// Ownership of the reference to the acquired statement is transfered to the returned iterator stream, // Ownership of the reference to the acquired statement is transfered to the returned iterator stream,
// but we still want to eagerly consume the labels, so we can catch any exceptions, // but we still want to eagerly consume the labels, so we can catch any exceptions,
List<RelationshipTypeResult> relationshipTypes = List<RelationshipTypeResult> relationshipTypes =
asList( TokenAccess.RELATIONSHIP_TYPES.inUse( statement ).map( RelationshipTypeResult::new ) ); asList( TokenAccess.RELATIONSHIP_TYPES.inUse( tx ).map( RelationshipTypeResult::new ) );
return relationshipTypes.stream(); return relationshipTypes.stream();
} }
catch ( Throwable t ) catch ( Throwable t )
Expand Down
Expand Up @@ -36,7 +36,6 @@
import org.neo4j.helpers.collection.Iterators; import org.neo4j.helpers.collection.Iterators;
import org.neo4j.internal.kernel.api.IndexQuery; import org.neo4j.internal.kernel.api.IndexQuery;
import org.neo4j.internal.kernel.api.InternalIndexState; import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.NamedToken;
import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException;
import org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException; import org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException;
import org.neo4j.internal.kernel.api.exceptions.KernelException; import org.neo4j.internal.kernel.api.exceptions.KernelException;
Expand Down Expand Up @@ -110,6 +109,7 @@
import org.neo4j.storageengine.api.NodeItem; import org.neo4j.storageengine.api.NodeItem;
import org.neo4j.storageengine.api.PropertyItem; import org.neo4j.storageengine.api.PropertyItem;
import org.neo4j.storageengine.api.RelationshipItem; import org.neo4j.storageengine.api.RelationshipItem;
import org.neo4j.storageengine.api.Token;
import org.neo4j.storageengine.api.lock.ResourceType; import org.neo4j.storageengine.api.lock.ResourceType;
import org.neo4j.storageengine.api.schema.PopulationProgress; import org.neo4j.storageengine.api.schema.PopulationProgress;
import org.neo4j.storageengine.api.schema.SchemaRule; import org.neo4j.storageengine.api.schema.SchemaRule;
Expand Down Expand Up @@ -687,7 +687,7 @@ public String propertyKeyGetName( int propertyKeyId ) throws PropertyKeyIdNotFou
} }


@Override @Override
public Iterator<NamedToken> propertyKeyGetAllTokens() public Iterator<Token> propertyKeyGetAllTokens()
{ {
statement.assertOpen(); statement.assertOpen();
AccessMode mode = tx.securityContext().mode(); AccessMode mode = tx.securityContext().mode();
Expand All @@ -696,14 +696,14 @@ public Iterator<NamedToken> propertyKeyGetAllTokens()
} }


@Override @Override
public Iterator<NamedToken> labelsGetAllTokens() public Iterator<Token> labelsGetAllTokens()
{ {
statement.assertOpen(); statement.assertOpen();
return tokenRead().labelsGetAllTokens( statement ); return tokenRead().labelsGetAllTokens( statement );
} }


@Override @Override
public Iterator<NamedToken> relationshipTypesGetAllTokens() public Iterator<Token> relationshipTypesGetAllTokens()
{ {
statement.assertOpen(); statement.assertOpen();
return tokenRead().relationshipTypesGetAllTokens( statement ); return tokenRead().relationshipTypesGetAllTokens( statement );
Expand Down
Expand Up @@ -32,7 +32,6 @@
import org.neo4j.graphdb.NotFoundException; import org.neo4j.graphdb.NotFoundException;
import org.neo4j.internal.kernel.api.IndexQuery; import org.neo4j.internal.kernel.api.IndexQuery;
import org.neo4j.internal.kernel.api.InternalIndexState; import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.NamedToken;
import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException;
import org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException; import org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException;
import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException;
Expand Down Expand Up @@ -93,6 +92,7 @@
import org.neo4j.storageengine.api.StorageProperty; import org.neo4j.storageengine.api.StorageProperty;
import org.neo4j.storageengine.api.StorageStatement; import org.neo4j.storageengine.api.StorageStatement;
import org.neo4j.storageengine.api.StoreReadLayer; import org.neo4j.storageengine.api.StoreReadLayer;
import org.neo4j.storageengine.api.Token;
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;
Expand Down Expand Up @@ -1373,19 +1373,19 @@ public String propertyKeyGetName( Statement state, int propertyKeyId ) throws Pr
} }


@Override @Override
public Iterator<NamedToken> propertyKeyGetAllTokens( Statement state ) public Iterator<Token> propertyKeyGetAllTokens( Statement state )
{ {
return storeLayer.propertyKeyGetAllTokens(); return storeLayer.propertyKeyGetAllTokens();
} }


@Override @Override
public Iterator<NamedToken> labelsGetAllTokens( Statement state ) public Iterator<Token> labelsGetAllTokens( Statement state )
{ {
return storeLayer.labelsGetAllTokens(); return storeLayer.labelsGetAllTokens();
} }


@Override @Override
public Iterator<NamedToken> relationshipTypesGetAllTokens( Statement state ) public Iterator<Token> relationshipTypesGetAllTokens( Statement state )
{ {
return storeLayer.relationshipTypeGetAllTokens(); return storeLayer.relationshipTypeGetAllTokens();
} }
Expand Down
Expand Up @@ -21,13 +21,13 @@


import java.util.Iterator; import java.util.Iterator;


import org.neo4j.internal.kernel.api.NamedToken;
import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException;
import org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException;
import org.neo4j.kernel.api.Statement; import org.neo4j.kernel.api.Statement;
import org.neo4j.kernel.api.StatementConstants; import org.neo4j.kernel.api.StatementConstants;
import org.neo4j.kernel.api.exceptions.RelationshipTypeIdNotFoundKernelException; import org.neo4j.kernel.api.exceptions.RelationshipTypeIdNotFoundKernelException;
import org.neo4j.kernel.impl.api.KernelStatement; import org.neo4j.kernel.impl.api.KernelStatement;
import org.neo4j.storageengine.api.Token;


public interface KeyReadOperations public interface KeyReadOperations
{ {
Expand All @@ -51,13 +51,13 @@ public interface KeyReadOperations
String propertyKeyGetName( Statement state, int propertyKeyId ) throws PropertyKeyIdNotFoundKernelException; String propertyKeyGetName( Statement state, int propertyKeyId ) throws PropertyKeyIdNotFoundKernelException;


/** Returns the property keys currently stored in the database */ /** Returns the property keys currently stored in the database */
Iterator<NamedToken> propertyKeyGetAllTokens( Statement state ); Iterator<Token> propertyKeyGetAllTokens( Statement state );


/** Returns the labels currently stored in the database **/ /** Returns the labels currently stored in the database **/
Iterator<NamedToken> labelsGetAllTokens( Statement state ); Iterator<Token> labelsGetAllTokens( Statement state );


/** Returns the relationship types currently stored in the database */ /** Returns the relationship types currently stored in the database */
Iterator<NamedToken> relationshipTypesGetAllTokens( Statement state ); Iterator<Token> relationshipTypesGetAllTokens( Statement state );


int relationshipTypeGetForName( Statement state, String relationshipTypeName ); int relationshipTypeGetForName( Statement state, String relationshipTypeName );


Expand Down
Expand Up @@ -33,7 +33,6 @@
import org.neo4j.helpers.collection.Iterators; import org.neo4j.helpers.collection.Iterators;
import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.internal.kernel.api.IndexCapability;
import org.neo4j.internal.kernel.api.InternalIndexState; import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.NamedToken;
import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException;
import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException;
import org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException;
Expand Down Expand Up @@ -81,6 +80,7 @@
import org.neo4j.storageengine.api.StorageProperty; import org.neo4j.storageengine.api.StorageProperty;
import org.neo4j.storageengine.api.StorageStatement; import org.neo4j.storageengine.api.StorageStatement;
import org.neo4j.storageengine.api.StoreReadLayer; import org.neo4j.storageengine.api.StoreReadLayer;
import org.neo4j.storageengine.api.Token;
import org.neo4j.storageengine.api.schema.PopulationProgress; import org.neo4j.storageengine.api.schema.PopulationProgress;
import org.neo4j.storageengine.api.schema.SchemaRule; import org.neo4j.storageengine.api.schema.SchemaRule;


Expand Down Expand Up @@ -348,20 +348,20 @@ public Iterator<StorageProperty> graphGetAllProperties()
} }


@Override @Override
public Iterator<NamedToken> propertyKeyGetAllTokens() public Iterator<Token> propertyKeyGetAllTokens()
{ {
return propertyKeyTokenHolder.getAllTokens().iterator(); return propertyKeyTokenHolder.getAllTokens().iterator();
} }


@Override @Override
public Iterator<NamedToken> labelsGetAllTokens() public Iterator<Token> labelsGetAllTokens()
{ {
return labelTokenHolder.getAllTokens().iterator(); return labelTokenHolder.getAllTokens().iterator();
} }


@SuppressWarnings( "unchecked" ) @SuppressWarnings( "unchecked" )
@Override @Override
public Iterator<NamedToken> relationshipTypeGetAllTokens() public Iterator<Token> relationshipTypeGetAllTokens()
{ {
return (Iterator) relationshipTokenHolder.getAllTokens().iterator(); return (Iterator) relationshipTokenHolder.getAllTokens().iterator();
} }
Expand Down
Expand Up @@ -54,7 +54,7 @@ public void clear()
idToToken.clear(); idToToken.clear();
} }


private void putAndEnsureUnique( Map<String,Integer> nameToId, Token token, String tokenType ) private void putAndEnsureUnique( Map<String,Integer> nameToId, TOKEN token, String tokenType )
{ {
Integer previous = nameToId.putIfAbsent( token.name(), token.id() ); Integer previous = nameToId.putIfAbsent( token.name(), token.id() );
if ( previous != null && previous != token.id() ) if ( previous != null && previous != token.id() )
Expand Down
Expand Up @@ -19,8 +19,8 @@
*/ */
package org.neo4j.kernel.impl.core; package org.neo4j.kernel.impl.core;


import org.neo4j.internal.kernel.api.NamedToken; import org.neo4j.storageengine.api.Token;


public interface LabelTokenHolder extends TokenHolder<NamedToken> public interface LabelTokenHolder extends TokenHolder<Token>
{ {
} }
Expand Up @@ -19,8 +19,8 @@
*/ */
package org.neo4j.kernel.impl.core; package org.neo4j.kernel.impl.core;


import org.neo4j.internal.kernel.api.NamedToken; import org.neo4j.storageengine.api.Token;


public interface PropertyKeyTokenHolder extends TokenHolder<NamedToken> public interface PropertyKeyTokenHolder extends TokenHolder<Token>
{ {
} }
Expand Up @@ -21,9 +21,9 @@


import java.util.List; import java.util.List;


import org.neo4j.internal.kernel.api.NamedToken; import org.neo4j.storageengine.api.Token;


public interface TokenHolder<TOKEN extends NamedToken> public interface TokenHolder<TOKEN extends Token>
{ {
int NO_ID = -1; int NO_ID = -1;


Expand Down
Expand Up @@ -110,23 +110,25 @@ public String propertyKeyName( int propertyKeyId ) throws PropertyKeyIdNotFoundK
public Iterator<NamedToken> labelsGetAllTokens() public Iterator<NamedToken> labelsGetAllTokens()
{ {
ktx.assertOpen(); ktx.assertOpen();
return store.labelsGetAllTokens(); return Iterators.map( token -> new NamedToken( token.id(), token.name() ), store.labelsGetAllTokens());
} }


@Override @Override
public Iterator<NamedToken> propertyKeyGetAllTokens() public Iterator<NamedToken> propertyKeyGetAllTokens()
{ {
ktx.assertOpen(); ktx.assertOpen();
AccessMode mode = ktx.securityContext().mode(); AccessMode mode = ktx.securityContext().mode();
return Iterators.stream( store.propertyKeyGetAllTokens() ). return Iterators.stream( store.propertyKeyGetAllTokens() )
filter( propKey -> mode.allowsPropertyReads( propKey.id() ) ).iterator(); .filter( propKey -> mode.allowsPropertyReads( propKey.id() ) )
.map( token -> new NamedToken( token.id(), token.name() ) )
.iterator();
} }


@Override @Override
public Iterator<NamedToken> relationshipTypesGetAllTokens() public Iterator<NamedToken> relationshipTypesGetAllTokens()
{ {
ktx.assertOpen(); ktx.assertOpen();
return store.relationshipTypeGetAllTokens(); return Iterators.map( token -> new NamedToken( token.id(), token.name() ), store.relationshipTypeGetAllTokens());
} }


private String checkValidTokenName( String name ) throws IllegalTokenNameException private String checkValidTokenName( String name ) throws IllegalTokenNameException
Expand Down
Expand Up @@ -30,7 +30,6 @@
import org.neo4j.cursor.Cursor; import org.neo4j.cursor.Cursor;
import org.neo4j.internal.kernel.api.IndexCapability; import org.neo4j.internal.kernel.api.IndexCapability;
import org.neo4j.internal.kernel.api.InternalIndexState; import org.neo4j.internal.kernel.api.InternalIndexState;
import org.neo4j.internal.kernel.api.NamedToken;
import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException; import org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException;
import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException;
import org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException; import org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException;
Expand Down Expand Up @@ -230,17 +229,17 @@ long indexGetCommittedId( IndexDescriptor index )
/** /**
* @return all stored property key tokens. * @return all stored property key tokens.
*/ */
Iterator<NamedToken> propertyKeyGetAllTokens(); Iterator<Token> propertyKeyGetAllTokens();


/** /**
* @return all stored label tokens. * @return all stored label tokens.
*/ */
Iterator<NamedToken> labelsGetAllTokens(); Iterator<Token> labelsGetAllTokens();


/** /**
* @return all stored relationship type tokens. * @return all stored relationship type tokens.
*/ */
Iterator<NamedToken> relationshipTypeGetAllTokens(); Iterator<Token> relationshipTypeGetAllTokens();


/** /**
* @param relationshipTypeName name of relationship type. * @param relationshipTypeName name of relationship type.
Expand Down
Expand Up @@ -19,9 +19,8 @@
*/ */
package org.neo4j.storageengine.api; package org.neo4j.storageengine.api;


import org.neo4j.internal.kernel.api.NamedToken;


public class Token implements NamedToken public class Token
{ {
private final String name; private final String name;
private final int id; private final int id;
Expand Down

0 comments on commit 128918f

Please sign in to comment.