Skip to content

Commit

Permalink
Update tracking of highest page file version.
Browse files Browse the repository at this point in the history
Make timeout for CC test a bit longer.
  • Loading branch information
MishaDemianenko committed Jan 24, 2018
1 parent 1029d90 commit 93f1182
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 10 deletions.
Expand Up @@ -38,6 +38,5 @@ public void onEvict( long filePageId, Page page )
assert removed == page :
"Removed unexpected page when cleaning up translation table for filePageId " + filePageId + ". " +
"Evicted " + page + " but removed " + removed + " from the translation table.";
file.setHighestEvictedTransactionId( removed.getAndResetLastModifiedTransactionId() );
}
}
Expand Up @@ -606,12 +606,21 @@ MuninnPage evictPage( long filePageId )
int chunkId = computeChunkId( filePageId );
long chunkOffset = computeChunkOffset( filePageId );
Object[] chunk = translationTable[chunkId];
Object element = UnsafeUtil.getAndSetObject( chunk, chunkOffset, null );
assert element instanceof MuninnPage : "Expected to evict a MuninnPage but found " + element;
return (MuninnPage) element;
Object element = UnsafeUtil.getObjectVolatile( chunk, chunkOffset );
if ( element instanceof MuninnPage )
{
MuninnPage page = (MuninnPage) element;
setHighestEvictedTransactionId( page.getAndResetLastModifiedTransactionId() );
UnsafeUtil.putObjectVolatile( chunk, chunkOffset, null );
return page;
}
else
{
throw new IllegalStateException( "Expected to evict a MuninnPage but found " + element );
}
}

void setHighestEvictedTransactionId( long modifiedTransactionId )
private void setHighestEvictedTransactionId( long modifiedTransactionId )
{
UnsafeUtil.compareAndSetMaxLong( this, evictedTransactionIdOffset, modifiedTransactionId );
}
Expand Down
Expand Up @@ -30,6 +30,7 @@
import org.neo4j.causalclustering.discovery.Cluster;
import org.neo4j.causalclustering.discovery.CoreClusterMember;
import org.neo4j.causalclustering.readreplica.ReadReplicaGraphDatabase;
import org.neo4j.function.ThrowingSupplier;
import org.neo4j.graphdb.DependencyResolver;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.io.pagecache.PageCache;
Expand All @@ -43,9 +44,12 @@
import org.neo4j.kernel.impl.transaction.log.TransactionIdStore;
import org.neo4j.test.causalclustering.ClusterRule;

import static java.util.concurrent.TimeUnit.MINUTES;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertEquals;
import static org.neo4j.causalclustering.discovery.Cluster.dataMatchesEventually;
import static org.neo4j.kernel.configuration.Settings.TRUE;
import static org.neo4j.test.assertion.Assert.assertEventually;

public class VersionContextTrackingIT
{
Expand Down Expand Up @@ -75,14 +79,17 @@ public void coreMemberTransactionIdPageTracking() throws Exception
}

@Test
public void readReplicateTransactionIdPageTracking() throws Exception
public void readReplicatesTransactionIdPageTracking() throws Exception
{
long baseTxId = getBaseTransactionId();
for ( int i = 1; i < 4; i++ )
{
generateData();
dataMatchesEventually( anyCoreClusterMember(), cluster.readReplicas() );
assertEquals( getExpectedLatestPageVersion( baseTxId, i ), getLatestPageVersion( getAnyReadReplica() ) );
long expectedLatestPageVersion = getExpectedLatestPageVersion( baseTxId, i );
ThrowingSupplier<Long,Exception> replicateVersionSupplier =
() -> getLatestPageVersion( getAnyReadReplica() );
assertEventually( "Read replica page version should match to core page version.", replicateVersionSupplier,
is( expectedLatestPageVersion ), 2, MINUTES );
}
}

Expand Down Expand Up @@ -113,7 +120,7 @@ private ReadReplicaGraphDatabase getAnyReadReplica()
return cluster.findAnyReadReplica().database();
}

private long getLatestPageVersion( GraphDatabaseFacade databaseFacade ) throws IOException
private static long getLatestPageVersion( GraphDatabaseFacade databaseFacade ) throws IOException
{
DependencyResolver dependencyResolver = databaseFacade.getDependencyResolver();
PageCache pageCache = dependencyResolver.resolveDependency( PageCache.class );
Expand Down Expand Up @@ -150,7 +157,7 @@ private void generateData() throws Exception
}
}

private class CursorPageAccessor extends MuninnPageCursor
private static class CursorPageAccessor extends MuninnPageCursor
{

private MuninnPageCursor delegate;
Expand Down

0 comments on commit 93f1182

Please sign in to comment.