Skip to content

Commit

Permalink
Refactored count-store to use indexId to be independent of index defi…
Browse files Browse the repository at this point in the history
…nition
  • Loading branch information
craigtaverner committed Feb 1, 2017
1 parent 763f464 commit 8e91181
Show file tree
Hide file tree
Showing 63 changed files with 659 additions and 525 deletions.
Expand Up @@ -65,7 +65,14 @@ public void resampleIndex( String indexSpecification ) throws ProcedureException
int labelId = getLabelId( index.label() );
int propertyKeyId = getPropertyKeyId( index.property() );
//TODO: Support composite indexes
triggerSampling( getIndex( labelId, propertyKeyId, index ) );
try
{
triggerSampling( getIndex( labelId, propertyKeyId, index ) );
}
catch ( IndexNotFoundKernelException e )
{
throw new ProcedureException( e.status(), e.getMessage(), e );
}
}

public void resampleOutdatedIndexes()
Expand Down Expand Up @@ -157,7 +164,7 @@ private InternalIndexState getState( IndexSpecifier indexDescription, IndexDescr
}
}

private void triggerSampling( IndexDescriptor index )
private void triggerSampling( IndexDescriptor index ) throws IndexNotFoundKernelException
{
indexingService.triggerIndexSampling( index, IndexSamplingMode.TRIGGER_REBUILD_ALL );
}
Expand Down
Expand Up @@ -40,13 +40,13 @@ public interface CountsAccessor extends CountsVisitor.Visitable
* @param target a register to store the read values in
* @return the input register for convenience
*/
DoubleLongRegister indexUpdatesAndSize( IndexDescriptor descriptor, DoubleLongRegister target );
DoubleLongRegister indexUpdatesAndSize( long indexId, DoubleLongRegister target );

/**
* @param target a register to store the read values in
* @return the input register for convenience
*/
DoubleLongRegister indexSample( IndexDescriptor descriptor, DoubleLongRegister target );
DoubleLongRegister indexSample( long indexId, DoubleLongRegister target );

interface Updater extends AutoCloseable
{
Expand All @@ -60,11 +60,11 @@ interface Updater extends AutoCloseable

interface IndexStatsUpdater extends AutoCloseable
{
void replaceIndexUpdateAndSize( IndexDescriptor descriptor, long updates, long size );
void replaceIndexUpdateAndSize( long indexId, long updates, long size );

void replaceIndexSample( IndexDescriptor descriptor, long unique, long size );
void replaceIndexSample( long indexId, long unique, long size );

void incrementIndexUpdates( IndexDescriptor descriptor, long delta );
void incrementIndexUpdates( long indexId, long delta );

@Override
void close();
Expand Down Expand Up @@ -94,15 +94,15 @@ public void visitRelationshipCount( int startLabelId, int typeId, int endLabelId
}

@Override
public void visitIndexStatistics( IndexDescriptor descriptor, long updates, long size )
public void visitIndexStatistics( long indexId, long updates, long size )
{
stats.replaceIndexUpdateAndSize( descriptor, updates, size );
stats.replaceIndexUpdateAndSize( indexId, updates, size );
}

@Override
public void visitIndexSample( IndexDescriptor descriptor, long unique, long size )
public void visitIndexSample( long indexId, long unique, long size )
{
stats.replaceIndexSample( descriptor, unique, size );
stats.replaceIndexSample( indexId, unique, size );
}
}
}
Expand Up @@ -25,7 +25,6 @@
import java.util.List;
import java.util.Map;

import org.neo4j.kernel.api.schema.IndexDescriptor;
import org.neo4j.kernel.impl.store.counts.keys.CountsKey;
import org.neo4j.kernel.impl.transaction.command.Command;
import org.neo4j.kernel.impl.transaction.state.RecordState;
Expand Down Expand Up @@ -68,9 +67,9 @@ public DoubleLongRegister relationshipCount( int startLabelId, int typeId, int e
}

@Override
public DoubleLongRegister indexSample( IndexDescriptor descriptor, DoubleLongRegister target )
public DoubleLongRegister indexSample( long indexId, DoubleLongRegister target )
{
counts( indexSampleKey( descriptor ) ).copyTo( target );
counts( indexSampleKey( indexId ) ).copyTo( target );
return target;
}

Expand All @@ -84,28 +83,28 @@ public void incrementRelationshipCount( int startLabelId, int typeId, int endLab
}

@Override
public DoubleLongRegister indexUpdatesAndSize( IndexDescriptor descriptor, DoubleLongRegister target )
public DoubleLongRegister indexUpdatesAndSize( long indexId, DoubleLongRegister target )
{
counts( indexStatisticsKey( descriptor ) ).copyTo( target );
counts( indexStatisticsKey( indexId ) ).copyTo( target );
return target;
}

@Override
public void replaceIndexUpdateAndSize( IndexDescriptor descriptor, long updates, long size )
public void replaceIndexUpdateAndSize( long indexId, long updates, long size )
{
counts( indexStatisticsKey( descriptor ) ).write( updates, size );
counts( indexStatisticsKey( indexId ) ).write( updates, size );
}

@Override
public void incrementIndexUpdates( IndexDescriptor descriptor, long delta )
public void incrementIndexUpdates( long indexId, long delta )
{
counts( indexStatisticsKey( descriptor ) ).increment( delta, 0L );
counts( indexStatisticsKey( indexId ) ).increment( delta, 0L );
}

@Override
public void replaceIndexSample( IndexDescriptor descriptor, long unique, long size )
public void replaceIndexSample( long indexId, long unique, long size )
{
counts( indexSampleKey( descriptor ) ).write( unique, size );
counts( indexSampleKey( indexId ) ).write( unique, size );
}

@Override
Expand Down Expand Up @@ -286,15 +285,15 @@ public void visitRelationshipCount( int startLabelId, int typeId, int endLabelId
verify( relationshipKey( startLabelId, typeId, endLabelId ), 0, count );
}
@Override
public void visitIndexStatistics( IndexDescriptor descriptor, long updates, long size )
public void visitIndexStatistics( long indexId, long updates, long size )
{
verify( indexStatisticsKey( descriptor ), updates, size );
verify( indexStatisticsKey( indexId ), updates, size );
}

@Override
public void visitIndexSample( IndexDescriptor descriptor, long unique, long size )
public void visitIndexSample( long indexId, long unique, long size )
{
verify( indexSampleKey( descriptor ), unique, size );
verify( indexSampleKey( indexId ), unique, size );
}

private void verify( CountsKey key, long actualFirst, long actualSecond )
Expand Down
Expand Up @@ -19,8 +19,6 @@
*/
package org.neo4j.kernel.impl.api;

import org.neo4j.kernel.api.schema.IndexDescriptor;

public interface CountsVisitor
{
interface Visitable
Expand All @@ -32,9 +30,9 @@ interface Visitable

void visitRelationshipCount( int startLabelId, int typeId, int endLabelId, long count );

void visitIndexStatistics( IndexDescriptor descriptor, long updates, long size );
void visitIndexStatistics( long indexId, long updates, long size );

void visitIndexSample( IndexDescriptor descriptor, long unique, long size );
void visitIndexSample( long indexId, long unique, long size );

public static class Adapter implements CountsVisitor
{
Expand All @@ -51,13 +49,13 @@ public void visitRelationshipCount( int startLabelId, int typeId, int endLabelId
}

@Override
public void visitIndexStatistics( IndexDescriptor descriptor, long updates, long size )
public void visitIndexStatistics( long indexId, long updates, long size )
{
// override in subclasses
}

@Override
public void visitIndexSample( IndexDescriptor descriptor, long unique, long size )
public void visitIndexSample( long indexId, long unique, long size )
{
// override in subclasses
}
Expand Down Expand Up @@ -85,20 +83,20 @@ public void visitRelationshipCount( int startLabelId, int typeId, int endLabelId
}

@Override
public void visitIndexStatistics( IndexDescriptor descriptor, long updates, long size )
public void visitIndexStatistics( long indexId, long updates, long size )
{
for ( CountsVisitor visitor : visitors )
{
visitor.visitIndexStatistics( descriptor, updates, size );
visitor.visitIndexStatistics( indexId, updates, size );
}
}

@Override
public void visitIndexSample( IndexDescriptor descriptor, long unique, long size )
public void visitIndexSample( long indexId, long unique, long size )
{
for ( CountsVisitor visitor : visitors )
{
visitor.visitIndexSample( descriptor, unique, size );
visitor.visitIndexSample( indexId, unique, size );
}
}
};
Expand Down
Expand Up @@ -1160,13 +1160,14 @@ public double indexUniqueValuesPercentage( KernelStatement statement, IndexDescr

@Override
public DoubleLongRegister indexUpdatesAndSize( KernelStatement statement, IndexDescriptor index,
DoubleLongRegister target )
DoubleLongRegister target ) throws IndexNotFoundKernelException
{
return storeLayer.indexUpdatesAndSize( index, target );
}

@Override
public DoubleLongRegister indexSample( KernelStatement statement, IndexDescriptor index, DoubleLongRegister target )
throws IndexNotFoundKernelException
{
return storeLayer.indexSample( index, target );
}
Expand Down
Expand Up @@ -121,11 +121,11 @@ public StoreScan<IndexPopulationFailedKernelException> indexAllNodes()
}

@Override
protected IndexPopulation createPopulation( IndexPopulator populator,
protected IndexPopulation createPopulation( IndexPopulator populator, long indexId,
IndexDescriptor descriptor, IndexConfiguration config, SchemaIndexProvider.Descriptor providerDescriptor,
FlippableIndexProxy flipper, FailedIndexProxyFactory failedIndexProxyFactory, String indexUserDescription )
{
return new BatchingIndexPopulation( populator, descriptor, config, providerDescriptor, flipper,
return new BatchingIndexPopulation( populator, indexId, descriptor, config, providerDescriptor, flipper,
failedIndexProxyFactory, indexUserDescription );
}

Expand Down Expand Up @@ -339,11 +339,12 @@ private int getNumberOfPopulationWorkers()
*/
private class BatchingIndexPopulation extends IndexPopulation
{
BatchingIndexPopulation( IndexPopulator populator, IndexDescriptor descriptor, IndexConfiguration config,
SchemaIndexProvider.Descriptor providerDescriptor, FlippableIndexProxy flipper,
FailedIndexProxyFactory failedIndexProxyFactory, String indexUserDescription )
BatchingIndexPopulation( IndexPopulator populator, long indexId, IndexDescriptor descriptor,
IndexConfiguration config, SchemaIndexProvider.Descriptor providerDescriptor,
FlippableIndexProxy flipper, FailedIndexProxyFactory failedIndexProxyFactory,
String indexUserDescription )
{
super( populator, descriptor, config, providerDescriptor, flipper, failedIndexProxyFactory,
super( populator, indexId, descriptor, config, providerDescriptor, flipper, failedIndexProxyFactory,
indexUserDescription );
}

Expand Down
Expand Up @@ -24,16 +24,16 @@
public class IndexCountsRemover
{
private final IndexStoreView storeView;
private final IndexDescriptor descriptor;
private final long indexId;

public IndexCountsRemover( final IndexStoreView storeView, final IndexDescriptor descriptor )
public IndexCountsRemover( final IndexStoreView storeView, final long indexId )
{
this.storeView = storeView;
this.descriptor = descriptor;
this.indexId = indexId;
}

public void remove()
{
storeView.replaceIndexCounts( descriptor, 0, 0, 0 );
storeView.replaceIndexCounts( indexId, 0, 0, 0 );
}
}
Expand Up @@ -36,16 +36,18 @@ public final class IndexMap implements Cloneable
{
private final Map<Long, IndexProxy> indexesById;
private final Map<IndexDescriptor, IndexProxy> indexesByDescriptor;
private final Map<IndexDescriptor, Long> indexIdsByDescriptor;

public IndexMap()
{
this( new HashMap<>(), new HashMap<>() );
this( new HashMap<>(), new HashMap<>(), new HashMap<>() );
}

private IndexMap( Map<Long, IndexProxy> indexesById, Map<IndexDescriptor, IndexProxy> indexesByDescriptor )
private IndexMap( Map<Long, IndexProxy> indexesById, Map<IndexDescriptor, IndexProxy> indexesByDescriptor, Map<IndexDescriptor, Long> indexIdsByDescriptor )
{
this.indexesById = indexesById;
this.indexesByDescriptor = indexesByDescriptor;
this.indexIdsByDescriptor = indexIdsByDescriptor;
}

public IndexProxy getIndexProxy( long indexId )
Expand All @@ -58,10 +60,16 @@ public IndexProxy getIndexProxy( IndexDescriptor descriptor )
return indexesByDescriptor.get( descriptor );
}

public long getIndexId( IndexDescriptor descriptor )
{
return indexIdsByDescriptor.get( descriptor );
}

public void putIndexProxy( long indexId, IndexProxy indexProxy )
{
indexesById.put( indexId, indexProxy );
indexesByDescriptor.put( indexProxy.getDescriptor(), indexProxy );
indexIdsByDescriptor.put( indexProxy.getDescriptor(), indexId );
}

public IndexProxy removeIndexProxy( long indexId )
Expand Down Expand Up @@ -90,7 +98,8 @@ public Iterable<IndexProxy> getAllIndexProxies()
@Override
public IndexMap clone()
{
return new IndexMap( cloneMap( indexesById ), cloneMap( indexesByDescriptor ) );
return new IndexMap( cloneMap( indexesById ), cloneMap( indexesByDescriptor ),
cloneMap( indexIdsByDescriptor ) );
}

private <K, V> Map<K, V> cloneMap( Map<K, V> map )
Expand All @@ -105,6 +114,11 @@ public Iterator<IndexDescriptor> descriptors()
return indexesByDescriptor.keySet().iterator();
}

public Iterator<Long> indexIds()
{
return indexesById.keySet().iterator();
}

public int size()
{
return indexesById.size();
Expand Down
Expand Up @@ -52,16 +52,26 @@ public IndexProxy getIndexProxy( IndexDescriptor descriptor ) throws IndexNotFou
return proxy;
}

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

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

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

Expand Down
Expand Up @@ -75,6 +75,7 @@ public IndexPopulationJob( IndexStoreView storeView,
* @param failedIndexProxyFactory {@link FailedIndexProxyFactory} to use after an unsuccessful population.
*/
public void addPopulator( IndexPopulator populator,
long indexId,
IndexDescriptor descriptor,
IndexConfiguration config,
SchemaIndexProvider.Descriptor providerDescriptor,
Expand All @@ -83,7 +84,7 @@ public void addPopulator( IndexPopulator populator,
FailedIndexProxyFactory failedIndexProxyFactory )
{
assert storeScan == null : "Population have already started, too late to add populators at this point";
this.multiPopulator.addPopulator( populator, descriptor, providerDescriptor, config, flipper,
this.multiPopulator.addPopulator( populator, indexId, descriptor, providerDescriptor, config, flipper,
failedIndexProxyFactory, indexUserDescription );
}

Expand Down

0 comments on commit 8e91181

Please sign in to comment.