Examples of BTreeReplLogRecord


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

                byte[] newNode = ByteTool.copyByteArray(getHeader(), 0, BTreeSpec.NODE_HEADER_SIZE);
                newNode = ByteTool.append(newNode, key);
                byte[] oldNode = ByteTool.copyByteArray(page.getPage(), nodeOffset, BTreeSpec.NODE_HEADER_SIZE + keySize);
                byte[] emptyNode = new byte[BTreeSpec.NODE_HEADER_SIZE + keySize];
                if ((ByteTool.compare(oldNode, 0, emptyNode, 0, BTreeSpec.NODE_HEADER_SIZE + keySize) != 0) && 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);
            System.arraycopy(key, 0, page.getPage(), nodeOffset + BTreeSpec.NODE_HEADER_SIZE, keySize);

        } else {
            //=====>>> Build overflow pages
            // make it larger enough
            int freeSpace = page.btreeSpec.getPageSize() - BTreeSpec.PAGE_HEADER_SIZE;
            int overflows = key.length / freeSpace + (key.length % freeSpace > 0 ? 1 : 0);
            int keyStartPos = 0;
            int keyLeft = key.length;
            int requireSpace;
            int left;
            int keyLength = 0;
            DataPage last = null;
            PageNumber firstOverflowPageNo = null;
            for (int i = 0; i < overflows; i++) {
                left = keyLeft;
                if (left <= 0) break;
                requireSpace = (left > freeSpace) ? freeSpace : left;
                keyLength = (keyLeft >= freeSpace) ? freeSpace : keyLeft;
                DataPage overflowPage = DataPage.newPage(page.btreeSpec, page.buffer, true, kContext, 0);

                /********* add by leon *******
                 * Here a little trick is played to reduce the log record number.
                 * First we turn off the needLog switch to avoiding log individually.
                 * After done, we can log in batch.
                 */
                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(i == 0 ? page.pageNumber.getPageNumber() : last.pageNumber.getPageNumber()), 0, newV, BTreeSpec.OFF_PREVPAGE, 4);
                    if (ByteTool.compare(newV, 0, oldV, 0, oldV.length) != 0) {
                        BTreeReplLogRecord lr = new BTreeReplLogRecord(overflowPage.getPageNumber().getTreeId(), pgno, txnId, 0, oldV, newV, overflowPage.btreeSpec.btree.getType());
                        lr.log();
                    }
                }
                overflowPage.setOverflow();
                overflowPage.setUpperBound((short) (overflowPage.upperBound - requireSpace));
                if (i == 0) {
                    firstOverflowPageNo = overflowPage.pageNumber;
                    overflowPage.setPrevPage(page.pageNumber);
                } else {
                    overflowPage.setPrevPage(last.pageNumber);
                }
                overflowPage.setLogInfo(txnId, needLog);

                //set the previous page's next page
                if (i > 0) last.setNextPage(overflowPage.pageNumber);

                //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.BTreeReplLogRecord

        if (this.nodes == nodes) return;

        /***************** Add by Leon Zhu,2002-8-21  ********************/
        if (needLog) {
            int pgno = pageNumber.getPageNumber();
            BTreeReplLogRecord lr = new BTreeReplLogRecord(pageNumber.getTreeId(), pgno, txnId, BTreeSpec.OFF_LOWERBOUND, ByteTool.shortToBytes(this.nodes), ByteTool.shortToBytes(nodes), btreeSpec.btree.getType());

            lr.log();
        }
        /******************************************************************/
        this.nodes = nodes;
        System.arraycopy(ByteTool.shortToBytes(nodes), 0, page, BTreeSpec.OFF_LOWERBOUND, 2);

View Full Code Here

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

        if (needLog) {
            int pgno = pageNumber.getPageNumber();
            short oldV = this.upperBound;
            short newV = upperBound;
            if (newV != oldV) {
                BTreeReplLogRecord lr = new BTreeReplLogRecord(pageNumber.getTreeId(), pgno, txnId, BTreeSpec.OFF_UPPERBOUND, ByteTool.shortToBytes(oldV), ByteTool.shortToBytes(newV), btreeSpec.btree.getType());

                lr.log();
            }
        }
        /******************************************************************/
        this.upperBound = upperBound;
        System.arraycopy(ByteTool.shortToBytes(this.upperBound), 0, this.page, BTreeSpec.OFF_UPPERBOUND, 2);
View Full Code Here

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

        /***************** Add by marriane,2001-9-29  ********************/
        int oldV = this.prevPage.getPageNumber();
        int newV = prevPage.getPageNumber();
        if (needLog && (oldV != newV)) {
            int pgno = pageNumber.getPageNumber();
            BTreeReplLogRecord lr = new BTreeReplLogRecord(pageNumber.getTreeId(), pgno, txnId, BTreeSpec.OFF_PREVPAGE, ByteTool.intToBytes(oldV, btreeSpec.isMsbFirst()), ByteTool.intToBytes(newV, btreeSpec.isMsbFirst()), btreeSpec.btree.getType());

            lr.log();
        }
        /******************************************************************/
        this.prevPage.setPageNumber(prevPage);
        System.arraycopy(ByteTool.intToBytes(this.prevPage.getPageNumber()), 0, this.page, BTreeSpec.OFF_PREVPAGE, 4);

View Full Code Here

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

        /***************** Add by marriane ,2001-9-29 ********************/
        int oldV = this.nextPage.getPageNumber();
        int newV = nextPage.getPageNumber();
        if (needLog && (oldV != newV)) {
            int pgno = pageNumber.getPageNumber();
            BTreeReplLogRecord lr = new BTreeReplLogRecord(pageNumber.getTreeId(), pgno, txnId, BTreeSpec.OFF_NEXTPAGE, ByteTool.intToBytes(oldV, btreeSpec.isMsbFirst()), ByteTool.intToBytes(newV, btreeSpec.isMsbFirst()), btreeSpec.btree.getType());

            lr.log();
        }
        /******************************************************************/
        this.nextPage.setPageNumber(nextPage);
        System.arraycopy(ByteTool.intToBytes(this.nextPage.getPageNumber()), 0, this.page, BTreeSpec.OFF_NEXTPAGE, 4);
    }
View Full Code Here

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

        /***************** Add by marriane ,2001-9-29 ********************/
        if (needLog) {
            int pgno = pageNumber.getPageNumber();

            BTreeReplLogRecord lr = new BTreeReplLogRecord(pageNumber.getTreeId(), pgno, txnId, BTreeSpec.OFF_DOCID, oldV, newV, btreeSpec.btree.getType());

            lr.log();
        }
        /******************************************************************/
        docid = docID;
        System.arraycopy(newV, 0, this.page, BTreeSpec.OFF_DOCID, BTree.DOCID_SIZE);
    }
View Full Code Here

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

        int oldV = this.flags;
        int newV = flags;
        if (needLog && (oldV != newV)) {
            int pgno = pageNumber.getPageNumber();

            BTreeReplLogRecord lr = new BTreeReplLogRecord(pageNumber.getTreeId(), pgno, txnId, BTreeSpec.OFF_FLAGS, ByteTool.intToBytes(oldV, btreeSpec.isMsbFirst()), ByteTool.intToBytes(newV, btreeSpec.isMsbFirst()), btreeSpec.btree.getType());

            lr.log();
        }
        /******************************************************************/

        this.flags = flags;
        System.arraycopy(ByteTool.intToBytes(this.flags), 0, this.page, BTreeSpec.OFF_FLAGS, 4);
View Full Code Here

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

            if (needLog) {
                int newPageNo = page.pageNumber.getPageNumber();
                byte[] newData = ByteTool.append(this.getHeader(), data);
                if (oldData != null && (oldData != newData)) {
                    /* 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);
View Full Code Here

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

    private void setOverflowPage(PageNumber pn, byte[] oldData) throws ChaiDBException {
        if (page.needLog) {
            int newPageNo = page.getPageNumber().getPageNumber();
            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.