public long size() { synchronized (this) { if (!initialized) { return 0; } } try { return journal.getDiskSize() + pageFile.getDiskSize(); } catch (IOException e) { throw new RuntimeException(e); } }
public void run() { try { if (isStopping()) { return; } final int lastJournalFileId = journal.getLastAppendLocation().getDataFileId(); final Set<Integer> candidates = journal.getFileMap().keySet(); LOG.trace("Full gc candidate set:" + candidates); if (candidates.size() > 1) { // prune current write for (Iterator<Integer> iterator = candidates.iterator(); iterator.hasNext(); ) { if (iterator.next() >= lastJournalFileId) { iterator.remove(); } } List<PListImpl> plists = null; synchronized (indexLock) { synchronized (this) { plists = new ArrayList<PListImpl>(persistentLists.values()); } } for (PListImpl list : plists) { list.claimFileLocations(candidates); if (isStopping()) { return; } LOG.trace( "Remaining gc candidate set after refs from: " + list.getName() + ":" + candidates); } LOG.trace("GC Candidate set:" + candidates); this.journal.removeDataFiles(candidates); } } catch (IOException e) { LOG.error("Exception on periodic cleanup: " + e, e); } }
@Override protected synchronized void doStop(ServiceStopper stopper) throws Exception { if (scheduler != null) { if (PListStoreImpl.class.getSimpleName().equals(scheduler.getName())) { scheduler.stop(); scheduler = null; } } for (PListImpl pl : this.persistentLists.values()) { pl.unload(null); } if (this.pageFile != null) { this.pageFile.unload(); } if (this.journal != null) { journal.close(); } if (this.lockFile != null) { this.lockFile.unlock(); } this.lockFile = null; this.initialized = false; LOG.info(this + " stopped"); }