| java.lang.Object org.apache.derby.impl.store.raw.data.BaseContainer
All known Subclasses: org.apache.derby.impl.store.raw.data.FileContainer,
BaseContainer | abstract class BaseContainer implements Lockable(Code) | | BaseContainer is an abstract class that provides the locking bahaviour
for an object representing an active container, that is the actual
storage container, not the ContainerHandle interface. This class is designed
so that it can change the container it represents to avoid creating
a new object for every container.
This object implements lockable to provide an object to lock while a page is being
allocated.
MT - Mutable - mutable identity :
|
Method Summary | |
public Page | addPage(BaseContainerHandle handle, boolean isOverflow) Add a page to this container. | abstract protected void | backupContainer(BaseContainerHandle handle, String backupContainerPath) Backup the container to the specified path.
Parameters: handle - the container handle. Parameters: backupContainerPath - location of the backup container. | abstract protected boolean | canUpdate() Can the container be updated. | public void | clearIdentity() | abstract protected void | clearPreallocThreshold() The container will have no pre-allocate threshold, i.e., if the
implementation supports it, page preallocation will happen
the next time a new page is allocated. | public void | compressContainer(BaseContainerHandle handle) Release free space to the OS.
As is possible release any free space to the operating system. | abstract protected void | compressContainer(RawTransaction t, BaseContainerHandle allocHandle) | abstract protected void | deallocatePage(BaseContainerHandle userhandle, BasePage page) Deallocate a page from the container. | abstract protected void | dropContainer(LogInstant instant, boolean drop) Mark the container as drop or not drop depending on the input value. | abstract protected void | encryptContainer(BaseContainerHandle handle, String newFilePath) Create encrypted version of the container with the
user specified encryption properties. | protected void | fillInIdentity(ContainerKey key) | abstract protected void | flushAll() Flush all outstanding changes in this container to persistent storage. | protected Page | getAllocPage(BaseContainerHandle handle, long pageNumber, boolean wait) Get an allocation page and latch it. | abstract protected BasePage | getAllocPage(long pageNumber) Return a BasePage that represents the given alloc page number in this container. | protected Page | getAnyPage(BaseContainerHandle handle, long pageNumber, boolean wait) Get any page and latch it . | abstract protected BasePage | getAnyPage(BaseContainerHandle handle, long pageNumber) Return a BasePage that represents any page - alloc page, valid page, free page,
dealloced page etc. | protected boolean | getCommittedDropState() | public long | getContainerId() | abstract public void | getContainerProperties(Properties prop) Request the system properties associated with a container.
Request the value of properties that are associated with a container. | public int | getContainerStatus() | abstract protected long | getContainerVersion() Get the logged container version. | protected boolean | getDeallocLock(BaseContainerHandle handle, RecordHandle deallocLock, boolean wait, boolean zeroDuration) | protected boolean | getDroppedState() | abstract public long | getEstimatedPageCount(BaseContainerHandle handle, int flag) | abstract public long | getEstimatedRowCount(int flag) | abstract protected BasePage | getFirstHeadPage(BaseContainerHandle handle, boolean wait) Get the first page in the container. | protected Page | getFirstPage(BaseContainerHandle handle) Get the first valid page. | abstract protected BasePage | getHeadPage(BaseContainerHandle handle, long pagenumber, boolean wait) Get only a valid, non-overflow page. | public Object | getIdentity() | abstract protected BasePage | getNextHeadPage(BaseContainerHandle handle, long pageNumber, boolean wait) Get the next page in the container. | protected Page | getNextPage(BaseContainerHandle handle, long pageNumber) | abstract protected BasePage | getPage(BaseContainerHandle handle, long pageNumber, boolean wait) Return a BasePage that represents the given page number in this container. | abstract protected BasePage | getPageForCompress(BaseContainerHandle handle, int flag, long pageno) | abstract protected BasePage | getPageForInsert(BaseContainerHandle handle, int flag) Get a potentially suitable page for insert and latch it. | abstract public long | getReusableRecordIdSequenceNumber() Get the reusable RecordId sequence number for the
container. | public long | getSegmentId() | abstract protected SpaceInfo | getSpaceInfo(BaseContainerHandle handle) Get information about space used by the container. | abstract protected void | incrementReusableRecordIdSequenceNumber() Increment the reusable RecordId sequence number. | protected boolean | isReusableRecordId() | protected BasePage | latchPage(BaseContainerHandle handle, BasePage foundPage, boolean wait) | protected void | letGo(BaseContainerHandle handle) Discontinue use of this container. | public boolean | lockAttributes(int flag, Hashtable attributes) | public void | lockEvent(Latch lockInfo) | public boolean | lockerAlwaysCompatible() | abstract protected ByteArray | logCreateContainerInfo() Log all information on the container creation necessary to recreate teh
container during a load tran. | abstract protected BasePage | newPage(BaseContainerHandle userhandle, RawTransaction t, BaseContainerHandle allocHandle, boolean isOverflow) Create a new page in the container. | abstract protected void | preDirty(boolean preDirtyOn) The container is about to be modified. | abstract protected void | prepareForBulkLoad(BaseContainerHandle handle, int numPage) The container will be grown vastly, prepare for it. | abstract protected BasePage | reCreatePageForRedoRecovery(BaseContainerHandle handle, int pageFormat, long pageNumber, long pageOffset) ReCreate a page for rollforward recovery. | abstract protected void | removeContainer(LogInstant instant, boolean leaveStub) Remove the container and reclaim its space. | protected void | removePage(BaseContainerHandle handle, BasePage page) Remove a page from this container. | public boolean | requestCompatible(Object requestedQualifier, Object grantedQualifier) | protected void | setCommittedDropState(boolean isCommittedDrop) | protected void | setDroppedState(boolean isDropped) | abstract public void | setEstimatedRowCount(long count, int flag) | protected void | setReusableRecordIdState(boolean isReusableRecordId) | protected void | truncate(BaseContainerHandle handle) | abstract protected void | truncatePages(long lastValidPagenum) | public void | unlockEvent(Latch lockInfo) | protected boolean | use(BaseContainerHandle handle, boolean forUpdate, boolean droppedOK) Lock the container and mark the container as in-use by this container handle. |
isCommittedDrop | protected boolean isCommittedDrop(Code) | | Committed Drop state of the container. If a post comit action
determined that the drop container operation is committed, the whole
container may be removed and space reclaimed.
MT - mutable : single thread required. Either the container must be exclusive
locked by this thread, or the container must have no identity (ie. it is being created
or opened).
|
isDropped | protected boolean isDropped(Code) | | Dropped state of the container.
MT - mutable : single thread required. Either the container must be exclusive
locked by this thread, or the container must have no identity (ie. it is being created
or opened).
|
isReusableRecordId | protected boolean isReusableRecordId(Code) | | Is reusable recordId. By default, record Ids are not reusable when a
page is reused. However, under special circumstances, clients to raw
store may decide that record Ids may be reused after the page is
reused. When this flag is set, pages that are reused will have its
next recordId set to RecordHandle.FIRST_RECORD_ID
|
BaseContainer | BaseContainer()(Code) | | |
addPage | public Page addPage(BaseContainerHandle handle, boolean isOverflow) throws StandardException(Code) | | Add a page to this container.
MT - thread aware -
The add page operation involves 2 transactions, one is the user
transaction (the transaction which owns the passed in handle), the
other one is a NestedTopTransaction created by this BaseContainer.
The nestedTopTransaction is used by the underlying container to change
high contention structures, such as link list anchor or bit map pages.
The nestedTopTransaction commits or aborts before this routine returns.
The user transaction is used to latch the newly created page.
exception: StandardException - Standard Cloudscape error policy |
backupContainer | abstract protected void backupContainer(BaseContainerHandle handle, String backupContainerPath) throws StandardException(Code) | | Backup the container to the specified path.
Parameters: handle - the container handle. Parameters: backupContainerPath - location of the backup container. exception: StandardException - Standard Derby error policy |
canUpdate | abstract protected boolean canUpdate()(Code) | | Can the container be updated.
true if the container can be updated, false otherwise. |
clearIdentity | public void clearIdentity()(Code) | | |
clearPreallocThreshold | abstract protected void clearPreallocThreshold()(Code) | | The container will have no pre-allocate threshold, i.e., if the
implementation supports it, page preallocation will happen
the next time a new page is allocated.
|
compressContainer | public void compressContainer(BaseContainerHandle handle) throws StandardException(Code) | | 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.
exception: StandardException - Standard Cloudscape error policy |
dropContainer | abstract protected void dropContainer(LogInstant instant, boolean drop)(Code) | | Mark the container as drop or not drop depending on the input value.
|
encryptContainer | abstract protected void encryptContainer(BaseContainerHandle handle, String newFilePath) throws StandardException(Code) | | Create encrypted version of the container with the
user specified encryption properties.
Parameters: handle - the container handle. Parameters: newFilePath - file to store the new encrypted version of the container exception: StandardException - Standard Derby error policy |
flushAll | abstract protected void flushAll() throws StandardException(Code) | | Flush all outstanding changes in this container to persistent storage.
exception: StandardException - Standard Cloudscape error policy |
getAllocPage | abstract protected BasePage getAllocPage(long pageNumber) throws StandardException(Code) | | Return a BasePage that represents the given alloc page number in this container.
exception: StandardException - Standard Cloudscape error policy |
getAnyPage | abstract protected BasePage getAnyPage(BaseContainerHandle handle, long pageNumber) throws StandardException(Code) | | Return a BasePage that represents any page - alloc page, valid page, free page,
dealloced page etc. The only requirement is that the page is initialized...
exception: StandardException - Cloudscape Standard error policy |
getCommittedDropState | protected boolean getCommittedDropState()(Code) | | |
getContainerId | public long getContainerId()(Code) | | |
getContainerProperties | abstract public void getContainerProperties(Properties prop) throws StandardException(Code) | | 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(BaseContainer base)
{
Properties prop = new Properties();
prop.put("derby.storage.pageSize", "");
base.getContainerProperties(prop);
System.out.println(
"container's page size = " +
prop.getProperty("derby.storage.pageSize");
}
Parameters: prop - Property list to fill in. exception: StandardException - Standard exception policy. |
getContainerStatus | public int getContainerStatus()(Code) | | |
getDroppedState | protected boolean getDroppedState()(Code) | | |
getReusableRecordIdSequenceNumber | abstract public long getReusableRecordIdSequenceNumber()(Code) | | Get the reusable RecordId sequence number for the
container. This sequence number should be incremented every time
there is an operation which may cause RecorIds to be reused.
This method can be used by clients to check if a RecordId they
obtained is still guaranteed to be valid.
If the sequence number has changed, the RecordId may have been
reused for another row.
sequence number for reusable RecordId |
getSegmentId | public long getSegmentId()(Code) | | |
incrementReusableRecordIdSequenceNumber | abstract protected void incrementReusableRecordIdSequenceNumber()(Code) | | Increment the reusable RecordId sequence number.
|
isReusableRecordId | protected boolean isReusableRecordId()(Code) | | |
letGo | protected void letGo(BaseContainerHandle handle)(Code) | | Discontinue use of this container. Note that the unlockContainer
call made from this method may not release any locks. The container
lock may be held until the end of the transaction.
|
lockAttributes | public boolean lockAttributes(int flag, Hashtable attributes)(Code) | | |
lockerAlwaysCompatible | public boolean lockerAlwaysCompatible()(Code) | | |
logCreateContainerInfo | abstract protected ByteArray logCreateContainerInfo() throws StandardException(Code) | | Log all information on the container creation necessary to recreate teh
container during a load tran.
exception: StandardException - Cloudscape Standard error policy |
preDirty | abstract protected void preDirty(boolean preDirtyOn)(Code) | | 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.
|
prepareForBulkLoad | abstract protected void prepareForBulkLoad(BaseContainerHandle handle, int numPage)(Code) | | The container will be grown vastly, prepare for it.
|
reCreatePageForRedoRecovery | abstract protected BasePage reCreatePageForRedoRecovery(BaseContainerHandle handle, int pageFormat, long pageNumber, long pageOffset) throws StandardException(Code) | | 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.
The arguments passed in need to be sufficient for the page cache to
materialize a brand new page and write it to disk.
exception: StandardException - Standard exception policy. |
removePage | protected void removePage(BaseContainerHandle handle, BasePage page) throws StandardException(Code) | | Remove a page from this container. The page will be unlatched by this
routine before it returns.
Unlike addPage, this method done as part of the user transaction.
The removed page is not usable by anyone until the user transaction
comits.
If the user transaction rolls back, the removed page is un-removed.
MT - thread aware -
Parameters: handle - the container handle that has opened the container and latched the page Parameters: page - the latched page that is to be deallocated exception: StandardException - Standard Cloudscape error policy |
requestCompatible | public boolean requestCompatible(Object requestedQualifier, Object grantedQualifier)(Code) | | |
setCommittedDropState | protected void setCommittedDropState(boolean isCommittedDrop)(Code) | | |
setDroppedState | protected void setDroppedState(boolean isDropped)(Code) | | Set the container's dropped state
|
setReusableRecordIdState | protected void setReusableRecordIdState(boolean isReusableRecordId)(Code) | | |
unlockEvent | public void unlockEvent(Latch lockInfo)(Code) | | |
use | protected boolean use(BaseContainerHandle handle, boolean forUpdate, boolean droppedOK) throws StandardException(Code) | | Lock the container and mark the container as in-use by this container handle.
Parameters: droppedOK - if true, use this container even if it is dropped., true if the container can be used, false if it has been droppedsince the lock was requested and droppedOK is not true. exception: StandardException - I cannot be opened for update. |
|
|