@Test public void setLastCommittedAndClosedTransactionIdShouldFailWhenStoreIsClosed() { MetaDataStore metaDataStore = newMetaDataStore(); metaDataStore.close(); try { metaDataStore.setLastCommittedAndClosedTransactionId( 1, 2, BASE_TX_COMMIT_TIMESTAMP, 3, 4 ); fail( "Expected exception reading from MetaDataStore after being closed." ); } catch ( Exception e ) { assertThat( e, instanceOf( IllegalStateException.class ) ); } }
/** * Called when expecting a clean {@code storeDir} folder and where a new store will be created. * This happens on an initial attempt to import. * * @throws IOException on I/O error. * @throws IllegalStateException if {@code storeDir} already contains a database. */ public void createNew() throws IOException { assertDatabaseIsEmptyOrNonExistent(); // There may have been a previous import which was killed before it even started, where the label scan store could // be in a semi-initialized state. Better to be on the safe side and deleted it. We get her after determining that // the db is either completely empty or non-existent anyway, so deleting this file is OK. fileSystem.deleteFile( getLabelScanStoreFile( databaseLayout ) ); instantiateStores(); neoStores.getMetaDataStore().setLastCommittedAndClosedTransactionId( initialIds.lastCommittedTransactionId(), initialIds.lastCommittedTransactionChecksum(), BASE_TX_COMMIT_TIMESTAMP, initialIds.lastCommittedTransactionLogByteOffset(), initialIds.lastCommittedTransactionLogVersion() ); neoStores.startCountStore(); }
@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; }
@Test public void shouldNotSetHighestTransactionIdWhenNeeded() { // GIVEN FileSystemAbstraction fileSystem = fs.get(); StoreFactory factory = getStoreFactory( Config.defaults(), databaseLayout, fileSystem, LOG_PROVIDER ); try ( NeoStores neoStore = factory.openAllNeoStores( true ) ) { MetaDataStore store = neoStore.getMetaDataStore(); store.setLastCommittedAndClosedTransactionId( 40, 4444, BASE_TX_COMMIT_TIMESTAMP, LogHeader.LOG_HEADER_SIZE, 0 ); // WHEN store.transactionCommitted( 39, 3333, BASE_TX_COMMIT_TIMESTAMP ); // THEN assertEquals( new TransactionId( 40, 4444, BASE_TX_COMMIT_TIMESTAMP ), store.getLastCommittedTransaction() ); assertArrayEquals( store.getLastClosedTransaction(), new long[]{40,0,LogHeader.LOG_HEADER_SIZE} ); } }
@Test public void shouldSetHighestTransactionIdWhenNeeded() { // GIVEN FileSystemAbstraction fileSystem = fs.get(); StoreFactory factory = getStoreFactory( Config.defaults(), databaseLayout, fileSystem, LOG_PROVIDER ); try ( NeoStores neoStore = factory.openAllNeoStores( true ) ) { MetaDataStore store = neoStore.getMetaDataStore(); store.setLastCommittedAndClosedTransactionId( 40, 4444, BASE_TX_COMMIT_TIMESTAMP, LogHeader.LOG_HEADER_SIZE, 0 ); // WHEN store.transactionCommitted( 42, 6666, BASE_TX_COMMIT_TIMESTAMP ); // THEN assertEquals( new TransactionId( 42, 6666, BASE_TX_COMMIT_TIMESTAMP ), store.getLastCommittedTransaction() ); assertArrayEquals( store.getLastClosedTransaction(), new long[]{40,0,LogHeader.LOG_HEADER_SIZE} ); } }
metaDataStore.setRandomNumber( 4 ); metaDataStore.setCurrentLogVersion( 5 ); metaDataStore.setLastCommittedAndClosedTransactionId( 6, 0, 0, 43, 44 ); metaDataStore.setStoreVersion( recordVersion );
metaDataStore.setRandomNumber( 4 ); metaDataStore.setCurrentLogVersion( 5 ); metaDataStore.setLastCommittedAndClosedTransactionId( 6, 42, BASE_TX_COMMIT_TIMESTAMP, 43, 44 ); metaDataStore.setStoreVersion( recordVersion );
/** * Called when expecting a clean {@code storeDir} folder and where a new store will be created. * This happens on an initial attempt to import. * * @throws IOException on I/O error. * @throws IllegalStateException if {@code storeDir} already contains a database. */ public void createNew() throws IOException { assertDatabaseIsEmptyOrNonExistent(); // There may have been a previous import which was killed before it even started, where the label scan store could // be in a semi-initialized state. Better to be on the safe side and deleted it. We get her after determining that // the db is either completely empty or non-existent anyway, so deleting this file is OK. fileSystem.deleteFile( getLabelScanStoreFile( databaseLayout ) ); instantiateStores(); neoStores.getMetaDataStore().setLastCommittedAndClosedTransactionId( initialIds.lastCommittedTransactionId(), initialIds.lastCommittedTransactionChecksum(), BASE_TX_COMMIT_TIMESTAMP, initialIds.lastCommittedTransactionLogByteOffset(), initialIds.lastCommittedTransactionLogVersion() ); neoStores.startCountStore(); }
@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; }