| java.lang.Object org.apache.derby.impl.store.access.btree.index.B2IRowLocking3
All known Subclasses: org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR,
B2IRowLocking3 | class B2IRowLocking3 implements BTreeLockingPolicy(Code) | | Implements the jdbc serializable isolation level using row locks.
Holds read and write locks until end of transaction.
Obtains previous key locks to protect from phantom reads.
|
Method Summary | |
protected boolean | _lockScanRow(OpenBTree open_btree, BTree btree, BTreeRowPosition pos, boolean request_row_lock, boolean request_scan_lock, FetchDescriptor lock_fetch_desc, DataValueDescriptor[] lock_template, RowLocation lock_row_loc, boolean previous_key_lock, boolean forUpdate, int lock_operation) Lock a row as part of doing the scan.
Lock the row at the given slot (or the previous row if slot is 0).
Get the scan lock on the page if "request_scan_lock" is true.
If this routine returns true all locks were acquired while maintaining
the latch on leaf. | 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) Lock the row previous to the input row. | public boolean | lockNonScanRow(BTree btree, LeafControlRow current_leaf, LeafControlRow aux_leaf, DataValueDescriptor[] current_row, int lock_operation) Lock the in memory row. | public boolean | lockNonScanRowOnPage(BTree btree, LeafControlRow current_leaf, int current_slot, FetchDescriptor lock_fetch_desc, DataValueDescriptor[] lock_template, RowLocation lock_row_loc, int lock_operation) | public boolean | lockScan(LeafControlRow current_leaf, ControlRow aux_control_row, boolean forUpdate, int lock_operation) Lock a control row page for scan. | public boolean | lockScanCommittedDeletedRow(OpenBTree open_btree, LeafControlRow leaf, DataValueDescriptor[] template, FetchDescriptor lock_fetch_desc, int slot_no) Lock a btree row to determine if it is a committed deleted row. | public boolean | lockScanForReclaimSpace(LeafControlRow current_leaf) Lock a control row page for reclaiming deleted rows.
When reclaiming deleted rows during split need to get an exclusive
scan lock on the page, which will mean there are no other scans
positioned on the page. | 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) Lock a row as part of doing the scan.
Lock the row at the given slot (or the previous row if slot is 0).
Get the scan lock on the page if "request_scan_lock" is true.
If this routine returns true all locks were acquired while maintaining
the latch on leaf. | public void | unlockScan(long page_number) Release the lock gotten by calling lockScan. | public void | unlockScanRecordAfterRead(BTreeRowPosition pos, boolean forUpdate) Release read lock on a row. |
base_cc | protected ConglomerateController base_cc(Code) | | The container id of the base container for this index. Used to build
record handles to make lock calls on.
|
open_btree | protected OpenBTree open_btree(Code) | | The OpenBtree to use if we have to lock anything in the btree vs.
base row locking.
|
_lockScanRow | protected boolean _lockScanRow(OpenBTree open_btree, BTree btree, BTreeRowPosition pos, boolean request_row_lock, 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(Code) | | Lock a row as part of doing the scan.
Lock the row at the given slot (or the previous row if slot is 0).
Get the scan lock on the page if "request_scan_lock" is true.
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.
(p>
As a sided effect stores the value of the record handle of the current
scan lock.
Whether locks were acquired without releasing latch on leaf. Parameters: open_btree - The open_btree to associate latches with - used if routine has to scan backward. Parameters: btree - the conglomerate info. Parameters: pos - The position of the row to lock. Parameters: request_row_lock - Whether to request the row lock, shouldonly be requested once per page in the scan. Parameters: request_scan_lock - Whether to request the page scan lock, shouldonly be requested once per page in the scan. Parameters: lock_fetch_desc - The fetch descriptor to use to fetch therow location for the lock request. Parameters: lock_template - A scratch area to use to read in rows. Parameters: previous_key_lock - Is this a previous key lock call? Parameters: forUpdate - Is the scan for update or for read only. exception: StandardException - Standard exception policy. |
lockScan | public boolean lockScan(LeafControlRow current_leaf, ControlRow aux_control_row, boolean forUpdate, int lock_operation) throws StandardException(Code) | | Lock a control row page for scan.
Scanners get shared lock on the page while positioned on a row within
the page, splitter/purgers/mergers get exclusive lock on the page.
See BTree.lockScan() for more info.
exception: StandardException - Standard exception policy. |
lockScanForReclaimSpace | public boolean lockScanForReclaimSpace(LeafControlRow current_leaf) throws StandardException(Code) | | Lock a control row page for reclaiming deleted rows.
When reclaiming deleted rows during split need to get an exclusive
scan lock on the page, which will mean there are no other scans
positioned on the page. If there are other scans positioned, just
give up on reclaiming space now.
true if lock was granted nowait, else false and not lock wasgranted. exception: StandardException - Standard exception policy. |
lockScanRow | 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(Code) | | Lock a row as part of doing the scan.
Lock the row at the given slot (or the previous row if slot is 0).
Get the scan lock on the page if "request_scan_lock" is true.
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.
(p>
As a sided effect stores the value of the record handle of the current
scan lock.
Whether locks were acquired without releasing latch on leaf. Parameters: open_btree - The open_btree to associate latches with - used if routine has to scan backward. Parameters: btree - the conglomerate info. Parameters: pos - The position of the row to lock. Parameters: request_scan_lock - Whether to request the page scan lock, shouldonly be requested once per page in the scan. Parameters: lock_template - A scratch area to use to read in rows. Parameters: previous_key_lock - Is this a previous key lock call? Parameters: forUpdate - Is the scan for update or for read only. exception: StandardException - Standard exception policy. |
unlockScan | public void unlockScan(long page_number)(Code) | | 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.
See BTree.unlockScan() for more info.
|
unlockScanRecordAfterRead | public void unlockScanRecordAfterRead(BTreeRowPosition pos, boolean forUpdate) throws StandardException(Code) | | Release read lock on a row.
For serializable, there is no work to do.
|
|
|