Skip to content

Commit

Permalink
Additional log message and more verbose error message for count store.
Browse files Browse the repository at this point in the history
Add additional log message for count store rebuild completion;
include expected and actual format prefix in exception message.
  • Loading branch information
MishaDemianenko committed May 26, 2017
1 parent 3a1736c commit 6231fe5
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 14 deletions.
Expand Up @@ -633,6 +633,7 @@ public void initialize( CountsAccessor.Updater updater )
{
log.warn( "Missing counts store, rebuilding it." );
new CountsComputer( neoStores ).initialize( updater );
log.warn( "Counts store rebuild completed." );
}

@Override
Expand Down
Expand Up @@ -99,17 +99,18 @@ private MetadataCollector metadata( ReadableBuffer formatSpecifier, int pageSize
}
final BigEndianByteArrayBuffer specifier = new BigEndianByteArrayBuffer( format );
HeaderField<?>[] headerFields = headerFieldsForFormat( formatSpecifier );
return new MetadataCollector( pageSize / (keySize + valueSize), headerFields )
return new MetadataCollector( pageSize / (keySize + valueSize), headerFields, specifier )
{
@Override
boolean verifyFormatSpecifier( ReadableBuffer value )
{
int size = value.size();
if ( size == specifier.size() )
ReadableBuffer expectedFormat = expectedFormat();
if ( size == expectedFormat.size() )
{
for ( int i = 0; i < size; i++ )
{
if ( value.getByte( i ) != specifier.getByte( i ) )
if ( value.getByte( i ) != expectedFormat.getByte( i ) )
{
return false;
}
Expand Down
Expand Up @@ -23,6 +23,7 @@
import java.util.HashMap;
import java.util.Map;

import static java.lang.String.format;
import static java.util.Objects.requireNonNull;

abstract class MetadataCollector extends Metadata implements EntryVisitor<BigEndianByteArrayBuffer>
Expand All @@ -35,11 +36,13 @@ abstract class MetadataCollector extends Metadata implements EntryVisitor<BigEnd
private int header, data;
private State state = State.expecting_format_specifier;
private byte[] catalogue = NO_DATA;
private final ReadableBuffer expectedFormat;

MetadataCollector( int entriesPerPage, HeaderField<?>[] headerFields )
MetadataCollector( int entriesPerPage, HeaderField<?>[] headerFields, ReadableBuffer expectedFormat)
{
this.entriesPerPage = entriesPerPage;
this.headerFields = headerFields = headerFields.clone();
this.expectedFormat = expectedFormat;
this.headerValues = new Object[headerFields.length];
for ( int i = 0; i < headerFields.length; i++ )
{
Expand Down Expand Up @@ -84,6 +87,11 @@ private void readData( BigEndianByteArrayBuffer key )

abstract boolean verifyFormatSpecifier( ReadableBuffer value );

ReadableBuffer expectedFormat()
{
return expectedFormat;
}

@Override
byte[] pageCatalogue()
{
Expand Down Expand Up @@ -230,7 +238,8 @@ private static boolean readFormatSpecifier( MetadataCollector collector,
if ( !collector.verifyFormatSpecifier( value ) )
{
collector.state = in_error;
throw new IllegalStateException( "Format header/trailer has changed." );
throw new IllegalStateException( format( "Format header/trailer has changed. " +
"Expected format:`%s`, actual:`%s`.", collector.expectedFormat(), value) );
}

try
Expand Down
Expand Up @@ -23,7 +23,7 @@ class StubCollector extends MetadataCollector
{
StubCollector( int entriesPerPage, String... header )
{
super( entriesPerPage, headerFields( header ) );
super( entriesPerPage, headerFields( header ), BigEndianByteArrayBuffer.buffer( 0 ) );
}

@Override
Expand Down
14 changes: 6 additions & 8 deletions community/neo4j/src/test/java/counts/RebuildCountsTest.java
Expand Up @@ -57,8 +57,6 @@

public class RebuildCountsTest
{
// Indexing counts are recovered/rebuild in IndexingService.start() and are not tested here

@Test
public void shouldRebuildMissingCountsStoreOnStart() throws IOException
{
Expand All @@ -77,9 +75,9 @@ public void shouldRebuildMissingCountsStoreOnStart() throws IOException
assertEquals( HUMANS, tracker.nodeCount( labelId( HUMAN ), newDoubleLongRegister() ).readSecond() );

// and also
internalLogProvider.assertAtLeastOnce(
inLog( MetaDataStore.class ).warn( "Missing counts store, rebuilding it." )
);
AssertableLogProvider.LogMatcherBuilder matcherBuilder = inLog( MetaDataStore.class );
internalLogProvider.assertAtLeastOnce( matcherBuilder.warn( "Missing counts store, rebuilding it." ) );
internalLogProvider.assertAtLeastOnce( matcherBuilder.warn( "Counts store rebuild completed." ) );
}

@Test
Expand All @@ -102,9 +100,9 @@ public void shouldRebuildMissingCountsStoreAfterRecovery() throws IOException
assertEquals( 0, tracker.nodeCount( labelId( HUMAN ), newDoubleLongRegister() ).readSecond() );

// and also
internalLogProvider.assertAtLeastOnce(
inLog( MetaDataStore.class ).warn( "Missing counts store, rebuilding it." )
);
AssertableLogProvider.LogMatcherBuilder matcherBuilder = inLog( MetaDataStore.class );
internalLogProvider.assertAtLeastOnce( matcherBuilder.warn( "Missing counts store, rebuilding it." ) );
internalLogProvider.assertAtLeastOnce( matcherBuilder.warn( "Counts store rebuild completed." ) );
}

private void createAliensAndHumans()
Expand Down

0 comments on commit 6231fe5

Please sign in to comment.