📄 btreelockingpolicy.java
字号:
* @param request_scan_lock Whether to request the page scan lock, should * only be requested once per page in the scan. * @param lock_template A scratch area to use to read in rows. * @param previous_key_lock Is this a previous key lock call? * @param forUpdate Is the scan for update or for read only. * @param lock_operation For what operation are we requesting the lock, * this should be one of the following 4 options: * LOCK_READ [read lock], * (LOCK_INS | LOCK_UPD) [ lock for insert], * (LOCK_INSERT_PREVKEY | LOCK_UPD) [lock for * previous key to insert], * (LOCK_UPD) [lock for delete or replace] * * @exception StandardException Standard exception policy. **/ abstract public boolean lockScanRow( OpenBTree open_btree, BTree btree, BTreeRowPosition pos, boolean request_scan_lock, FetchDescriptor lock_fetch_desc, DataValueDescriptor[] lock_template, RowLocation lock_row_loc, boolean previous_key_lock, boolean forUpdate, int lock_operation) throws StandardException; /** * Release read lock on a row. * * @param pos Data structure that defines the current position * in the scan to be unlocked. * * @param forUpdate Is the scan for update or for read only. * * @exception StandardException Standard exception policy. **/ abstract public void unlockScanRecordAfterRead( BTreeRowPosition pos, boolean forUpdate) throws StandardException; /** * Release the lock gotten by calling lockScan. This call can only be * made to release read scan locks, write scan locks must be held until * end of transaction. * <p> * * @param page_number page number of page that lockScan was called on. * **/ abstract public void unlockScan(long page_number); /************************************************************************** * Abstract Protected lockNonScan*() locking methods of BTree: * * lockNonScanPreviousRow - lock the row previous to the current * lockNonScanRow - lock the input row * lockNonScanRowOnPage - lock the given row on the page. ************************************************************************** */ /** * Lock the previous key. * <p> * Given the current latched page and slot number, lock the logically * previous key in the table. There are 3 cases: * <p> * slotnumber > 1 - just lock (slotnumber - 1) * (slotnumber == 1) && (leftmost leaf) - this is the first key in the * table, so lock a "magic" FIRSTKEY. * (slotnumber == 1) && !(leftmost leaf)- traverse left in the tree looking * for a previous key. * <p> * On successful return from this routine appropriate locking will have * been done. All locks and latches are requested nowait, if any * lock/latch cannot be granted this routine releases the current_leaf * latch and any latches it may have acquired and returns "false." * <p> * All extra latches that may have been gotten will have been released. * <p> * This routine will find the "previous row" to the (current_leaf, * current_slot), walking left in the tree as necessary, and first request * the lock on that row NOWAIT. If that lock can not be granted, * then it will release all latches that it has acquired up to that point * including the latched current_leaf passed into the routine, and request * the lock WAIT. Once the lock has been granted the routine will return * and it is up to the caller to research the tree to find where the * row may have ended up. * <p> * If routine returns true, lock was granted NOWAIT, current leaf * remains latched, and was never unlatched. If routine returns false, * lock was granted WAIT, current leaf is not latched, row may have * moved in the btree so caller must research to find the row. * * * @param btree The conglomerate we are locking. * @param current_leaf Latched current leaf where "current" key is. * @param current_slot The slot of row on "current_leaf" * @param lock_template Empty full template row, to read row into. * @param open_btree The open_btree to associate latches with - * used if routine has to scan backward. * @param lock_operation For what operation are we requesting the lock, * this should be one of the following 4 options: * LOCK_READ [read lock], * (LOCK_INS | LOCK_UPD) [ lock for insert], * (LOCK_INSERT_PREVKEY | LOCK_UPD) [lock for * previous key to insert], * (LOCK_UPD) [lock for delete or replace] * @param lock_duration For what duration should the lock be held, * if INSTANT_DURATION, then the routine will * guarantee that lock was acquired while holding * the latch, but then immediately release the * lock. If COMMIT_DURATION or MANUAL_DURATION * then the lock be held when routine returns * successfully. * * @exception StandardException Standard exception policy. **/ abstract public boolean lockNonScanPreviousRow( BTree btree, LeafControlRow current_leaf, int current_slot, FetchDescriptor lock_fetch_desc, DataValueDescriptor[] lock_template, RowLocation lock_row_loc, OpenBTree open_btree, int lock_operation, int lock_duration) throws StandardException; /** * Lock a btree row (row in memory). Meant to be used if caller * has the entire row objectified. * <p> * Lock a btree row, enforcing the standard lock/latch protocol. * On return the row is locked. Return status indicates if the lock * was waited for, which will mean a latch was dropped while waiting. * In general a false status means that the caller will either have * to research the tree unless some protocol has been implemented that * insures that the row will not have moved while the latch was dropped. * <p> * This routine request a row lock NOWAIT on the in-memory row * "current_row.". If the lock is granted the routine will return true. * If the lock cannot be granted NOWAIT, then the routine will release * the latch on "current_leaf" (if current_leaf is non-null) and * "aux_leaf" (if aux_leaf is non-null), and then it will request a WAIT * lock on the row. * * * @param btree The conglomerate we are locking. * @param current_leaf If non-null, this leaf is unlatched if the * routine has to wait on the lock. * @param aux_leaf If non-null, this leaf is unlatched if the * routine has to wait on the lock. * @param current_row In memory, objectified "current" row. * @param lock_operation For what operation are we requesting the lock, * this should be one of the following 4 options: * LOCK_READ [read lock], * (LOCK_INS | LOCK_UPD) [ lock for insert], * (LOCK_INSERT_PREVKEY | LOCK_UPD) [lock for * previous key to insert], * (LOCK_UPD) [lock for delete or replace] * * @exception StandardException Standard exception policy. **/ abstract public boolean lockNonScanRow( BTree btree, LeafControlRow current_leaf, LeafControlRow aux_leaf, DataValueDescriptor[] current_row, int lock_operation) throws StandardException; /** * Lock the row at the given slot. * <p> * If this routine returns true all locks were acquired while maintaining * the latch on leaf. If this routine returns false, locks may or may * not have been acquired, and the routine should be called again after * the client has researched the tree to reget the latch on the * appropriate page. * * @return Whether locks were acquired without releasing latch on leaf. * * @param btree the conglomerate info. * @param leaf The control row of the current leaf to lock. * @param slot The slot position of the row to lock. * @param lock_template A scratch area to use to read in rows. * @param lock_operation For what operation are we requesting the lock, * this should be one of the following 4 options: * LOCK_READ [read lock], * (LOCK_INS | LOCK_UPD) [ lock for insert], * (LOCK_INSERT_PREVKEY | LOCK_UPD) [lock for * previous key to insert], * (LOCK_UPD) [lock for delete or replace] * * @exception StandardException Standard exception policy. **/ abstract public boolean lockNonScanRowOnPage( BTree btree, LeafControlRow leaf, int slot, FetchDescriptor lock_fetch_desc, DataValueDescriptor[] lock_template, RowLocation lock_row_loc, int lock_operation) throws StandardException;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -