if (requiresRedo(loggable, node.page)) {
if (node.page.getPageHeader().getLsn() != Page.NO_PAGE && requiresRedo(loggable, node.page)) { if (loggable.idx > node.ptrs.length) { LOG.warn(node.page.getPageInfo() + "; loggable.idx = " + loggable.idx + "; node.ptrs.length = " + node.ptrs.length); StringWriter writer = new StringWriter(); try { dump(writer); } catch (Exception e) { e.printStackTrace(); } LOG.warn(writer.toString()); throw new LogException("Critical error during recovery"); }
    protected void redoUpdateValue(UpdateValueLoggable loggable) throws LogException {        BTreeNode node = getBTreeNode(loggable.pageNum);        if (requiresRedo(loggable, node.page)) {            node.ptrs[loggable.idx] = loggable.pointer;            node.ph.setLsn(loggable.getLsn());        }    }