protected synchronized void intialize() throws Exception { if (isStarted()) { if (this.initialized == false) { if (this.directory == null) { this.directory = new File(IOHelper.getDefaultDataDirectory() + File.pathSeparator + "delayedDB"); } IOHelper.mkdirs(this.directory); lock(); this.journal = new Journal(); this.journal.setDirectory(directory); this.journal.setMaxFileLength(getJournalMaxFileLength()); this.journal.setWriteBatchSize(getJournalMaxWriteBatchSize()); this.journal.start(); this.pageFile = new PageFile(directory, "tmpDB"); this.pageFile.setEnablePageCaching(getIndexEnablePageCaching()); this.pageFile.setPageSize(getIndexPageSize()); this.pageFile.setWriteBatchSize(getIndexWriteBatchSize()); this.pageFile.setPageCacheSize(getIndexCacheSize()); this.pageFile.load(); this.pageFile .tx() .execute( new Transaction.Closure<IOException>() { public void execute(Transaction tx) throws IOException { if (pageFile.getPageCount() == 0) { Page<MetaData> page = tx.allocate(); assert page.getPageId() == 0; page.set(metaData); metaData.page = page; metaData.createIndexes(tx); tx.store(metaData.page, metaDataMarshaller, true); } else { Page<MetaData> page = tx.load(0, metaDataMarshaller); metaData = page.get(); metaData.page = page; } metaData.load(tx); metaData.loadLists(tx, persistentLists); } }); this.pageFile.flush(); if (cleanupInterval > 0) { if (scheduler == null) { scheduler = new Scheduler(PListStoreImpl.class.getSimpleName()); scheduler.start(); } scheduler.executePeriodically(this, cleanupInterval); } this.initialized = true; LOG.info(this + " initialized"); } } }
@Test public void testDeleteOnUnlockIfLocked() throws Exception { File lockFile = new File(IOHelper.getDefaultDataDirectory(), "lockToTest2"); IOHelper.mkdirs(lockFile.getParentFile()); lockFile.createNewFile(); LockFile underTest = new LockFile(lockFile, true); underTest.lock(); assertTrue("valid", underTest.keepAlive()); underTest.unlock(); assertFalse("file deleted on unlock", lockFile.exists()); }
@Test public void testNoDeleteOnUnlockIfNotLocked() throws Exception { File lockFile = new File(IOHelper.getDefaultDataDirectory(), "lockToTest1"); IOHelper.mkdirs(lockFile.getParentFile()); lockFile.createNewFile(); LockFile underTest = new LockFile(lockFile, true); underTest.lock(); lockFile.delete(); assertFalse("no longer valid", underTest.keepAlive()); // a slave gets in lockFile.createNewFile(); underTest.unlock(); assertTrue("file still exists after unlock when not locked", lockFile.exists()); }