private void saveEmptyPageAsConsumedPage(final PageCache cache) { if (cache != null && cache.getNumberOfMessages() == 0) { synchronized (consumedPages) { PageCursorInfo pageInfo = consumedPages.get(cache.getPageId()); if (pageInfo == null) { consumedPages.put(cache.getPageId(), new PageCursorInfo(cache.getPageId(), cache.getNumberOfMessages(), cache)); } } } }
private PageCursorInfo(final long pageId, final int numberOfMessages, final PageCache cache) { logger.tracef("Created PageCursorInfo for pageNr=%d, numberOfMessages=%d, cache=%s", pageId, numberOfMessages, cache); this.pageId = pageId; this.numberOfMessages = numberOfMessages; if (cache != null) { wasLive = cache.isLive(); this.cache = new WeakReference<>(cache); } else { wasLive = false; } }
if (cache != null && !cache.isLive() && retPos.getMessageNr() >= cache.getNumberOfMessages()) { emptyCache = cache; saveEmptyPageAsConsumedPage(emptyCache); while ((cache == null && retPos.getPageNr() <= pageStore.getCurrentWritingPage()) || (cache != null && retPos.getPageNr() <= pageStore.getCurrentWritingPage() && cache.getNumberOfMessages() == 0)) { emptyCache = cache; retPos = moveNextPage(retPos); PagedMessage serverMessage = cache.getMessage(retPos.getMessageNr());
@Override public PagedMessage getMessage(final PagePosition pos) { PageCache cache = getPageCache(pos.getPageNr()); if (cache == null || pos.getMessageNr() >= cache.getNumberOfMessages()) { // sanity check, this should never happen unless there's a bug throw new NonExistentPage("Invalid messageNumber passed = " + pos + " on " + cache); } return cache.getMessage(pos.getMessageNr()); }
private int getNumberOfMessages() { if (wasLive) { // if the page was live at any point, we need to // get the number of messages from the page-cache PageCache localcache = this.cache.get(); if (localcache == null) { localcache = cursorProvider.getPageCache(pageId); this.cache = new WeakReference<>(localcache); } return localcache.getNumberOfMessages(); } else { return numberOfMessages; } }
@Override public void addPageCache(PageCache cache) { logger.tracef("Add page cache %s", cache); synchronized (softCache) { softCache.put(cache.getPageId(), cache); } }
private void readPage(int pageId, PageCache cache) throws Exception { Page page = null; try { page = pagingStore.createPage(pageId); storageManager.beforePageRead(); page.open(); List<PagedMessage> pgdMessages = page.read(storageManager); cache.setMessages(pgdMessages.toArray(new PagedMessage[pgdMessages.size()])); } finally { try { if (page != null) { page.close(false); } } catch (Throwable ignored) { } storageManager.afterPageRead(); } }
pgdMessages = pgdMessagesList.toArray(new PagedMessage[pgdMessagesList.size()]); } else { pgdMessages = cache.getMessages();
size = getPersistentSize(cache.getMessage(position.getMessageNr())); } else { size = persistentSize;
public PageCursorInfo getPageInfo(final long pageNr) { synchronized (consumedPages) { PageCursorInfo pageInfo = consumedPages.get(pageNr); if (pageInfo == null) { PageCache cache = cursorProvider.getPageCache(pageNr); if (cache == null) { return null; } pageInfo = new PageCursorInfo(pageNr, cache.getNumberOfMessages(), cache); consumedPages.put(pageNr, pageInfo); } return pageInfo; } }