public RecordStorageCommandReaderFactory() { readers = new CommandReader[11]; // pessimistic size readers[-LogEntryVersion.V2_3.byteCode()] = new PhysicalLogCommandReaderV2_2_4(); readers[-LogEntryVersion.V3_0.byteCode()] = new PhysicalLogCommandReaderV3_0(); readers[-LogEntryVersion.V2_3_5.byteCode()] = new PhysicalLogCommandReaderV2_2_10(); readers[-LogEntryVersion.V3_0_2.byteCode()] = new PhysicalLogCommandReaderV3_0_2(); // The 3_0_10 version bump is only to prevent mixed-version clusters; format is otherwise backwards compatible. readers[-LogEntryVersion.V3_0_10.byteCode()] = new PhysicalLogCommandReaderV3_0_2(); // A little extra safety check so that we got 'em all LogEntryVersion[] versions = LogEntryVersion.values(); for ( LogEntryVersion version : versions ) { CommandReader versionReader = readers[abs( version.byteCode() )]; if ( versionReader == null ) { throw new IllegalStateException( "Version " + version + " not handled" ); } } }
@Test public void readRelGroupWithHugeTypeInV3_0_2() throws IOException { assertCanReadRelGroup( new PhysicalLogCommandReaderV3_0_2() ); }
@Test public void readRelationshipCommandWithFixedReferenceFormat302() throws IOException { InMemoryClosableChannel channel = new InMemoryClosableChannel(); RelationshipRecord before = new RelationshipRecord( 42, true, 1, 2, 3, 4, 5, 6, 7, true, true ); before.setUseFixedReferences( true ); RelationshipRecord after = new RelationshipRecord( 42, true, 1, 8, 3, 4, 5, 6, 7, true, true ); after.setUseFixedReferences( true ); new Command.RelationshipCommand( before, after ).serialize( channel ); PhysicalLogCommandReaderV3_0_2 reader = new PhysicalLogCommandReaderV3_0_2(); Command command = reader.read( channel ); assertTrue( command instanceof Command.RelationshipCommand ); Command.RelationshipCommand relationshipCommand = (Command.RelationshipCommand) command; assertEquals( before, relationshipCommand.getBefore() ); assertTrue( relationshipCommand.getBefore().isUseFixedReferences() ); assertEquals( after, relationshipCommand.getAfter() ); assertTrue( relationshipCommand.getAfter().isUseFixedReferences() ); }
@Test public void readRelationshipGroupCommandWithFixedReferenceFormat302() throws IOException { // Given InMemoryClosableChannel channel = new InMemoryClosableChannel(); RelationshipGroupRecord before = new RelationshipGroupRecord( 42, 3 ); before.setUseFixedReferences( true ); RelationshipGroupRecord after = new RelationshipGroupRecord( 42, 3, 4, 5, 6, 7, 8, true ); after.setUseFixedReferences( true ); new Command.RelationshipGroupCommand( before, after ).serialize( channel ); // When PhysicalLogCommandReaderV3_0_2 reader = new PhysicalLogCommandReaderV3_0_2(); Command command = reader.read( channel ); assertTrue( command instanceof Command.RelationshipGroupCommand); Command.RelationshipGroupCommand relationshipGroupCommand = (Command.RelationshipGroupCommand) command; // Then assertEquals( before, relationshipGroupCommand.getBefore() ); assertEquals( after, relationshipGroupCommand.getAfter() ); assertTrue( relationshipGroupCommand.getBefore().isUseFixedReferences() ); assertTrue( relationshipGroupCommand.getAfter().isUseFixedReferences() ); }
@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 readPropertyCommandWithFixedReferenceFormat302() throws IOException { InMemoryClosableChannel channel = new InMemoryClosableChannel(); PropertyRecord before = new PropertyRecord( 1 ); PropertyRecord after = new PropertyRecord( 2 ); before.setUseFixedReferences( true ); after.setUseFixedReferences( true ); new Command.PropertyCommand( before, after ).serialize( channel ); PhysicalLogCommandReaderV3_0_2 reader = new PhysicalLogCommandReaderV3_0_2(); Command command = reader.read( channel ); assertTrue( command instanceof Command.PropertyCommand); Command.PropertyCommand neoStoreCommand = (Command.PropertyCommand) command; // Then assertEquals( before.getNextProp(), neoStoreCommand.getBefore().getNextProp() ); assertEquals( after.getNextProp(), neoStoreCommand.getAfter().getNextProp() ); assertTrue( neoStoreCommand.getBefore().isUseFixedReferences() ); assertTrue( neoStoreCommand.getAfter().isUseFixedReferences() ); }
public RecordStorageCommandReaderFactory() { readers = new CommandReader[11]; // pessimistic size readers[-LogEntryVersion.V2_3.byteCode()] = new PhysicalLogCommandReaderV2_2_4(); readers[-LogEntryVersion.V3_0.byteCode()] = new PhysicalLogCommandReaderV3_0(); readers[-LogEntryVersion.V2_3_5.byteCode()] = new PhysicalLogCommandReaderV2_2_10(); readers[-LogEntryVersion.V3_0_2.byteCode()] = new PhysicalLogCommandReaderV3_0_2(); // The 3_0_10 version bump is only to prevent mixed-version clusters; format is otherwise backwards compatible. readers[-LogEntryVersion.V3_0_10.byteCode()] = new PhysicalLogCommandReaderV3_0_2(); // A little extra safety check so that we got 'em all LogEntryVersion[] versions = LogEntryVersion.values(); for ( LogEntryVersion version : versions ) { CommandReader versionReader = readers[abs( version.byteCode() )]; if ( versionReader == null ) { throw new IllegalStateException( "Version " + version + " not handled" ); } } }