int nPageNo = bulkNextNodePos.getPageNo();
int id = btree.getBtreeId();
final PageBufferManager buffer = btree.getBuffer();
final BTreeSpec btreeSpec = btree.getBTreeSpec();
PageNumber dupPageNumber = new PageNumber(nPageNo);
try {
DataPage dupDataPage = new DataPage(id, dupPageNumber, btreeSpec, buffer);
int pageCount = 0;
while (pageCount < page && !finished) {
NodeInfo node = new NodeInfo();
node.nodePosition = bulkNextNodePos;
int ret = getNode(dupDataPage, node);
bulkNextNodePos = node.nodeNextPosition;
if ((ret & DUP_FINISHED) == DUP_FINISHED) {
finished = true;
if ((ret & DUP_NEXT) == DUP_NEXT) {
break;
}
}
if ((ret & DUP_DATA) == DUP_DATA) {
cache.add(node);
} else if ((ret & DUP_NEXT) == DUP_NEXT) {
if (bulkNextNodePos.getPageNo() == nPageNo) {
continue;
} else {
if (cache.size() > 0) {
pageCount++;
}
if (pageCount < page) {
nPageNo = bulkNextNodePos.getPageNo();
buffer.releasePage(id, dupPageNumber, false);
dupPageNumber = new PageNumber(nPageNo);
dupDataPage = new DataPage(id, dupPageNumber, btreeSpec, buffer);
}
}
} else {
logger.error("Failed to get next dup node.");