org.apache.derby.impl.store.raw.data
Class RAFContainer

java.lang.Object
  extended byorg.apache.derby.impl.store.raw.data.BaseContainer
      extended byorg.apache.derby.impl.store.raw.data.FileContainer
          extended byorg.apache.derby.impl.store.raw.data.RAFContainer
All Implemented Interfaces:
Cacheable, Lockable, java.security.PrivilegedExceptionAction, TypedFormat
Direct Known Subclasses:
TempRAFContainer

public class RAFContainer
extends FileContainer
implements java.security.PrivilegedExceptionAction

RAFContainer (short for RandomAccessFileContainer) is a concrete subclass of FileContainer for FileContainers which are implemented on java.io.RandomAccessFile.


Field Summary
private  int actionCode
           
private  boolean actionErrorOK
           
private  StorageFile actionFile
           
private  ContainerKey actionIdentity
           
private  LogInstant actionInstant
           
private  boolean actionStub
           
private  boolean actionTryAlternatePath
           
private static int CREATE_CONTAINER_ACTION
           
protected  StorageRandomAccessFile fileData
           
private static int GET_FILE_NAME_ACTION
           
protected  boolean needsSync
           
private static int OPEN_CONTAINER_ACTION
           
private static int REMOVE_FILE_ACTION
           
private static int STUBBIFY_ACTION
           
 
Fields inherited from class org.apache.derby.impl.store.raw.data.FileContainer
ALLOC_PAGE_ARG_NUM, allocCache, canUpdate, CHECKSUM_SIZE, CONTAINER_INFO_SIZE, containerCache, containerInfo, containerVersion, dataFactory, estimatedRowCount, FIRST_ALLOC_PAGE_NUMBER, FIRST_ALLOC_PAGE_OFFSET, firstAllocPageNumber, firstAllocPageOffset, formatIdInteger, initialPages, isDirty, lastLogInstant, minimumRecordSize, pageCache, pageSize, preDirty, SPACE_TRACE, spareSpace, STORED_PAGE_ARG_NUM
 
Fields inherited from class org.apache.derby.impl.store.raw.data.BaseContainer
identity, isCommittedDrop, isDropped, isReusableRecordId
 
Constructor Summary
protected RAFContainer(BaseDataFileFactory factory)
           
 
Method Summary
 void clean(boolean forRemove)
          Clean the object.
private  void clearDirty()
           
protected  void closeContainer()
           
protected  void createContainer(ContainerKey newIdentity)
          Create a new container.
 Cacheable createIdentity(java.lang.Object key, java.lang.Object createParameter)
          Create a new item.
protected  void flushAll()
          flush the cache to ensure all of my pages are written to disk
protected  StorageFile getFileName(ContainerKey identity, boolean stub, boolean errorOK, boolean tryAlternatePath)
           
 boolean isDirty()
          We treat this container as dirty if it has the container file open.
protected  boolean openContainer(ContainerKey newIdentity)
          Open a container.
private  boolean padFile(StorageRandomAccessFile file, long pageOffset)
          Pad the file upto the passed in page offset.
protected  int preAllocate(long lastPreallocPagenum, int preAllocSize)
          Preallocate some pages if need be
protected  StorageFile privGetFileName(ContainerKey identity, boolean stub, boolean errorOK, boolean tryAlternatePath)
           
private  boolean privRemoveFile(StorageFile file)
           
protected  void readPage(long pageNumber, byte[] pageData)
          Read a page into the supplied array.
protected  void removeContainer(LogInstant instant, boolean leaveStub)
          Remove the container
protected  boolean removeFile(StorageFile file)
           
 java.lang.Object run()
           
 Cacheable setIdentity(java.lang.Object key)
          Set container's identity
protected  void stubbify(LogInstant instant)
           
protected  void truncatePages(long lastValidPagenum)
          Truncate pages of a container.
protected  void writePage(long pageNumber, byte[] pageData, boolean syncPage)
          Write a page from the supplied array.
private  void writeRAFHeader(StorageRandomAccessFile file, boolean create, boolean syncFile)
           
 
Methods inherited from class org.apache.derby.impl.store.raw.data.FileContainer
bumpContainerVersion, canUpdate, clearIdentity, clearPreallocThreshold, compressContainer, createIdent, deallocatePage, decryptPage, doPreAllocatePages, dropContainer, encryptPage, getAllocPage, getAnyPage, getContainerProperties, getContainerVersion, getEmbryonicPage, getEstimatedPageCount, getEstimatedRowCount, getFirstHeadPage, getHeadPage, getMinimumRecordSize, getNextHeadPage, getPage, getPageForCompress, getPageForInsert, getPageSize, getSpaceInfo, getSpareSpace, getTypeFormatId, initPage, latchPage, letGo, logCreateContainerInfo, newPage, preDirty, prepareForBulkLoad, readHeader, reCreatePageForLoadTran, setDirty, setEstimatedRowCount, setIdent, trackUnfilledPage, updateEstimatedRowCount, writeHeader, writeHeader
 
Methods inherited from class org.apache.derby.impl.store.raw.data.BaseContainer
addPage, compressContainer, fillInIdentity, getAllocPage, getAnyPage, getCommittedDropState, getContainerId, getContainerStatus, getDeallocLock, getDroppedState, getFirstPage, getIdentity, getNextPage, getSegmentId, isReusableRecordId, lockAttributes, lockerAlwaysCompatible, lockEvent, removePage, requestCompatible, setCommittedDropState, setDroppedState, setReusableRecordIdState, truncate, unlockEvent, use
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.derby.iapi.services.cache.Cacheable
getIdentity
 

Field Detail

fileData

protected StorageRandomAccessFile fileData

needsSync

protected boolean needsSync

actionCode

private int actionCode

GET_FILE_NAME_ACTION

private static final int GET_FILE_NAME_ACTION
See Also:
Constant Field Values

CREATE_CONTAINER_ACTION

private static final int CREATE_CONTAINER_ACTION
See Also:
Constant Field Values

REMOVE_FILE_ACTION

private static final int REMOVE_FILE_ACTION
See Also:
Constant Field Values

OPEN_CONTAINER_ACTION

private static final int OPEN_CONTAINER_ACTION
See Also:
Constant Field Values

STUBBIFY_ACTION

private static final int STUBBIFY_ACTION
See Also:
Constant Field Values

actionIdentity

private ContainerKey actionIdentity

actionStub

private boolean actionStub

actionErrorOK

private boolean actionErrorOK

actionTryAlternatePath

private boolean actionTryAlternatePath

actionFile

private StorageFile actionFile

actionInstant

private LogInstant actionInstant
Constructor Detail

RAFContainer

protected RAFContainer(BaseDataFileFactory factory)
Method Detail

isDirty

public boolean isDirty()
Description copied from class: FileContainer
We treat this container as dirty if it has the container file open.

Specified by:
isDirty in interface Cacheable
Overrides:
isDirty in class FileContainer
See Also:
Cacheable.isDirty()

setIdentity

public Cacheable setIdentity(java.lang.Object key)
                      throws StandardException
Set container's identity

Specified by:
setIdentity in interface Cacheable
Overrides:
setIdentity in class FileContainer
Returns:
a valid object if the container was successfully opened, null if it does not exist.
Throws:
StandardException - Standard Cloudscape error policy
See Also:
Cacheable.setIdentity(java.lang.Object)

createIdentity

public Cacheable createIdentity(java.lang.Object key,
                                java.lang.Object createParameter)
                         throws StandardException
Description copied from interface: Cacheable
Create a new item.

Create a new item and set the identity of the object to represent it. The object will be in the No Identity state, ie. it will have just been created or clearIdentity() was just called.
The object must copy the information out of key, not just store a reference to key if the key is not immutable. After this call the expression getIdentity().equals(key) must return true.

If the class of the object needs to change (e.g. to support a different format) then the object should create a new object, call its initParameter() with the parameters the original object was called with, set its identity and return a reference to it. The cache manager will discard the reference to the old object.
If an exception is thrown the object must be left in the no-identity state.
MT - single thread required - Method must only be called be cache manager and the cache manager will guarantee only one thread can be calling it.

Specified by:
createIdentity in interface Cacheable
Overrides:
createIdentity in class FileContainer
Throws:
StandardException - Standard Cloudscape error policy

removeContainer

protected void removeContainer(LogInstant instant,
                               boolean leaveStub)
                        throws StandardException
Remove the container

Specified by:
removeContainer in class BaseContainer
Parameters:
leaveStub - if true, leave a stub. If false, remove everything
Throws:
StandardException - Standard Cloudscape error policy
See Also:
RawContainerHandle.removeContainer(org.apache.derby.iapi.store.raw.log.LogInstant)

closeContainer

protected final void closeContainer()
Specified by:
closeContainer in class FileContainer

readPage

protected void readPage(long pageNumber,
                        byte[] pageData)
                 throws java.io.IOException,
                        StandardException
Read a page into the supplied array.
MT - thread safe

Specified by:
readPage in class FileContainer
Throws:
java.io.IOException - exception reading page
StandardException - Standard Cloudscape error policy

writePage

protected void writePage(long pageNumber,
                         byte[] pageData,
                         boolean syncPage)
                  throws java.io.IOException,
                         StandardException
Write a page from the supplied array.
MT - thread safe

Specified by:
writePage in class FileContainer
Throws:
StandardException - Standard Cloudscape error policy
java.io.IOException - IO error accessing page

padFile

private boolean padFile(StorageRandomAccessFile file,
                        long pageOffset)
                 throws java.io.IOException,
                        StandardException
Pad the file upto the passed in page offset. Returns true if the file needed padding.

Throws:
java.io.IOException
StandardException

clean

public void clean(boolean forRemove)
           throws StandardException
Description copied from interface: Cacheable
Clean the object. It is up to the object to ensure synchronization of the isDirty() and clean() method calls.
If forRemove is true then the object is being removed due to an explict remove request, in this case the cache manager will have called this method regardless of the state of the isDirty()
If an exception is thrown the object must be left in the clean state.
MT - thread safe - Can be called at any time by the cache manager, it is the responsibility of the object implementing Cacheable to ensure any users of the object do not conflict with the clean call.

Specified by:
clean in interface Cacheable
Throws:
StandardException - Standard Cloudscape error policy

clearDirty

private void clearDirty()

preAllocate

protected int preAllocate(long lastPreallocPagenum,
                          int preAllocSize)
Preallocate some pages if need be

Specified by:
preAllocate in class FileContainer
Parameters:
lastPreallocPagenum - the last preallocated page number as known by the allocation page
preAllocSize - try to preallocate this page number of pages. Since only the container knows how many pages are actually on disk, it may determine that certain number of pages that the allocation page thinks need to be preallocated is already allocated, in those case, act as if the preallocation is successful.
Returns:
number of successfully preallocated page, or 0 if no page has been preallocated

truncatePages

protected void truncatePages(long lastValidPagenum)
                      throws StandardException
Truncate pages of a container.

Truncate all pages from lastValidPagenum+1 through the end of the file.

Specified by:
truncatePages in class BaseContainer
Parameters:
lastValidPagenum - The page number of the last valid page of the file. All pages after this one are truncated.
Throws:
StandardException - Standard exception policy.

writeRAFHeader

private void writeRAFHeader(StorageRandomAccessFile file,
                            boolean create,
                            boolean syncFile)
                     throws java.io.IOException,
                            StandardException
Throws:
java.io.IOException
StandardException

flushAll

protected void flushAll()
                 throws StandardException
flush the cache to ensure all of my pages are written to disk

Specified by:
flushAll in class BaseContainer
Throws:
StandardException - Standard Cloudscape error policy

getFileName

protected StorageFile getFileName(ContainerKey identity,
                                  boolean stub,
                                  boolean errorOK,
                                  boolean tryAlternatePath)
                           throws StandardException
Throws:
StandardException

privGetFileName

protected StorageFile privGetFileName(ContainerKey identity,
                                      boolean stub,
                                      boolean errorOK,
                                      boolean tryAlternatePath)
                               throws StandardException
Throws:
StandardException

createContainer

protected void createContainer(ContainerKey newIdentity)
                        throws StandardException
Description copied from class: FileContainer
Create a new container.

Create a new container, all references to identity must be through the passed in identity, this object will no identity until after this method returns.

Specified by:
createContainer in class FileContainer
Throws:
StandardException - Cloudscape Standard error policy

removeFile

protected boolean removeFile(StorageFile file)
                      throws java.lang.SecurityException,
                             StandardException
Throws:
java.lang.SecurityException
StandardException

privRemoveFile

private boolean privRemoveFile(StorageFile file)
                        throws StandardException
Throws:
StandardException

openContainer

protected boolean openContainer(ContainerKey newIdentity)
                         throws StandardException
Description copied from class: FileContainer
Open a container.

Longer descrption of routine.

Open a container. Open the file that maps to this container, if the file does not exist then we assume the container was never created. If the file exists but we have trouble opening it then we throw some exception.
MT - single thread required - Enforced by cache manager.

Specified by:
openContainer in class FileContainer
Throws:
StandardException - Standard exception policy.

stubbify

protected void stubbify(LogInstant instant)
                 throws StandardException
Throws:
StandardException

run

public java.lang.Object run()
                     throws StandardException
Specified by:
run in interface java.security.PrivilegedExceptionAction
Throws:
StandardException

Built on Tue 2006-10-10 19:23:47+0200, from revision exported

Apache Derby V10.1 Engine Documentation - Copyright © 1997,2005 The Apache Software Foundation or its licensors, as applicable.