assertThat( result.getBefore(), equalTo( cmd.getBefore() ) ); assertThat( result.getAfter(), equalTo( cmd.getAfter() ) ); assertThat( result.getBefore().isCreated(), equalTo( cmd.getBefore().isCreated() ) ); assertThat( result.getAfter().isCreated(), equalTo( cmd.getAfter().isCreated() ) ); assertThat( result.getBefore().isDense(), equalTo( cmd.getBefore().isDense() ) ); assertThat( result.getAfter().isDense(), equalTo( cmd.getAfter().isDense()) ); assertThat( labels( result.getBefore() ), equalTo( labels( cmd.getBefore() ) ) ); assertThat( labels( result.getAfter() ), equalTo( labels( cmd.getAfter() ) ) ); assertThat( result.getBefore().getDynamicLabelRecords(), equalTo( cmd.getBefore().getDynamicLabelRecords() ) ); assertThat( result.getAfter().getDynamicLabelRecords(), equalTo( cmd.getAfter().getDynamicLabelRecords() ) ); assertThat( result.getBefore().requiresSecondaryUnit(), equalTo( cmd.getBefore().requiresSecondaryUnit() ) ); assertThat( result.getBefore().hasSecondaryUnitId(), equalTo( cmd.getBefore().hasSecondaryUnitId() ) ); assertThat( result.getBefore().getSecondaryUnitId(), equalTo( cmd.getBefore().getSecondaryUnitId() ) );
@Test public void shouldSerializeDynamicRecordsRemoved() throws Exception { channel.reset(); // Given NodeRecord before = new NodeRecord( 12, false, 1, 2 ); before.setInUse( true ); List<DynamicRecord> beforeDyn = singletonList( dynamicRecord( 0, true, true, -1L, LONG.intValue(), new byte[]{1, 2, 3, 4, 5, 6, 7, 8} ) ); before.setLabelField( dynamicPointer( beforeDyn ), beforeDyn ); NodeRecord after = new NodeRecord( 12, false, 2, 1 ); after.setInUse( true ); List<DynamicRecord> dynamicRecords = singletonList( dynamicRecord( 0, false, true, -1L, LONG.intValue(), new byte[]{ 1, 2, 3, 4, 5, 6, 7, 8} ) ); after.setLabelField( dynamicPointer( dynamicRecords ), dynamicRecords ); // When Command.NodeCommand cmd = new Command.NodeCommand( before, after ); cmd.serialize( channel ); Command.NodeCommand result = (Command.NodeCommand) commandReader.read( channel ); // Then assertThat( result, equalTo( cmd ) ); assertThat( result.getMode(), equalTo( cmd.getMode() ) ); assertThat( result.getBefore(), equalTo( cmd.getBefore() ) ); assertThat( result.getAfter(), equalTo( cmd.getAfter() ) ); // And dynamic records should be the same assertThat( result.getBefore().getDynamicLabelRecords(), equalTo( cmd.getBefore().getDynamicLabelRecords() ) ); assertThat( result.getAfter().getDynamicLabelRecords(), equalTo( cmd.getAfter().getDynamicLabelRecords() ) ); }
@Override public boolean visitNodeCommand( Command.NodeCommand command ) { // for label store updates NodeRecord before = command.getBefore(); NodeRecord after = command.getAfter(); NodeLabels labelFieldBefore = parseLabelsField( before ); NodeLabels labelFieldAfter = parseLabelsField( after ); if ( !(labelFieldBefore.isInlined() && labelFieldAfter.isInlined() && before.getLabelField() == after.getLabelField()) ) { long[] labelsBefore = labelFieldBefore.getIfLoaded(); long[] labelsAfter = labelFieldAfter.getIfLoaded(); if ( labelsBefore != null && labelsAfter != null ) { if ( labelUpdates == null ) { labelUpdates = new ArrayList<>(); } labelUpdates.add( NodeLabelUpdate.labelChanges( command.getKey(), labelsBefore, labelsAfter, txId ) ); } } // for indexes return indexUpdatesExtractor.visitNodeCommand( command ); }
if ( nodeChanges != null ) nodeLabelsBefore = parseLabelsField( nodeChanges.getBefore() ).get( nodeStore ); nodeLabelsAfter = parseLabelsField( nodeChanges.getAfter() ).get( nodeStore );
@Override public boolean visitNodeCommand( Command.NodeCommand command ) { // for label store updates NodeRecord before = command.getBefore(); NodeRecord after = command.getAfter(); NodeLabels labelFieldBefore = parseLabelsField( before ); NodeLabels labelFieldAfter = parseLabelsField( after ); if ( !(labelFieldBefore.isInlined() && labelFieldAfter.isInlined() && before.getLabelField() == after.getLabelField()) ) { long[] labelsBefore = labelFieldBefore.getIfLoaded(); long[] labelsAfter = labelFieldAfter.getIfLoaded(); if ( labelsBefore != null && labelsAfter != null ) { if ( labelUpdates == null ) { labelUpdates = new ArrayList<>(); } labelUpdates.add( NodeLabelUpdate.labelChanges( command.getKey(), labelsBefore, labelsAfter, txId ) ); } } // for indexes return indexUpdatesExtractor.visitNodeCommand( command ); }
private static boolean mayResultInIndexUpdates( NodeCommand command ) { long before = command.getBefore().getLabelField(); long after = command.getAfter().getLabelField(); return before != after || // Because we don't know here, there may have been changes to a dynamic label record // even though it still points to the same one fieldPointsToDynamicRecordOfLabels( before ) || fieldPointsToDynamicRecordOfLabels( after ); }
if ( nodeChanges != null ) nodeLabelsBefore = parseLabelsField( nodeChanges.getBefore() ).get( nodeStore ); nodeLabelsAfter = parseLabelsField( nodeChanges.getAfter() ).get( nodeStore );
@Test public void nodeCommandWithFixedReferenceFormat302() throws Exception { // Given InMemoryClosableChannel channel = new InMemoryClosableChannel(); NodeRecord before = new NodeRecord( 42, true, false, 33, 99, 66 ); NodeRecord after = new NodeRecord( 42, true, false, 33, 99, 66 ); before.setUseFixedReferences( true ); after.setUseFixedReferences( true ); new Command.NodeCommand( before, after ).serialize( channel ); // When PhysicalLogCommandReaderV3_0_2 reader = new PhysicalLogCommandReaderV3_0_2(); Command command = reader.read( channel ); assertTrue( command instanceof Command.NodeCommand); Command.NodeCommand nodeCommand = (Command.NodeCommand) command; // Then assertEquals( before, nodeCommand.getBefore() ); assertEquals( after, nodeCommand.getAfter() ); assertTrue( nodeCommand.getBefore().isUseFixedReferences() ); assertTrue( nodeCommand.getAfter().isUseFixedReferences() ); }
@Test public void nodeCommandWithFixedReferenceFormat300() throws Exception { // Given InMemoryClosableChannel channel = new InMemoryClosableChannel(); NodeRecord before = new NodeRecord( 42, true, false, 33, 99, 66 ); NodeRecord after = new NodeRecord( 42, true, false, 33, 99, 66 ); before.setUseFixedReferences( true ); after.setUseFixedReferences( true ); new Command.NodeCommand( before, after ).serialize( channel ); // When PhysicalLogCommandReaderV3_0 reader = new PhysicalLogCommandReaderV3_0(); Command command = reader.read( channel ); assertTrue( command instanceof Command.NodeCommand); Command.NodeCommand nodeCommand = (Command.NodeCommand) command; // Then assertEquals( before, nodeCommand.getBefore() ); assertEquals( after, nodeCommand.getAfter() ); assertTrue( nodeCommand.getBefore().isUseFixedReferences() ); assertTrue( nodeCommand.getAfter().isUseFixedReferences() ); }
private static boolean mayResultInIndexUpdates( NodeCommand command ) { long before = command.getBefore().getLabelField(); long after = command.getAfter().getLabelField(); return before != after || // Because we don't know here, there may have been changes to a dynamic label record // even though it still points to the same one fieldPointsToDynamicRecordOfLabels( before ) || fieldPointsToDynamicRecordOfLabels( after ); }