Skip to content

Commit

Permalink
Removed resolving of indexId by IndexDescriptor from index seeks and …
Browse files Browse the repository at this point in the history
…scan
  • Loading branch information
lutovich committed Jul 1, 2015
1 parent 8f04163 commit 2cdc5c6
Show file tree
Hide file tree
Showing 12 changed files with 86 additions and 133 deletions.
Expand Up @@ -471,7 +471,7 @@ public void transactionRecovered( long txId )
tokenNameLookup, logProvider, indexingServiceMonitor,
neoStoreModule.neoStore(), cacheModule.updateableSchemaState() );

StoreLayerModule storeLayerModule = buildStoreLayer( config, neoStoreModule.neoStore(),
StoreLayerModule storeLayerModule = buildStoreLayer( neoStoreModule.neoStore(),
propertyKeyTokenHolder, labelTokens, relationshipTypeTokens,
indexingModule.indexingService(), cacheModule.schemaCache() );

Expand Down Expand Up @@ -704,25 +704,16 @@ public SchemaIndexProviderMap schemaIndexProviderMap()
};
}

private StoreLayerModule buildStoreLayer( Config config, final NeoStore neoStore,
private StoreLayerModule buildStoreLayer( NeoStore neoStore,
PropertyKeyTokenHolder propertyKeyTokenHolder, LabelTokenHolder labelTokens,
RelationshipTypeTokenHolder relationshipTypeTokens,
IndexingService indexingService,
SchemaCache schemaCache )
{
Supplier<NeoStore> neoStoreSupplier = new Supplier<NeoStore>()
{
@Override
public NeoStore get()
{
return neoStoreModule.neoStore();
}
};

final StoreReadLayer storeLayer;
storeLayer = new CacheLayer( new DiskLayer( propertyKeyTokenHolder, labelTokens, relationshipTypeTokens,
new SchemaStorage( neoStore.getSchemaStore() ), neoStoreSupplier, indexingService ),
indexingService, schemaCache );
SchemaStorage schemaStorage = new SchemaStorage( neoStore.getSchemaStore() );
DiskLayer diskLayer = new DiskLayer( propertyKeyTokenHolder, labelTokens, relationshipTypeTokens, schemaStorage,
neoStore, indexingService );
final StoreReadLayer storeLayer = new CacheLayer( diskLayer, schemaCache );

return new StoreLayerModule()
{
Expand Down
Expand Up @@ -23,21 +23,22 @@
import java.util.Map;

import org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException;
import org.neo4j.kernel.api.index.IndexDescriptor;
import org.neo4j.kernel.api.index.IndexReader;
import org.neo4j.kernel.impl.api.index.IndexProxy;
import org.neo4j.kernel.impl.api.index.IndexingService;

public interface IndexReaderFactory
{
IndexReader newReader( long indexId ) throws IndexNotFoundKernelException;
IndexReader newReader( IndexDescriptor descriptor ) throws IndexNotFoundKernelException;

IndexReader newUnCachedReader( long indexId ) throws IndexNotFoundKernelException;
IndexReader newUnCachedReader( IndexDescriptor descriptor ) throws IndexNotFoundKernelException;

void close();

class Caching implements IndexReaderFactory
{
private Map<Long,IndexReader> indexReaders = null;
private Map<IndexDescriptor,IndexReader> indexReaders;
private final IndexingService indexingService;

public Caching( IndexingService indexingService )
Expand All @@ -46,25 +47,25 @@ public Caching( IndexingService indexingService )
}

@Override
public IndexReader newReader( long indexId ) throws IndexNotFoundKernelException
public IndexReader newReader( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
if( indexReaders == null )
{
indexReaders = new HashMap<>();
}

IndexReader reader = indexReaders.get( indexId );
IndexReader reader = indexReaders.get( descriptor );
if ( reader == null )
{
reader = newUnCachedReader( indexId );
indexReaders.put( indexId, reader );
reader = newUnCachedReader( descriptor );
indexReaders.put( descriptor, reader );
}
return reader;
}

public IndexReader newUnCachedReader( long indexId ) throws IndexNotFoundKernelException
public IndexReader newUnCachedReader( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
IndexProxy index = indexingService.getIndexProxy( indexId );
IndexProxy index = indexingService.getIndexProxy( descriptor );
return index.newReader();
}

Expand Down
Expand Up @@ -28,6 +28,7 @@
import org.neo4j.kernel.api.TokenWriteOperations;
import org.neo4j.kernel.api.exceptions.InvalidTransactionTypeKernelException;
import org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException;
import org.neo4j.kernel.api.index.IndexDescriptor;
import org.neo4j.kernel.api.index.IndexReader;
import org.neo4j.kernel.api.labelscan.LabelScanReader;
import org.neo4j.kernel.api.labelscan.LabelScanStore;
Expand Down Expand Up @@ -136,14 +137,14 @@ public Locks.Client locks()
return locks;
}

public IndexReader getIndexReader( long indexId ) throws IndexNotFoundKernelException
public IndexReader getIndexReader( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
return indexReaderFactory.newReader( indexId );
return indexReaderFactory.newReader( descriptor );
}

public IndexReader getFreshIndexReader( long indexId ) throws IndexNotFoundKernelException
public IndexReader getFreshIndexReader( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
return indexReaderFactory.newUnCachedReader( indexId );
return indexReaderFactory.newUnCachedReader( descriptor );
}

public LabelScanReader getLabelScanReader()
Expand Down
Expand Up @@ -20,6 +20,7 @@
package org.neo4j.kernel.impl.api.index;

import org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException;
import org.neo4j.kernel.api.index.IndexDescriptor;

public class IndexMapReference implements IndexMapSnapshotProvider
{
Expand All @@ -41,16 +42,26 @@ public IndexProxy getIndexProxy( long indexId ) throws IndexNotFoundKernelExcept
return proxy;
}

public IndexProxy getOnlineIndexProxy( long indexId ) throws IndexNotFoundKernelException
public IndexProxy getIndexProxy( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
IndexProxy proxy = getIndexProxy( indexId );
IndexProxy proxy = indexMap.getIndexProxy( descriptor );
if ( proxy == null )
{
throw new IndexNotFoundKernelException( "No index for " + descriptor + " exists." );
}
return proxy;
}

public IndexProxy getOnlineIndexProxy( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
IndexProxy proxy = getIndexProxy( descriptor );
switch ( proxy.getState() )
{
case ONLINE:
return proxy;

default:
throw new IndexNotFoundKernelException( "Expected index with id " + indexId + " to be online.");
throw new IndexNotFoundKernelException( "Expected index on " + descriptor + " to be online.");
}
}

Expand Down
Expand Up @@ -319,25 +319,25 @@ public void stop()
closeAllIndexes();
}

public DoubleLongRegister indexUpdatesAndSize( long indexId ) throws IndexNotFoundKernelException
public DoubleLongRegister indexUpdatesAndSize( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
final IndexProxy indexProxy = indexMapRef.getOnlineIndexProxy( indexId );
final IndexProxy indexProxy = indexMapRef.getOnlineIndexProxy( descriptor );
final DoubleLongRegister output = Registers.newDoubleLongRegister();
storeView.indexUpdatesAndSize( indexProxy.getDescriptor(), output );
return output;
}

public long indexSize( long indexId ) throws IndexNotFoundKernelException
public long indexSize( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
final IndexProxy indexProxy = indexMapRef.getOnlineIndexProxy( indexId );
final IndexProxy indexProxy = indexMapRef.getOnlineIndexProxy( descriptor );
final DoubleLongRegister output = Registers.newDoubleLongRegister();
storeView.indexSample( indexProxy.getDescriptor(), output );
return output.readSecond();
}

public double indexUniqueValuesPercentage( long indexId ) throws IndexNotFoundKernelException
public double indexUniqueValuesPercentage( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
final IndexProxy indexProxy = indexMapRef.getOnlineIndexProxy( indexId );
final IndexProxy indexProxy = indexMapRef.getOnlineIndexProxy( descriptor );
final DoubleLongRegister output = Registers.newDoubleLongRegister();
storeView.indexSample( indexProxy.getDescriptor(), output );
long unique = output.readFirst();
Expand Down Expand Up @@ -751,6 +751,11 @@ public IndexProxy getIndexProxy( long indexId ) throws IndexNotFoundKernelExcept
return indexMapRef.getIndexProxy( indexId );
}

public IndexProxy getIndexProxy( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
return indexMapRef.getIndexProxy( descriptor );
}

public void validateIndex( long indexId ) throws IndexNotFoundKernelException, ConstraintVerificationFailedKernelException, IndexPopulationFailedKernelException
{
getIndexProxy( indexId ).validate();
Expand Down
Expand Up @@ -96,15 +96,10 @@ public IndexDescriptor apply( SchemaRule from )

private final SchemaCache schemaCache;
private final DiskLayer diskLayer;
private final IndexingService indexingService;

public CacheLayer(
DiskLayer diskLayer,
IndexingService indexingService,
SchemaCache schemaCache )
public CacheLayer( DiskLayer diskLayer, SchemaCache schemaCache )
{
this.diskLayer = diskLayer;
this.indexingService = indexingService;
this.schemaCache = schemaCache;
}

Expand Down Expand Up @@ -298,7 +293,7 @@ public PrimitiveLongResourceIterator nodeGetFromUniqueIndexSeek(
Object value )
throws IndexNotFoundKernelException, IndexBrokenKernelException
{
return diskLayer.nodeGetFromUniqueIndexSeek( state, schemaCache.indexId( index ), value );
return diskLayer.nodeGetFromUniqueIndexSeek( state, index, value );
}

@Override
Expand All @@ -313,7 +308,7 @@ public PrimitiveLongIterator nodesGetFromIndexSeek( KernelStatement state,
Object value )
throws IndexNotFoundKernelException
{
return diskLayer.nodesGetFromIndexSeek( state, schemaCache.indexId( index ), value );
return diskLayer.nodesGetFromIndexSeek( state, index, value );
}

@Override
Expand All @@ -322,14 +317,14 @@ public PrimitiveLongIterator nodesGetFromIndexSeekByPrefix( KernelStatement stat
String prefix )
throws IndexNotFoundKernelException
{
return diskLayer.nodesGetFromIndexSeekByPrefix( state, schemaCache.indexId( index ), prefix );
return diskLayer.nodesGetFromIndexSeekByPrefix( state, index, prefix );
}

@Override
public PrimitiveLongIterator nodesGetFromIndexScan( KernelStatement state, IndexDescriptor index )
throws IndexNotFoundKernelException
{
return diskLayer.nodesGetFromIndexScan( state, schemaCache.indexId( index ) );
return diskLayer.nodesGetFromIndexScan( state, index );
}

@Override
Expand All @@ -342,19 +337,19 @@ public IndexDescriptor indexesGetForLabelAndPropertyKey( int labelId, int proper
public InternalIndexState indexGetState( IndexDescriptor descriptor )
throws IndexNotFoundKernelException
{
return indexingService.getIndexProxy( schemaCache.indexId( descriptor ) ).getState();
return diskLayer.indexGetState( descriptor );
}

@Override
public long indexSize( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
return indexingService.indexSize( schemaCache.indexId( descriptor ) );
return diskLayer.indexSize( descriptor );
}

@Override
public double indexUniqueValuesPercentage( IndexDescriptor descriptor ) throws IndexNotFoundKernelException
{
return indexingService.indexUniqueValuesPercentage( schemaCache.indexId( descriptor ) );
return diskLayer.indexUniqueValuesPercentage( descriptor );
}

@Override
Expand Down

0 comments on commit 2cdc5c6

Please sign in to comment.