if (firstPage.getPageHeader().getLsn() == Lsn.LSN_INVALID || requiresRedo(loggable, firstPage)) {
if (firstPage.getPageHeader().getLsn() != Page.NO_PAGE && requiresRedo(loggable, firstPage)) {
	protected void redoCreateOverflow(OverflowCreateLoggable loggable) {		try {            DataPage firstPage = (DataPage) dataCache.get(loggable.pageNum);            if (firstPage == null) {                final Page page = getPage(loggable.pageNum);                byte[] data = page.read();                if (page.getPageHeader().getLsn() == Lsn.LSN_INVALID || requiresRedo(loggable, page)) {                    reuseDeleted(page);                    BFilePageHeader ph = (BFilePageHeader) page.getPageHeader();					ph.setStatus(MULTI_PAGE);		            ph.setNextInChain(0L);		            ph.setLastInChain(0L);		            ph.setDataLength(0);					ph.nextTID = 32;                    data = new byte[fileHeader.getWorkSize()];                    firstPage = new SinglePage(page, data, true);                    firstPage.setDirty(true);                } else                    firstPage = new SinglePage(page, data, false);            }            if (firstPage.getPageHeader().getLsn() == Lsn.LSN_INVALID || requiresRedo(loggable, firstPage)) {                firstPage.getPageHeader().setLsn(loggable.getLsn());                firstPage.setDirty(true);            }            dataCache.add(firstPage);        } catch (IOException e) {            LOG.warn("An IOException occurred during redo: " + e.getMessage(), e);        }	}