Package org.chaidb.db.index.btree.bufmgr

Examples of org.chaidb.db.index.btree.bufmgr.PageNumber


    protected void prepareBTree(File dataSource, KernelContext kContext, IBTree tree) throws ChaiDBException {

        //assign btreename. This must be before getPage(), because it may be used in that method.
        setBTreeName(dataSource.getAbsolutePath());

        byte[] metaPage = getBuffer().getPage(getBtreeId(), new PageNumber(getBtreeId(), 0, 0));
        if (metaPage != null) {
            readMetaData(this, metaPage);

            // unfix metaPage
            getBuffer().releasePage(getBtreeId(), new PageNumber(getBtreeId(), 0, 0), false);
        } else {
            this.btreeSpec.changeNodeSize(btreeSpec.getNodeSize(), kContext);
            getBuffer().writeMetaPage(getBtreeId(), true);
        }
View Full Code Here


        clonedBTree.close();
    }

    protected PageNumber store(Key key, byte[] value, short mode, PageNumber root, KernelContext kContext) throws ChaiDBException {

        PageNumber rootPgNumber;
        this.getBTreeSpec().setModified(true);

        //lock root page
        BTreePage rootPage = new BTreePage(id, root, btreeSpec, buffer);

        if (rootPage.getPage() == null) {
            rootPage = BTreePage.newPage(btreeSpec, buffer, kContext);
            rootPage.setLeaf();
            rootPage.setPrevPage(new PageNumber(id, 0, 0)); // root
            // insert
            rootPage.insert(key, value, mode, kContext);

            buffer.releasePage(id, rootPage.pageNumber, true);
            rootPgNumber = rootPage.pageNumber;
View Full Code Here

        byte[] value = encodeToByteArray(data);
        if (value == null) return;

        this.getBTreeSpec().setModified(true);
        try {
            PageNumber root = getTopRoot();
            root = store(key, value, mode, root, kContext);
            if (root == null) {
                return;
            }
            // save new root page number
View Full Code Here

        if (DbEnvironment.READ_ONLY) throw new ChaiDBException(ErrorCode.DATABASE_IS_READONLY);

        kContext.checkLock(getBTreeName());
        this.getBTreeSpec().setModified(true);
        try {
            PageNumber root = getTopRoot();
            OperResult result = delete(key, root, kContext);
            if (result.newRoot != null) {
                //save new root
                updateRootOnMetaPage(result.newRoot, kContext);
            }
View Full Code Here

    public PageNumber getPageNumber() {
        return pageNumber;
    }

    public PageNumber getRootPageNumber() {
        return new PageNumber(rootPageNumber);
    }
View Full Code Here

//        }
//
//        PageNumber oldPageNumber = new PageNumber(pageNumber);
//        pageNumber.setPageNumber((PageNumber) newPageFIFO.removeFirst());
//        return oldPageNumber;
        PageNumber p = null;
        PageNumber oldPageNumber = new PageNumber(pageNumber);

        //add by Stanley
        // if current directory does not have the file we will jump to next file
        //whose file number is one more than previous one
        if (!bufferManager.checkTreeExistinCurrentDir(btree.getBtreeId(), oldPageNumber.getFileNumber())) {
            oldPageNumber.jumpToNextFile();
            bufferManager.addVirtualFile(btree.getBtreeId(), oldPageNumber.getFileNumber());
        }

        p = new PageNumber(oldPageNumber);
        p.add(1);
        if (kc != null && kc.getNeedLog()) {
            BTreeSpecLogRecord logRec = new BTreeSpecLogRecord(btree.getBtreeId(), pageNumber.getPageNumber(), p.getPageNumber(), BTreeSpecLogRecord.PAGE_NUMBER_FLAG, kc.getLocker(), btree.getType());
            logRec.log();
        }
View Full Code Here

        byte[] data = new byte[dataSize];
        if (!isOverflow()) {
            System.arraycopy(page.getPage(), nodeOffset + BTreeSpec.DATA_NODE_HEADER_SIZE, data, 0, dataSize);
        } else {
            // handle overflow data
            PageNumber overflowPageNumber = new PageNumber(ByteTool.bytesToInt(page.getPage(), nodeOffset + BTreeSpec.DATA_NODE_HEADER_SIZE, page.btreeSpec.isMsbFirst()));
            DataPage overflowPage = new DataPage(page.btreeSpec.btree.getBtreeId(), overflowPageNumber, page.btreeSpec, page.buffer);

            //=======>>>> 1. try to find the first overflow page containing data
            int freeSpace = page.btreeSpec.getPageSize() - BTreeSpec.PAGE_HEADER_SIZE;
            int dataLeft = dataSize;
View Full Code Here

            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;
View Full Code Here

        byte[] bytes = null;

        try {
            int docID;
            PageNumber root;

            /*Modified by ben zhang at aug, 12, 2002 assumed key type is nodeid */
            // Used only by id2node
            docID = ((NodeId) key).getDocId();
            root = getDocRoot(docID, kContext);
View Full Code Here

        this.getBTreeSpec().setModified(true);
        //retry to finish this operation with maxized MAX_RETRYS times.
        for (int retry = 0; retry < BTreeLock.MAX_RETRYS + 1 && !succ; retry++)
            try {
                // if (islockTree) lm.getLock(MR1WLock.WRITE);
                PageNumber root;
                root = getDocRoot(((NodeId) key).getDocId(), kContext);

                result = delete(key, root, kContext);
                succ = true;
View Full Code Here

TOP

Related Classes of org.chaidb.db.index.btree.bufmgr.PageNumber

Copyright © 2018 www.massapicom. 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.