@Override public IFIFOPageQueue createFIFOQueue() { return fifoWriter.createQueue(FIFOLocalWriter.INSTANCE); }
@Override public void finishQueue() throws HyracksDataException { fifoWriter.finishQueue(); }
@Override public void close() { closed = true; fifoWriter.destroyQueue(); try { synchronized (cleanerThread.threadLock) { cleanerThread.shutdownStart = true; cleanerThread.threadLock.notifyAll(); while (!cleanerThread.shutdownComplete) { cleanerThread.threadLock.wait(); } } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } synchronized (fileInfoMap) { fileInfoMap.forEach((key, value) -> { try { sweepAndFlush(value, true); value.close(); } catch (HyracksDataException e) { if (LOGGER.isWarnEnabled()) { LOGGER.log(Level.WARN, "Error flushing file id: " + key, e); } } }); fileInfoMap.clear(); } }
public BufferCache(IIOManager ioManager, IPageReplacementStrategy pageReplacementStrategy, IPageCleanerPolicy pageCleanerPolicy, IFileMapManager fileMapManager, int maxOpenFiles, ThreadFactory threadFactory) { this.ioManager = ioManager; this.pageSize = pageReplacementStrategy.getPageSize(); this.maxOpenFiles = maxOpenFiles; pageReplacementStrategy.setBufferCache(this); pageMap = new CacheBucket[pageReplacementStrategy.getMaxAllowedNumPages() * MAP_FACTOR + 1]; for (int i = 0; i < pageMap.length; ++i) { pageMap[i] = new CacheBucket(); } this.pageReplacementStrategy = pageReplacementStrategy; this.pageCleanerPolicy = pageCleanerPolicy; this.fileMapManager = fileMapManager; Executor executor = Executors.newCachedThreadPool(threadFactory); fileInfoMap = new HashMap<>(); cleanerThread = new CleanerThread(); executor.execute(cleanerThread); closed = false; fifoWriter = new AsyncFIFOPageQueueManager(this); if (DEBUG) { confiscatedPages = new ArrayList<>(); confiscatedPagesOwner = new HashMap<>(); confiscateLock = new ReentrantLock(); pinnedPageOwner = new ConcurrentHashMap<>(); } }