Examples of BTreeAddRemoveLogRecord


Examples of org.chaidb.db.log.logrecord.BTreeAddRemoveLogRecord

                //add the new node
                if (keyLength > 0) {
                    /******************* Add by leon, Sep 30 2001 *************/
                    if (needLog) {
                        int newPageNo = overflowPage.pageNumber.getPageNumber();
                        BTreeAddRemoveLogRecord logRec = new BTreeAddRemoveLogRecord(page.getPageNumber().getTreeId(), newPageNo, txnId, BTreeAddRemoveLogRecord.ADD_FLAG, overflowPage.upperBound, ByteTool.copyByteArray(key, keyStartPos, keyLength), page.btreeSpec.btree.getType());
                        logRec.log();
                    }
                    /*************************************************************/
                    System.arraycopy(key, keyStartPos, overflowPage.page, overflowPage.upperBound, keyLength);
                    keyStartPos += keyLength;
                    keyLeft -= keyLength;
                }
                //release the previoius overflow page. Dont' release nonOverflowpage
                if (i > 0) page.buffer.releasePage(last.pageNumber.getTreeId(), last.pageNumber, true);
                last = overflowPage;
            }
            //release the last overflow page
            page.buffer.releasePage(last.pageNumber.getTreeId(), last.pageNumber, true);
            //Since newing a page will set its next,previous page to be BTreeSpec.INVALID_PGNO,
            //the last one has already been BTreeSpec.INVALID_PGNO and
            //the overflow page chain has a end!

            // add the new node to the current page
            /***************** Add by leon,2001-9-27 14:56 ********************/
            if (needLog) {
                int pgno = page.pageNumber.getPageNumber();
                byte[] newNode = ByteTool.copyByteArray(getHeader(), 0, BTreeSpec.NODE_HEADER_SIZE);
                newNode = ByteTool.append(newNode, ByteTool.intToBytes(firstOverflowPageNo.getPageNumber()));
                byte[] oldNode = ByteTool.copyByteArray(page.getPage(), nodeOffset, BTreeSpec.NODE_HEADER_SIZE + 4);
                byte[] emptyNode = new byte[BTreeSpec.NODE_HEADER_SIZE + keySize];
                if (ByteTool.compare(oldNode, 0, emptyNode, 0, BTreeSpec.NODE_HEADER_SIZE + keySize) == 0) {
                    BTreeAddRemoveLogRecord lr = new BTreeAddRemoveLogRecord(page.getPageNumber().getTreeId(), pgno, txnId, BTreeAddRemoveLogRecord.ADD_FLAG, nodeOffset, newNode, page.btreeSpec.btree.getType());
                    lr.log();
                } else if (oldNode != newNode) {
                    BTreeReplLogRecord lr = new BTreeReplLogRecord(page.getPageNumber().getTreeId(), pgno, txnId, nodeOffset, oldNode, newNode, page.btreeSpec.btree.getType());

                    lr.log();
                }
            }
            /******************************************************************/
            System.arraycopy(this.getHeader(), 0, page.getPage(), nodeOffset, BTreeSpec.NODE_HEADER_SIZE);
            // last pageNumber is the one we need here!!
View Full Code Here

Examples of org.chaidb.db.log.logrecord.BTreeAddRemoveLogRecord

            // 1. free the overflow pages
            if (node.isOverflow()) {
                PageNumber overflowPageNumber = new PageNumber(ByteTool.bytesToInt(page, node.getNodeOffset() + BTreeSpec.DATA_NODE_HEADER_SIZE, btreeSpec.isMsbFirst()));
                if (needLog) {
                    byte[] removeData = ByteTool.append(node.getHeader(), ByteTool.intToBytes(overflowPageNumber.getPageNumber()));
                    BTreeAddRemoveLogRecord logRec = new BTreeAddRemoveLogRecord(pageNumber.getTreeId(), pageNumber.getPageNumber(), txnId, BTreeAddRemoveLogRecord.REMOVE_FLAG, node.getNodeOffset(), removeData, btreeSpec.btree.getType());
                    logRec.log();
                }

                overflowPageNumber.setTreeId(btreeSpec.btree.getBtreeId());

                DataPage overflowPage = new DataPage(btreeSpec.btree.getBtreeId(), overflowPageNumber, btreeSpec, buffer);
                // put into freeList
                /* begin:added by marriane 2001-9-29 for logging free overflow page log record */
                if (needLog) {
                    int pgno = overflowPage.pageNumber.getPageNumber();
                    short upBound = overflowPage.upperBound;
                    short lowBound = (short) BTreeSpec.PAGE_HEADER_SIZE;
                    BTreeFreeOverflowPageLogRecord lr = new BTreeFreeOverflowPageLogRecord(pageNumber.getTreeId(), pgno, txnId, ByteTool.copyByteArray(overflowPage.page, 0, lowBound), ByteTool.copyByteArray(overflowPage.page, upBound, BTreeSpec.PAGE_SIZE - upBound), btreeSpec.btree.getType());

                    lr.log();
                }
                /* end:added by marriane 2001-9-29 for logging free overflow page log record */
                buffer.addToFreeList(btreeSpec.btree.getBtreeId(), overflowPage.pageNumber, needLog ? new Integer(txnId) : null);

                while (overflowPage.nextPage.getPageNumber() > 0) {
                    overflowPage = new DataPage(btreeSpec.btree.getBtreeId(), overflowPage.nextPage, btreeSpec, buffer);
                    // put into freeList
                    /* begin:added by marriane 2001-9-29 for logging free overflow page log record */
                    if (needLog) {
                        int pgno = overflowPage.pageNumber.getPageNumber();
                        short upBound = overflowPage.upperBound;
                        short lowBound = (short) BTreeSpec.PAGE_HEADER_SIZE;
                        BTreeFreeOverflowPageLogRecord lr = new BTreeFreeOverflowPageLogRecord(pageNumber.getTreeId(), pgno, txnId, ByteTool.copyByteArray(overflowPage.page, 0, lowBound), ByteTool.copyByteArray(overflowPage.page, upBound, BTreeSpec.PAGE_SIZE - upBound), btreeSpec.btree.getType());
                        lr.log();

                    }
                    /* end:added by marriane 2001-9-29 for logging free overflow page log record */

                    buffer.addToFreeList(btreeSpec.btree.getBtreeId(), overflowPage.pageNumber, needLog ? new Integer(txnId) : null);
                }
            } else {
                if (needLog) {
                    /* logging remove data log record */
                    byte[] removeData = ByteTool.append(node.getHeader(), node.getData());
                    BTreeAddRemoveLogRecord logRec = new BTreeAddRemoveLogRecord(pageNumber.getTreeId(), pageNumber.getPageNumber(), txnId, BTreeAddRemoveLogRecord.REMOVE_FLAG, node.getNodeOffset(), removeData, btreeSpec.btree.getType());
                    logRec.log();
                }
            }
            // 3. rest clean up, upperBound, nodes
            /* begin:added by marriane 2001-9-29 logging for delete offset and move offset after it*/
            //if this node is the top one, decrease upperbound by page space occupied by this node
View Full Code Here

Examples of org.chaidb.db.log.logrecord.BTreeAddRemoveLogRecord

                    /* replace old data with new data*/
                    BTreeReplLogRecord logRec = new BTreeReplLogRecord(page.getPageNumber().getTreeId(), newPageNo, txnId, nodeOffset, oldData, newData, page.btreeSpec.btree.getType());
                    logRec.log();
                } else {
                    if (page.btreeSpec.btree.getType() == IDBIndex.HYPER_BTREE) {
                        BTreeAddRemoveLogRecord logRec = new BTreeAddRemoveLogRecord(page.getPageNumber().getTreeId(), newPageNo, txnId, BTreeAddRemoveLogRecord.ADD_FLAG, nodeOffset, newData, page.btreeSpec.btree.getType());
                        logRec.log();
                    }
                }
            }
            // add the new node
            System.arraycopy(this.getHeader(), 0, page.getPage(), nodeOffset, BTreeSpec.DATA_NODE_HEADER_SIZE);
            System.arraycopy(data, 0, page.getPage(), nodeOffset + BTreeSpec.DATA_NODE_HEADER_SIZE, dataSize);
        } else {

            //=====>>> Build overflow pages
            // make it large enough
            int freeSpace = page.btreeSpec.getPageSize() - BTreeSpec.PAGE_HEADER_SIZE;
            int overflows = data.length / freeSpace + (data.length % freeSpace > 0 ? 1 : 0);
            int dataStartPos = 0;
            int dataLeft = data.length;
            int requireSpace;
            int left;
            int dataLength = 0;
            DataPage last = page;
            PageNumber firstOverflowPageNo = null;
            for (int i = 0; i < overflows; i++) {
                left = dataLeft;
                if (left <= 0) break;
                requireSpace = (left > freeSpace) ? freeSpace : left;
                dataLength = (dataLeft >= freeSpace) ? freeSpace : dataLeft;
                DataPage overflowPage = DataPage.newPage(page.btreeSpec, page.buffer, true, kContext, 0);
                overflowPage.setLogInfo(txnId, false);
                if (needLog) {
                    int pgno = overflowPage.getPageNumber().getPageNumber();
                    byte[] oldV = ByteTool.copyByteArray(overflowPage.getPage(), 0, BTreeSpec.PAGE_HEADER_SIZE);

                    byte[] newV = new byte[oldV.length];
                    System.arraycopy(oldV, 0, newV, 0, oldV.length);
                    System.arraycopy(ByteTool.intToBytes(4), 0, newV, BTreeSpec.OFF_FLAGS, 4);
                    System.arraycopy(ByteTool.shortToBytes((short) (overflowPage.upperBound - requireSpace)), 0, newV, BTreeSpec.OFF_UPPERBOUND, 2);
                    System.arraycopy(ByteTool.intToBytes(last.pageNumber.getPageNumber(), overflowPage.btreeSpec.getMsbFirst()), 0, newV, BTreeSpec.OFF_PREVPAGE, 4);
                    if (newV != oldV) {
                        BTreeReplLogRecord lr = new BTreeReplLogRecord(overflowPage.getPageNumber().getTreeId(), pgno, txnId, 0, oldV, newV, overflowPage.btreeSpec.btree.getType());
                        lr.log();
                    }
                }

                overflowPage.setUpperBound((short) (overflowPage.upperBound - requireSpace));
                overflowPage.setPrevPage(last.pageNumber);
                overflowPage.setLogInfo(txnId, needLog);

                if (i == 0) firstOverflowPageNo = overflowPage.pageNumber;
                else last.setNextPage(overflowPage.pageNumber);

                //add the new node
                if (needLog) {
                    int newPageNo = overflowPage.getPageNumber().getPageNumber();
                    byte[] addData = ByteTool.subByteArray(data, dataStartPos, dataLength);
                    BTreeAddRemoveLogRecord logRec = new BTreeAddRemoveLogRecord(overflowPage.getPageNumber().getTreeId(), newPageNo, txnId, BTreeAddRemoveLogRecord.ADD_FLAG, overflowPage.upperBound, addData, overflowPage.btreeSpec.btree.getType());
                    logRec.log();
                }
                // only data left
                System.arraycopy(data, dataStartPos, overflowPage.page, overflowPage.upperBound, dataLength);
                dataStartPos += dataLength;
                dataLeft -= dataLength;
View Full Code Here

Examples of org.chaidb.db.log.logrecord.BTreeAddRemoveLogRecord

            byte[] newData = ByteTool.append(this.getHeader(), ByteTool.intToBytes(pn.getPageNumber()));
            if (oldData != null && (newData != oldData)) {
                BTreeReplLogRecord logRec = new BTreeReplLogRecord(page.getPageNumber().getTreeId(), newPageNo, page.txnId, nodeOffset, oldData, newData, page.btreeSpec.btree.getType());
                logRec.log();
            } else {
                BTreeAddRemoveLogRecord logRec = new BTreeAddRemoveLogRecord(page.getPageNumber().getTreeId(), newPageNo, page.txnId, BTreeAddRemoveLogRecord.ADD_FLAG, nodeOffset, newData, page.btreeSpec.btree.getType());
                logRec.log();
            }
        }
        // add the new node to the current page
        System.arraycopy(this.getHeader(), 0, page.getPage(), nodeOffset, BTreeSpec.DATA_NODE_HEADER_SIZE);
        // last pageNumber is the one we need here!!
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.