This class is a DerbyObserver to observe RawTransactions
and is also a DerbyObservable to
handle the list of pages accessed thorough this handle.
This class implements Lockable (defined to be ContainerHandle) and is
the object used to logically lock the container.
MT - Mutable - Immutable identity - Thread Aware
| Modifier and Type | Field and Description |
|---|---|
| private PageActions | |
| private boolean | active
Is this ContainerHandle active. |
| private AllocationActions | |
| protected BaseContainer | container
The actual container we are accessing. |
| private boolean | forUpdate
are we going to update? |
| private ContainerKey | identity
Container identifier MT - Immutable |
| private LockingPolicy | locking
the locking policy we opened the container with. |
| private int | mode
mode the conainter was opened in. |
| private RawTransaction | xact
our transaction. |
| Access | Constructor and Description |
|---|---|
| public | BaseContainerHandle(UUID rawStoreId, RawTransaction xact, ContainerKey identity, LockingPolicy locking, int mode)
Create an object that is only used for locking the container. |
| public | BaseContainerHandle(UUID rawStoreId, RawTransaction xact, PageActions actionsSet, AllocationActions allocActionsSet, LockingPolicy locking, BaseContainer container, int mode)
Create a container handle that is used to actually access the container. |
| Modifier and Type | Method and Description |
|---|---|
| public Page | addPage()
Implements org. Add a page to the container The page returned will be observing me. |
| public Page | addPage(int flag)
Implements org. Add a page to the container, if flag == ContainerHandle.ADD_PAGE_BULK, tell the container about it. |
| public void | backupContainer(String
location of the backup container. backupContainerPath)Implements org. Backup the container to the specified path. |
| protected void | |
| private void | |
| public synchronized void | |
| public void | compactRecord(RecordHandle
The record handle, the record must have been locked execlusively already. record)Implements org. This record probably has shrunk considerably. |
| public void | compressContainer()
Implements org. Release free space to the OS. |
| public void | dropContainer(LogInstant instant, boolean drop)
Implements org. If drop is true, drop the container. |
| public void | encryptOrDecryptContainer(String
file to store the new version of the container newFilePath, boolean tells whether to encrypt or decrypt doEncrypt)Implements org. Creates an encrypted or decrypted version of the container. |
| public void | flushContainer()
Implements org. Flush all dirty pages of the container to disk. |
| public PageActions | |
| public AllocationActions | |
| public Page | |
| public Page | getAnyPage(long pageNumber)
Implements org. Get this page with no check - any page type or status is fine. |
| public void | getContainerProperties(Properties
Property list to fill in. prop)Implements org. Request the system properties associated with a container. |
| public int | getContainerStatus()
Implements org. Get the container status. |
| public long | getContainerVersion()
Implements org. Get the logged container version |
| public long | getEstimatedPageCount(int
different flavors of page count (reserved for future use) flag)Implements org. Get the total estimated number of allocated (not freed, not deallocated) user pages in the container, including overflow pages. |
| public long | getEstimatedRowCount(int
different flavors of row count (reserved for future use) flag)Implements org. Get the total estimated number of rows in the container, not including overflow rows. |
| public Page | getFirstPage()
Implements org. Obtain exclusive access to the current first page of the container. |
| public ContainerKey | |
| public final LockingPolicy | getLockingPolicy()
Implements org. Return my locking policy, may be different from the Transaction's default locking policy. |
| public int | |
| public Page | getNextPage(long
the pagenumber of the page previous to the page
that is to be gotten. The page which correspond to prevNum
may or may not be latched by the caller, but it must be gotten
via a page which was (or currently still is) latched, and the page
number must be gotten while the container must not have been closed
or dropped or removed in the interim.
In other words, if the user manufactures a page number, or remembers
the page number from a previous session or a previous openContainer,
then the behavior of this routine is undefined. pageNumber)Implements org. Obtain exclusive access to the next valid page of the given page number in the container. |
| public Page | getPage(long pageNumber)
Implements org. Obtain exclusive access to the page with the given page number. |
| public Page | getPageForCompress(int flag, long pageno)
Implements org.
|
| public Page | getPageForInsert(int
a GET_PAGE_* flag. flag)Implements org. Get a page for insert. |
| public Page | getPageNoWait(long pageNumber)
Implements org. Identical to getPage but returns null immediately if the desired page is already latched by another Container. |
| public long | Returns: version sequence numberImplements org. Get the reusable recordId sequence number. |
| public SpaceInfo | getSpaceInfo()
Implements org. Get information about space used by the container. |
| public final RawTransaction | |
| public Object | getUniqueId()
Implements org. Return my unique identifier, this identifier will be unique to each instance of an open container handle. |
| public Page | getUserPageNoWait(long pageNumber)
Implements org. Obtain exclusive access to the page with the given page number. |
| public Page | getUserPageWait(long pageNumber)
Implements org. Obtain exclusive access to the page with the given page number. |
| protected void | |
| public final boolean | isReadOnly()
Implements org. Is the container opened for read only or update? |
| public boolean | isTemporaryContainer()
Implements org. Return true if this containerHandle refers to a temporary container. |
| public ByteArray | logCreateContainerInfo()
Implements org. Log all information necessary to recreate the container during a load tran. |
| public RecordHandle | makeRecordHandle(long
the page number of the RecordHandle. pageNumber, int the record id of the RecordHandle. recordId)Implements org. Return a record handle that is initialized to the given page number and record id. |
| public void | preAllocate(int numPage)
Implements org. Preallocate numPage if possible. |
| public void | preDirty(boolean preDirtyOn)
Implements org. The container is about to be modified. |
| public Page | reCreatePageForRedoRecovery(int pageFormat, long pageNumber, long pageOffset)
Implements org. ReCreate a page for rollforward recovery. |
| public void | removeContainer(LogInstant instant)
Implements org. remove the container |
| public void | removePage(Page page)
Implements org. Remove a page from the container. |
| public void | setEstimatedRowCount(long
the estimated number of rows in the container. count, int different flavors of row count (reserved for future use) flag)Implements org. Set the total estimated number of rows in the container. |
| public final void | setLockingPolicy(LockingPolicy newLockingPolicy)
Implements org. Set the locking policy for this open container |
| public String | |
| public void | update(DerbyObservable
The object which is being observed obj, Object Extra information being passed to the callback arg)Implements org. Called when the transaction is about to complete. |
| public final boolean | |
| public boolean | useContainer(boolean
if true, use this container even if it is dropped,
otherwise, return false if container is dropped. droppedOK, boolean if true, wait on lock, otherwise, get lock no wait. waitForLock)Attach me to a container. |
| actionsSet | back to summary |
|---|---|
| private PageActions actionsSet | |
| active | back to summary |
|---|---|
| private boolean active Is this ContainerHandle active.
| |
| allocActionsSet | back to summary |
|---|---|
| private AllocationActions allocActionsSet | |
| container | back to summary |
|---|---|
| protected BaseContainer container The actual container we are accessing. Only valid when active is true.
| |
| forUpdate | back to summary |
|---|---|
| private boolean forUpdate are we going to update?
| |
| identity | back to summary |
|---|---|
| private ContainerKey identity Container identifier
| |
| locking | back to summary |
|---|---|
| private LockingPolicy locking the locking policy we opened the container with.
Only valid when active is true.
| |
| mode | back to summary |
|---|---|
| private int mode mode the conainter was opened in. | |
| xact | back to summary |
|---|---|
| private RawTransaction xact our transaction. Only valid when active is true.
| |
| BaseContainerHandle | back to summary |
|---|---|
| public BaseContainerHandle(UUID rawStoreId, RawTransaction xact, ContainerKey identity, LockingPolicy locking, int mode) Create an object that is only used for locking the container. | |
| BaseContainerHandle | back to summary |
|---|---|
| public BaseContainerHandle(UUID rawStoreId, RawTransaction xact, PageActions actionsSet, AllocationActions allocActionsSet, LockingPolicy locking, BaseContainer container, int mode) Create a container handle that is used to actually access the container. | |
| addPage | back to summary |
|---|---|
| public Page addPage() throws StandardException Implements org. Add a page to the container The page returned will be observing me.
| |
| addPage | back to summary |
|---|---|
| public Page addPage(int flag) throws StandardException Implements org. Add a page to the container, if flag == ContainerHandle.ADD_PAGE_BULK, tell the container about it. The page returned will be observing me.
| |
| backupContainer | back to summary |
|---|---|
| public void backupContainer(String backupContainerPath) throws StandardException Implements org. Backup the container to the specified path.
| |
| checkOpen | back to summary |
|---|---|
| protected void checkOpen() throws StandardException | |
| checkUpdateOpen | back to summary |
|---|---|
| private void checkUpdateOpen() throws StandardException | |
| close | back to summary |
|---|---|
| public synchronized void close() Implements org. Doc from org. Close me. After using this method the caller must throw away the reference to the Container object, e.g. ref.close(); ref = null; The container will be closed automatically at the commit or abort of the transaction if this method is not called explictly. Any pages that were obtained using me and have not been released using Page's unlatch method are released, and references to them must be thrown away.
| |
| compactRecord | back to summary |
|---|---|
| public void compactRecord(RecordHandle record) throws StandardException Implements org. Doc from org. This record probably has shrunk considerably. Free its reserved space or compact it.
| |
| compressContainer | back to summary |
|---|---|
| public void compressContainer() throws StandardException Implements org. Release free space to the OS. As is possible release any free space to the operating system. This will usually mean releasing any free pages located at the end of the file using the java truncate() interface.
| |
| dropContainer | back to summary |
|---|---|
| public void dropContainer(LogInstant instant, boolean drop) throws StandardException Implements org. Doc from org. If drop is true, drop the container. if drop is false, un-drop the container
| |
| encryptOrDecryptContainer | back to summary |
|---|---|
| public void encryptOrDecryptContainer(String newFilePath, boolean doEncrypt) throws StandardException Implements org. Doc from org. Creates an encrypted or decrypted version of the container.
| |
| flushContainer | back to summary |
|---|---|
| public void flushContainer() throws StandardException Implements org. Doc from org. Flush all dirty pages of the container to disk. Used mainly for UNLOGGED or CREATE_UNLOGGED operation.
| |
| getActionSet | back to summary |
|---|---|
| public PageActions getActionSet() | |
| getAllocationActionSet | back to summary |
|---|---|
| public AllocationActions getAllocationActionSet() | |
| getAllocPage | back to summary |
|---|---|
| public Page getAllocPage(long pageNumber) throws StandardException | |
| getAnyPage | back to summary |
|---|---|
| public Page getAnyPage(long pageNumber) throws StandardException Implements org. Get this page with no check - any page type or status is fine. Caller must be prepared to handle freed, deallocated,or alloc page Called by recovery ONLY.
| |
| getContainerProperties | back to summary |
|---|---|
| public void getContainerProperties(Properties prop) throws StandardException Implements org. Request the system properties associated with a container. Request the value of properties that are associated with a container. The following properties can be requested: derby.storage.pageSize derby.storage.pageReservedSpace derby.storage.minimumRecordSize To get the value of a particular property add it to the property list, and on return the value of the property will be set to it's current value. For example: get_prop(BaseContainerHandle ch) { Properties prop = new Properties(); prop.put("derby.storage.pageSize", ""); ch.getContainerProperties(prop); System.out.println( "conatainer's page size = " + prop.getProperty("derby.storage.pageSize"); }
| |
| getContainerStatus | back to summary |
|---|---|
| public int getContainerStatus() throws StandardException Implements org. Get the container status.
| |
| getContainerVersion | back to summary |
|---|---|
| public long getContainerVersion() throws StandardException Implements org. Doc from org. Get the logged container version
| |
| getEstimatedPageCount | back to summary |
|---|---|
| public long getEstimatedPageCount(int flag) throws StandardException Implements org. Doc from org. Get the total estimated number of allocated (not freed, not deallocated) user pages in the container, including overflow pages. this number is a rough estimate and may be grossly off.
| |
| getEstimatedRowCount | back to summary |
|---|---|
| public long getEstimatedRowCount(int flag) throws StandardException Implements org. Doc from org. Get the total estimated number of rows in the container, not including overflow rows. This number is a rough estimate and may be grossly off.
| |
| getFirstPage | back to summary |
|---|---|
| public Page getFirstPage() throws StandardException Implements org. Doc from org. Obtain exclusive access to the current first page of the container. Only a valid, non overflow page will be returned. Pages in the container are ordered in an internally defined ordering.
Note that once this method returns this page may no longer be the
first page of the container. I.e, other threads may allocate pages
prior to this page number while this page is latched. It is up to
the caller of this routine to synchronize this call with addPage to
assure that this is the first page.
| |
| getId | back to summary |
|---|---|
| public ContainerKey getId() Implements org. Doc from org. Return my identifier.
| |
| getLockingPolicy | back to summary |
|---|---|
| public final LockingPolicy getLockingPolicy() Implements org. Return my locking policy, may be different from the Transaction's default locking policy. | |
| getMode | back to summary |
|---|---|
| public int getMode() Get the mode I was opened with. | |
| getNextPage | back to summary |
|---|---|
| public Page getNextPage(long pageNumber) throws StandardException Implements org. Doc from org. Obtain exclusive access to the next valid page of the given page number in the container. Only a valid, non overflow page will be returned. Pages in the container are ordered in an internally defined ordering.
Note that once this method returns this page may no longer be the
next page of the container. I.e, other threads may allocate pages
prior to this page number while this page is latched. It is up to
the caller of this routine to synchronize this call with addPage to
assure that this is the first page.
for (Page p = containerHandle.getFirstPage(); p != null; p = containerHandle.getNextPage(p.getPageNumber()))will guarentee to iterate thru and latched all the valid pages in the container
| |
| getPage | back to summary |
|---|---|
| public Page getPage(long pageNumber) throws StandardException Implements org. Doc from org. Obtain exclusive access to the page with the given page number. Once the Page is no longer required the Page's unlatch() method must be called. The Page object is guaranteed to remain in-memory and exclusive to the caller until its unlatch() method is called.
| |
| getPageForCompress | back to summary |
|---|---|
| public Page getPageForCompress(int flag, long pageno) throws StandardException Implements org. | |
| getPageForInsert | back to summary |
|---|---|
| public Page getPageForInsert(int flag) throws StandardException Implements org. Doc from org. Get a page for insert. If RawStore thinks it knows where a potentially suitable page is for insert, it will return it. If RawStore doesn't know where a suitable page for insert is, or if there are no allocated page, then null is returned. If a page is returned, it will be a valid, non-overflow page. A potentially suitable page is one which has enough space for a minium sized record.
| |
| getPageNoWait | back to summary |
|---|---|
| public Page getPageNoWait(long pageNumber) throws StandardException Implements org. Doc from org. Identical to getPage but returns null immediately if the desired page is already latched by another Container.
| |
| getReusableRecordIdSequenceNumber | back to summary |
|---|---|
| public long getReusableRecordIdSequenceNumber() throws StandardException Implements org. Get the reusable recordId sequence number.
| |
| getSpaceInfo | back to summary |
|---|---|
| public SpaceInfo getSpaceInfo() throws StandardException Implements org. Get information about space used by the container. | |
| getTransaction | back to summary |
|---|---|
| public final RawTransaction getTransaction() Return the RawTransaction I was opened in. | |
| getUniqueId | back to summary |
|---|---|
| public Object getUniqueId() Implements org. Doc from org. Return my unique identifier, this identifier will be unique to each instance of an open container handle. This id is used by the locking system to group locks to an open container handle.
| |
| getUserPageNoWait | back to summary |
|---|---|
| public Page getUserPageNoWait(long pageNumber) throws StandardException Implements org. Doc from org. Obtain exclusive access to the page with the given page number. Will only return a valid, non-overflow user page - so can be used by routines in post commit to get pages to attempt deleted row space reclamation. If for some reason a request is made for an overflow page a null will be returned. Once the Page is no longer required the Page's unlatch() method must be called. The Page object is guaranteed to remain in-memory and exclusive to the caller until its unlatch() method is called.
| |
| getUserPageWait | back to summary |
|---|---|
| public Page getUserPageWait(long pageNumber) throws StandardException Implements org. Doc from org. Obtain exclusive access to the page with the given page number. Will only return a valid, non-overflow user page - so can be used by routines in post commit to get pages to attempt deleted row space reclamation. If for some reason a request is made for an overflow page a null will be returned. Once the Page is no longer required the Page's unlatch() method must be called. The Page object is guaranteed to remain in-memory and exclusive to the caller until its unlatch() method is called.
| |
| informObservers | back to summary |
|---|---|
| protected void informObservers() | |
| isReadOnly | back to summary |
|---|---|
| public final boolean isReadOnly() Implements org. Doc from org. Is the container opened for read only or update?
| |
| isTemporaryContainer | back to summary |
|---|---|
| public boolean isTemporaryContainer() throws StandardException Implements org. Doc from org. Return true if this containerHandle refers to a temporary container.
| |
| logCreateContainerInfo | back to summary |
|---|---|
| public ByteArray logCreateContainerInfo() throws StandardException Implements org. Log all information necessary to recreate the container during a load tran.
| |
| makeRecordHandle | back to summary |
|---|---|
| public RecordHandle makeRecordHandle(long pageNumber, int recordId) throws StandardException Implements org. Return a record handle that is initialized to the given page number and record id.
| |
| preAllocate | back to summary |
|---|---|
| public void preAllocate(int numPage) Implements org. Preallocate numPage if possible. | |
| preDirty | back to summary |
|---|---|
| public void preDirty(boolean preDirtyOn) throws StandardException Implements org. The container is about to be modified. Loggable actions use this to make sure the container gets cleaned if a checkpoint is taken after any log record is sent to the log stream but before the container is actually dirtied.
| |
| reCreatePageForRedoRecovery | back to summary |
|---|---|
| public Page reCreatePageForRedoRecovery(int pageFormat, long pageNumber, long pageOffset) throws StandardException Implements org. ReCreate a page for rollforward recovery. During redo recovery it is possible for the system to try to redo the creation of a page (ie. going from non-existence to version 0). It first trys to read the page from disk, but a few different types of errors can occur: o the page does not exist at all on disk, this can happen during rollforward recovery applied to a backup where the file was copied and the page was added to the file during the time frame of the backup but after the physical file was copied. o space in the file exists, but it was never initalized. This can happen if you happen to crash at just the right moment during the allocation process. Also on some OS's it is possible to read from a part of the file that was not ever written - resulting in garbage from the store's point of view (often the result is all 0's). All these errors are easy to recover from as the system can easily create a version 0 from scratch and write it to disk. Because the system does not sync allocation of data pages, it is also possible at this point that whlie writing the version 0 to disk to create it we may encounter an out of disk space error (caught in this routine as a StandardException from the create() call. We can't recovery from this without help from outside, so the caught exception is nested and a new exception thrown which the recovery system will output to the user asking them to check their disk for space/errors.
| |
| removeContainer | back to summary |
|---|---|
| public void removeContainer(LogInstant instant) throws StandardException Implements org. remove the container
| |
| removePage | back to summary |
|---|---|
| public void removePage(Page page) throws StandardException Implements org. Remove a page from the container.
| |
| setEstimatedRowCount | back to summary |
|---|---|
| public void setEstimatedRowCount(long count, int flag) throws StandardException Implements org. Doc from org. Set the total estimated number of rows in the container. Often, after
a scan, the client of RawStore has a much better estimate of the number
of rows in the container then what RawStore has. Use this better
number for future reference.
| |
| setLockingPolicy | back to summary |
|---|---|
| public final void setLockingPolicy(LockingPolicy newLockingPolicy) Implements org. Doc from org. Set the locking policy for this open container | |
| toString | back to summary |
|---|---|
| public String toString() Overrides java. Doc from java. Returns a string representation of the object.
Satisfying this method's contract implies a non-
| |
| update | back to summary |
|---|---|
| public void update(DerbyObservable obj, Object arg) Implements org. Called when the transaction is about to complete.
| |
| updateOK | back to summary |
|---|---|
| public final boolean updateOK() Was I opened for updates?
| |
| useContainer | back to summary |
|---|---|
| public boolean useContainer(boolean droppedOK, boolean waitForLock) throws StandardException Attach me to a container. If this method returns false then I cannot be used anymore, and any reference to me must be discarded.
| |