/** * @param loc location of root inode in the page * @return dirtied root inode with exclusive latch held */ private Node prepareMultilevelWrite(/*P*/ byte[] page, int loc) throws IOException { final Node inode; setPtr: { final long inodeId = p_uint48GetLE(page, loc); if (inodeId == 0) { // Writing into a sparse value. Allocate a node and point to it. inode = mDatabase.allocDirtyFragmentNode(); p_clear(inode.mPage, 0, pageSize(inode.mPage)); } else { LocalDatabase db = mDatabase; inode = db.nodeMapLoadFragmentExclusive(inodeId, true); try { if (!db.markFragmentDirty(inode)) { // Already dirty, so no need to update the pointer. break setPtr; } } catch (Throwable e) { inode.releaseExclusive(); throw e; } } p_int48PutLE(page, loc, inode.mId); } return inode; }
/** * @param loc location of root inode in the page * @return dirtied root inode with exclusive latch held */ private static Node prepareMultilevelWrite(LocalDatabase db, /*P*/ byte[] page, int loc) throws IOException { final Node inode; final long inodeId = p_uint48GetLE(page, loc); if (inodeId == 0) { // Writing into a sparse value. Allocate a node and point to it. inode = db.allocDirtyFragmentNode(); p_clear(inode.mPage, 0, pageSize(db, inode.mPage)); } else { inode = db.nodeMapLoadFragmentExclusive(inodeId, true); try { if (!db.markFragmentDirty(inode)) { // Already dirty, so no need to update the pointer. return inode; } } catch (Throwable e) { inode.releaseExclusive(); throw e; } } p_int48PutLE(page, loc, inode.mId); return inode; }
/** * @param loc location of root inode in the page * @return dirtied root inode with exclusive latch held */ private Node prepareMultilevelWrite(/*P*/ byte[] page, int loc) throws IOException { final Node inode; setPtr: { final long inodeId = p_uint48GetLE(page, loc); if (inodeId == 0) { // Writing into a sparse value. Allocate a node and point to it. inode = mDatabase.allocDirtyFragmentNode(); p_clear(inode.mPage, 0, pageSize(inode.mPage)); } else { LocalDatabase db = mDatabase; inode = db.nodeMapLoadFragmentExclusive(inodeId, true); try { if (!db.markFragmentDirty(inode)) { // Already dirty, so no need to update the pointer. break setPtr; } } catch (Throwable e) { inode.releaseExclusive(); throw e; } } p_int48PutLE(page, loc, inode.mId); } return inode; }
try { for (int i=0; i<childNodeCount; i++) { Node childNode = allocDirtyFragmentNode(); p_int48PutLE(page, poffset, childNode.mId); poffset += 6;
try { for (int i=0; i<childNodeCount; i++) { Node childNode = allocDirtyFragmentNode(); p_int48PutLE(page, poffset, childNode.mId); poffset += 6;
try { for (int i=0; i<childNodeCount; i++) { Node childNode = allocDirtyFragmentNode(); p_int48PutLE(page, poffset, childNode.mId); poffset += 6;
Node inode = tree.mDatabase.allocDirtyFragmentNode(); Node upper = tree.mDatabase.allocDirtyFragmentNode(); /*P*/ byte[] upage = upper.mPage; p_int48PutLE(upage, 0, inode.mId);
Node inode = tree.mDatabase.allocDirtyFragmentNode(); Node upper = tree.mDatabase.allocDirtyFragmentNode(); /*P*/ byte[] upage = upper.mPage; p_int48PutLE(upage, 0, inode.mId);
childNode = db.allocDirtyFragmentNode(); if (partial) {
childNode = db.allocDirtyFragmentNode(); if (partial) {
int voffset = remainder; while (true) { Node node = allocDirtyFragmentNode(); try { encodeInt48LE(newValue, poffset, node.mId); int voffset = 0; while (true) { Node node = allocDirtyFragmentNode(); try { encodeInt48LE(newValue, poffset, node.mId); } else { int levels = calculateInodeLevels(vlength); Node inode = allocDirtyFragmentNode(); try { encodeInt48LE(newValue, offset, inode.mId);
int voffset = remainder; while (true) { Node node = allocDirtyFragmentNode(); try { encodeInt48LE(newValue, poffset, node.mId); int voffset = 0; while (true) { Node node = allocDirtyFragmentNode(); try { encodeInt48LE(newValue, poffset, node.mId); } else { int levels = calculateInodeLevels(vlength); Node inode = allocDirtyFragmentNode(); try { encodeInt48LE(newValue, offset, inode.mId);
txn.pushUnalloc(cursor.mTree.mId, cursor.mKey, pos, len); childNode = db.allocDirtyFragmentNode(); if (ppos > 0 || len < pageSize) { if (childNodeId == 0) { childNode = db.allocDirtyFragmentNode();
Node fNode = db.allocDirtyFragmentNode(); p_clear(fNode.mPage, 0, pageSize); fNodes[i] = fNode;
int voffset = remainder; while (true) { Node node = allocDirtyFragmentNode(); try { encodeInt48LE(newValue, poffset, node.mId); int voffset = 0; while (true) { Node node = allocDirtyFragmentNode(); try { encodeInt48LE(newValue, poffset, node.mId); } else { int levels = calculateInodeLevels(vlength); Node inode = allocDirtyFragmentNode(); try { encodeInt48LE(newValue, offset, inode.mId);
rightNode = db.allocDirtyFragmentNode(); p_clear(rightNode.mPage, fInlineLen, pageSize); shrinkage = 2 + fInlineLen - 6; Node inode; try { inode = db.allocDirtyFragmentNode(); } catch (Throwable e) { node.releaseExclusive();
Node upper = mDatabase.allocDirtyFragmentNode(); /*P*/ byte[] upage = upper.mPage; p_int48PutLE(upage, 0, inode.mId); if (fNodeId == 0) { final Node fNode = mDatabase.allocDirtyFragmentNode(); try { p_int48PutLE(page, loc, fNode.mId);
Node upper = mDatabase.allocDirtyFragmentNode(); /*P*/ byte[] upage = upper.mPage; p_int48PutLE(upage, 0, inode.mId); if (fNodeId == 0) { final Node fNode = mDatabase.allocDirtyFragmentNode(); try { p_int48PutLE(page, loc, fNode.mId);
for (int i=0; i<newNodes.length; i++) { try { newNodes[i] = db.allocDirtyFragmentNode(); } catch (Throwable e) { try { txn.pushUnalloc(cursor.mTree.mId, cursor.mKey, pos, amt); final Node fNode = db.allocDirtyFragmentNode(); try { p_int48PutLE(page, loc, fNode.mId);