@Test( expected = IllegalArgumentException.class ) public void shouldThrowWhenTryingToCreateFileThatAlreadyExists() { // Given FileSystemAbstraction fs = mock( FileSystemAbstraction.class ); when( fs.fileExists( file ) ).thenReturn( false ).thenReturn( true ); when( fs.getFileSize( file ) ).thenReturn( 42L ); // When new IndexProviderStore( file, fs, MetaDataStore.versionStringToLong( "3.5" ), false ); // Then // exception is thrown }
private static long defaultStoreVersion() { return MetaDataStore.versionStringToLong( RecordFormatSelector.defaultFormat().storeVersion() ); }
@Test public void shouldWriteNewFileWhenExistingFileHasZeroLength() throws IOException { // Given file.createNewFile(); // When IndexProviderStore store = new IndexProviderStore( file, fileSystem, MetaDataStore.versionStringToLong( "3.5" ), false ); // Then assertTrue( fileSystem.getFileSize( file ) > 0 ); store.close(); } }
@Test public void shouldFailUpgradeIfNotAllowed() { IndexProviderStore store = new IndexProviderStore( file, fileSystem, MetaDataStore.versionStringToLong( "3.1" ), true ); store.close(); store = new IndexProviderStore( file, fileSystem, MetaDataStore.versionStringToLong( "3.1" ), false ); store.close(); try { new IndexProviderStore( file, fileSystem, MetaDataStore.versionStringToLong( "3.5" ), false ); fail( "Shouldn't be able to upgrade there" ); } catch ( UpgradeNotAllowedByConfigurationException e ) { // Good } store = new IndexProviderStore( file, fileSystem, MetaDataStore.versionStringToLong( "3.5" ), true ); assertEquals( "3.5", MetaDataStore.versionLongToString( store.getIndexVersion() ) ); store.close(); }
@Test( expected = NotCurrentStoreVersionException.class ) public void shouldFailToGoBackToOlderVersion() { String newerVersion = "3.5"; String olderVersion = "3.1"; try { IndexProviderStore store = new IndexProviderStore( file, fileSystem, MetaDataStore.versionStringToLong( newerVersion ), true ); store.close(); store = new IndexProviderStore( file, fileSystem, MetaDataStore.versionStringToLong( olderVersion ), false ); } catch ( NotCurrentStoreVersionException e ) { assertTrue( e.getMessage().contains( newerVersion ) ); assertTrue( e.getMessage().contains( olderVersion ) ); throw e; } }
@Test( expected = NotCurrentStoreVersionException.class ) public void shouldFailToGoBackToOlderVersionEvenIfAllowUpgrade() { String newerVersion = "3.5"; String olderVersion = "3.1"; try { IndexProviderStore store = new IndexProviderStore( file, fileSystem, MetaDataStore.versionStringToLong( newerVersion ), true ); store.close(); store = new IndexProviderStore( file, fileSystem, MetaDataStore.versionStringToLong( olderVersion ), true ); } catch ( NotCurrentStoreVersionException e ) { assertTrue( e.getMessage().contains( newerVersion ) ); assertTrue( e.getMessage().contains( olderVersion ) ); throw e; } }
private void prepareNeoStoreFile( String storeVersion ) throws IOException { File neoStoreFile = createNeoStoreFile(); long value = MetaDataStore.versionStringToLong( storeVersion ); try ( PageCache pageCache = pageCacheRule.getPageCache( fsRule.get() ) ) { MetaDataStore.setRecord( pageCache, neoStoreFile, STORE_VERSION, value ); } }
IndexProviderStore store = new IndexProviderStore( file, fs, MetaDataStore.versionStringToLong( "3.5" ), false );
@Test public void mustSupportScanningAllRecords() throws Exception { File file = createMetaDataFile(); MetaDataStore.Position[] positions = MetaDataStore.Position.values(); long storeVersion = versionStringToLong( Standard.LATEST_RECORD_FORMATS.storeVersion()); writeCorrectMetaDataRecord( file, positions, storeVersion ); List<Long> actualValues = new ArrayList<>(); try ( MetaDataStore store = newMetaDataStore() ) { store.scanAllRecords( record -> { actualValues.add( record.getValue() ); return false; } ); } List<Long> expectedValues = Arrays.stream( positions ).map( p -> { if ( p == MetaDataStore.Position.STORE_VERSION ) { return storeVersion; } else { return p.ordinal() + 1L; } } ).collect( Collectors.toList() ); assertThat( actualValues, is( expectedValues ) ); }
private void prepareEmpty23Database() throws IOException { new TestGraphDatabaseFactory().newEmbeddedDatabase( storeDir ).shutdown(); fileSystem.deleteFile( nativeLabelIndex ); MetaDataStore.setRecord( pageCache, databaseLayout.metadataStore(), Position.STORE_VERSION, versionStringToLong( StandardV2_3.STORE_VERSION ) ); }
long storeVersion = versionStringToLong( Standard.LATEST_RECORD_FORMATS.storeVersion()); writeCorrectMetaDataRecord( file, positions, storeVersion );
@Test void startTheDatabaseWithWrongVersionShouldFailWithUpgradeNotAllowed() throws Throwable { // given // create a store File databaseDir = testDirectory.databaseDir(); GraphDatabaseService db = new TestGraphDatabaseFactory().newEmbeddedDatabase( databaseDir ); try ( Transaction tx = db.beginTx() ) { db.createNode(); tx.success(); } db.shutdown(); // mess up the version in the metadatastore try ( FileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction(); ThreadPoolJobScheduler scheduler = new ThreadPoolJobScheduler(); PageCache pageCache = createPageCache( fileSystem, scheduler ) ) { MetaDataStore.setRecord( pageCache, testDirectory.databaseLayout().metadataStore(), MetaDataStore.Position.STORE_VERSION, MetaDataStore.versionStringToLong( "bad" )); } RuntimeException exception = assertThrows( RuntimeException.class, () -> new TestGraphDatabaseFactory().newEmbeddedDatabase( databaseDir ) ); assertTrue( exception.getCause() instanceof LifecycleException ); assertTrue( exception.getCause().getCause() instanceof IllegalArgumentException ); assertEquals( "Unknown store version 'bad'", exception.getCause().getCause().getMessage() ); }
@Override protected void initialiseNewStoreFile( PagedFile file ) throws IOException { super.initialiseNewStoreFile( file ); long storeVersionAsLong = MetaDataStore.versionStringToLong( storeVersion ); StoreId storeId = new StoreId( storeVersionAsLong ); pagedFile = file; setCreationTime( storeId.getCreationTime() ); setRandomNumber( storeId.getRandomId() ); // If metaDataStore.creationTime == metaDataStore.upgradeTime && metaDataStore.upgradeTransactionId == BASE_TX_ID // then store has never been upgraded setUpgradeTime( storeId.getCreationTime() ); setUpgradeTransaction( BASE_TX_ID, BASE_TX_CHECKSUM, BASE_TX_COMMIT_TIMESTAMP ); setCurrentLogVersion( 0 ); setLastCommittedAndClosedTransactionId( BASE_TX_ID, BASE_TX_CHECKSUM, BASE_TX_COMMIT_TIMESTAMP, BASE_TX_LOG_BYTE_OFFSET, BASE_TX_LOG_VERSION ); setStoreVersion( storeVersionAsLong ); setGraphNextProp( -1 ); setLatestConstraintIntroducingTx( 0 ); flush(); pagedFile = null; }
MetaDataStore.versionStringToLong( versionToMigrateTo ) );
@Test void startTheDatabaseWithWrongVersionShouldFailAlsoWhenUpgradeIsAllowed() throws Throwable { // given // create a store File databaseDirectory = testDirectory.databaseDir(); GraphDatabaseService db = new TestGraphDatabaseFactory().newEmbeddedDatabase( databaseDirectory ); try ( Transaction tx = db.beginTx() ) { db.createNode(); tx.success(); } db.shutdown(); // mess up the version in the metadatastore String badStoreVersion = "bad"; try ( FileSystemAbstraction fileSystem = new DefaultFileSystemAbstraction(); ThreadPoolJobScheduler scheduler = new ThreadPoolJobScheduler(); PageCache pageCache = createPageCache( fileSystem, scheduler ) ) { MetaDataStore.setRecord( pageCache, testDirectory.databaseLayout().metadataStore(), MetaDataStore.Position.STORE_VERSION, MetaDataStore.versionStringToLong( badStoreVersion ) ); } RuntimeException exception = assertThrows( RuntimeException.class, () -> new TestGraphDatabaseFactory().newEmbeddedDatabaseBuilder( databaseDirectory ).setConfig( GraphDatabaseSettings.allow_upgrade, "true" ).newGraphDatabase() ); assertTrue( exception.getCause() instanceof LifecycleException ); assertTrue( exception.getCause().getCause() instanceof StoreUpgrader.UnexpectedUpgradingStoreVersionException ); }
@Test public void shouldReportFileWithIncorrectVersion() throws IOException { // given File neoStore = emptyFile( fileSystemRule.get() ); long v1 = MetaDataStore.versionStringToLong( "V1" ); PageCache pageCache = pageCacheRule.getPageCache( fileSystemRule.get() ); MetaDataStore.setRecord( pageCache, neoStore, MetaDataStore.Position.STORE_VERSION, v1 ); StoreVersionCheck storeVersionCheck = new StoreVersionCheck( pageCache ); // when StoreVersionCheck.Result result = storeVersionCheck.hasVersion( neoStore, "V2" ); // then assertFalse( result.outcome.isSuccessful() ); assertEquals( StoreVersionCheck.Result.Outcome.unexpectedStoreVersion, result.outcome ); assertEquals( "V1", result.actualVersion ); }
@Test public void shouldReportFileWithCorrectVersion() throws IOException { // given File neoStore = emptyFile( fileSystemRule.get() ); long v1 = MetaDataStore.versionStringToLong( "V1" ); PageCache pageCache = pageCacheRule.getPageCache( fileSystemRule.get() ); MetaDataStore.setRecord( pageCache, neoStore, MetaDataStore.Position.STORE_VERSION, v1 ); StoreVersionCheck storeVersionCheck = new StoreVersionCheck( pageCache ); // when StoreVersionCheck.Result result = storeVersionCheck.hasVersion( neoStore, "V1" ); // then assertTrue( result.outcome.isSuccessful() ); assertEquals( StoreVersionCheck.Result.Outcome.ok, result.outcome ); assertNull( result.actualVersion ); }
@Override protected void initialiseNewStoreFile( PagedFile file ) throws IOException { super.initialiseNewStoreFile( file ); long storeVersionAsLong = MetaDataStore.versionStringToLong( storeVersion ); StoreId storeId = new StoreId( storeVersionAsLong ); pagedFile = file; setCreationTime( storeId.getCreationTime() ); setRandomNumber( storeId.getRandomId() ); // If metaDataStore.creationTime == metaDataStore.upgradeTime && metaDataStore.upgradeTransactionId == BASE_TX_ID // then store has never been upgraded setUpgradeTime( storeId.getCreationTime() ); setUpgradeTransaction( BASE_TX_ID, BASE_TX_CHECKSUM, BASE_TX_COMMIT_TIMESTAMP ); setCurrentLogVersion( 0 ); setLastCommittedAndClosedTransactionId( BASE_TX_ID, BASE_TX_CHECKSUM, BASE_TX_COMMIT_TIMESTAMP, BASE_TX_LOG_BYTE_OFFSET, BASE_TX_LOG_VERSION ); setStoreVersion( storeVersionAsLong ); setGraphNextProp( -1 ); setLatestConstraintIntroducingTx( 0 ); flush(); pagedFile = null; }
MetaDataStore.versionStringToLong( versionToMigrateTo ) );