|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectcom.bigdata.rawstore.AbstractRawStore
com.bigdata.rawstore.AbstractRawWormStore
com.bigdata.journal.AbstractBufferStrategy
public abstract class AbstractBufferStrategy
Abstract base class for IBufferStrategy implementation.
| Field Summary | |
|---|---|
protected BufferMode |
bufferMode
The buffer strategy implemented by this class. |
static String |
ERR_ADDRESS_IS_NULL
Text of the error message used when a ZERO (0L) is passed as an address to IRawStore.read(long) or similar methods. |
static String |
ERR_ADDRESS_NOT_WRITTEN
Text of the error message used when an address is given has never been written. |
static String |
ERR_BAD_RECORD_SIZE
Error message used when the record size is invalid (e.g., negative). |
static String |
ERR_BUFFER_EMPTY
Text of the error message used when a ByteBuffer with zero bytes
Buffer.remaining() is passed to IRawStore.write(ByteBuffer). |
static String |
ERR_BUFFER_NULL
Text of the error message used when a null reference is
provided for a ByteBuffer. |
static String |
ERR_BUFFER_OVERRUN
Error message used when an operation would write more data than would be permitted onto a buffer. |
static String |
ERR_MAX_EXTENT
Text of the error message used when a write operation would exceed the maximum extent for a backing store. |
static String |
ERR_NOT_OPEN
Error message used when the store is closed but the operation requires that the store is open. |
static String |
ERR_OPEN
Error message used when the store is open by the operation requires that the store is closed. |
static String |
ERR_READ_ONLY
Error message used when the writes are not allowed. |
static String |
ERR_RECORD_LENGTH_ZERO
Text of the error message used when an address provided to IRawStore.read(long) or a similar method encodes a record length
of zero (0). |
static String |
ERR_TRUNCATE
Text of the error message used when IBufferStrategy.truncate(long) would truncate data that has
already been written. |
protected long |
initialExtent
|
protected static org.apache.log4j.Logger |
log
Log for buffer operations. |
protected long |
maximumExtent
|
protected AtomicLong |
nextOffset
The next offset at which a data item would be written on the store as an offset into the user extent (offset zero(0) addresses the first byte after the root blocks). |
protected static boolean |
WARN
|
| Fields inherited from class com.bigdata.rawstore.AbstractRawWormStore |
|---|
am |
| Fields inherited from interface com.bigdata.rawstore.IAddressManager |
|---|
NULL |
| Method Summary | |
|---|---|
void |
abort()
The default is a NOP. |
protected void |
assertOpen()
|
void |
close()
Manages the open flag state. |
void |
closeForWrites()
Sets the readOnly flag. |
void |
commit()
The default is a NOP. |
void |
delete(long addr)
The default is a NOP. |
void |
destroy()
Closes the store immediately (if open), deletes its persistent resources, and clears any records for the store from the IGlobalLRU. |
BufferMode |
getBufferMode()
The buffer mode supported by the implementation |
long |
getInitialExtent()
The initial extent. |
long |
getMaximumExtent()
The maximum extent allowable before a buffer overflow operation will be rejected. |
int |
getMaxRecordSize()
The maximum size of a record for the address manager less 4 bytes iff checksums are enabled. |
long |
getMetaBitsAddr()
The RWStrategy requires meta allocation info in the root block, this method is the hook to enable access. |
long |
getMetaStartAddr()
The RWStrategy requires meta allocation info in the root block, this method is the hook to enable access. |
protected long |
getMinimumExtension()
The minimum amount to extend the backing storage when it overflows. |
long |
getNextOffset()
The next offset at which a data item would be written on the store as an offset into the user extent. |
IResourceMetadata |
getResourceMetadata()
Not supported - this is available on the AbstractJournal. |
UUID |
getUUID()
Not supported - this is available on the AbstractJournal. |
boolean |
isOpen()
true iff the store is open. |
boolean |
isReadOnly()
true iff the store does not allow writes. |
boolean |
overflow(long needed)
Invoked if the store would exceed its current extent by IRawStore.write(ByteBuffer). |
boolean |
requiresCommit(IRootBlockView block)
A method that removes assumptions of how a specific strategy determines whether a transaction commit is required. |
long |
size()
The #of application data bytes written on the store (does not count any headers or root blocks that may exist for the store). |
protected static long |
transferFromDiskTo(IDiskBasedStrategy src,
RandomAccessFile out)
Helper method used by DiskBackedBufferStrategy and
DiskOnlyStrategy to implement
IBufferStrategy.transferTo(RandomAccessFile) using a
FileChannel to FileChannel transfer. |
boolean |
useChecksums()
false by default since these were added for HA with the
WORMStrategy and the RWStrategy. |
| Methods inherited from class com.bigdata.rawstore.AbstractRawWormStore |
|---|
getAddressManager, getByteCount, getOffset, getOffsetBits, getPhysicalAddress, toAddr, toString |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Methods inherited from interface com.bigdata.journal.IBufferStrategy |
|---|
getAddressManager, getCounters, getExtent, getHeaderSize, getOffsetBits, getUserExtent, readRootBlock, transferTo, truncate, writeRootBlock |
| Methods inherited from interface com.bigdata.rawstore.IRawStore |
|---|
deleteResources, force, getFile, isFullyBuffered, isStable, read, write |
| Methods inherited from interface com.bigdata.rawstore.IAddressManager |
|---|
getByteCount, getOffset, getPhysicalAddress, toAddr, toString |
| Field Detail |
|---|
protected static final org.apache.log4j.Logger log
protected static final boolean WARN
public static final String ERR_BUFFER_EMPTY
ByteBuffer with zero bytes
Buffer.remaining() is passed to IRawStore.write(ByteBuffer).
public static final String ERR_BUFFER_NULL
null reference is
provided for a ByteBuffer.
public static final String ERR_ADDRESS_NOT_WRITTEN
nextOffset on which data
would be written may be easily detected.
public static final String ERR_ADDRESS_IS_NULL
IRawStore.read(long) or similar methods. This value 0L is
reserved to indicate a persistent null reference and may never be read.
public static final String ERR_RECORD_LENGTH_ZERO
IRawStore.read(long) or a similar method encodes a record length
of zero (0). Empty records are not permitted on write and addresses with
a zero length are rejected on read.
public static final String ERR_MAX_EXTENT
public static final String ERR_TRUNCATE
IBufferStrategy.truncate(long) would truncate data that has
already been written.
public static final String ERR_READ_ONLY
public static final String ERR_BAD_RECORD_SIZE
ERR_RECORD_LENGTH_ZERO and
ERR_BUFFER_EMPTY.public static final String ERR_NOT_OPEN
public static final String ERR_OPEN
public static final String ERR_BUFFER_OVERRUN
protected final long initialExtent
protected final long maximumExtent
protected final BufferMode bufferMode
protected final AtomicLong nextOffset
Note: It is NOT safe to reload the current root block and therefore reset
this to an earlier offset unless all transactions are discarded. The
reason is that transactions may use objects (btrees) to provide
isolation. Those objects write on the store but do not register as
ICommitters and therefore never make themselves restart safe.
However, you can not discard the writes of those objects unless the
entire store is being restarted, e.g., after a shutdown or a crash.
Note: An AtomicLong is used to provide an object on which we can
lock when assigning the next record's address and synchronously updating
the counter value. It also ensures that threads can not see a stale value
for the counter.
| Method Detail |
|---|
public final long getInitialExtent()
IBufferStrategy
getInitialExtent in interface IBufferStrategypublic final long getMaximumExtent()
IBufferStrategy
Note: The semantics here differ from those defined by
Options.MAXIMUM_EXTENT. The latter specifies the threshold at
which a journal will overflow (onto another journal) while this specifies
the maximum size to which a buffer is allowed to grow.
Note: This is normally zero (0L), which basically means that
the maximum extent is ignored by the IBufferStrategy but
respected by the AbstractJournal, resulting in a soft limit
on journal overflow.
getMaximumExtent in interface IBufferStrategy0L
iff no limit is imposed.protected long getMinimumExtension()
public final BufferMode getBufferMode()
IBufferStrategy
getBufferMode in interface IBufferStrategypublic final long getNextOffset()
IBufferStrategy
getNextOffset in interface IBufferStrategypublic final long size()
IRawStore
size in interface IRawStoreprotected final void assertOpen()
public boolean isOpen()
IRawStoretrue iff the store is open.
isOpen in interface IRawStoretrue iff the store is open.public boolean isReadOnly()
IRawStoretrue iff the store does not allow writes.
isReadOnly in interface IRawStorepublic void close()
open flag state.
close in interface IRawStorepublic final void destroy()
IRawStoreIGlobalLRU. Does
NOT throw an IllegalStateException if the store is already
closed, but still deletes the backing resources.
destroy in interface IRawStoreIRawStore.deleteResources()public final boolean overflow(long needed)
IRawStore.write(ByteBuffer). The default behavior extends the capacity of
the buffer by the at least the requested amount and a maximum of 32M or
the Options.INITIAL_EXTENT.
If the data are fully buffered, then the maximum store size is limited to int32 bytes which is the maximum #of bytes that can be addressed in RAM (the pragmatic maximum is slightly less than 2G due to the limits of the JVM to address system memory).
protected static long transferFromDiskTo(IDiskBasedStrategy src,
RandomAccessFile out)
throws IOException
DiskBackedBufferStrategy and
DiskOnlyStrategy to implement
IBufferStrategy.transferTo(RandomAccessFile) using a
FileChannel to FileChannel transfer.
src - The source.out - The output file.
IOExceptionpublic UUID getUUID()
AbstractJournal.
getUUID in interface IRawStoreUnsupportedOperationException - alwayspublic IResourceMetadata getResourceMetadata()
AbstractJournal.
getResourceMetadata in interface IRawStoreUnsupportedOperationException - alwayspublic void closeForWrites()
readOnly flag.
Note: This method SHOULD be extended to release write caches, etc.
closeForWrites in interface IBufferStrategypublic void delete(long addr)
delete in interface IRawStoredelete in class AbstractRawStoreaddr - A long integer formed using Addr that encodes both the
offset at which the data was written and the #of bytes that
were written.public void commit()
commit in interface IBufferStrategypublic void abort()
abort in interface IBufferStrategypublic long getMetaBitsAddr()
IBufferStrategy
getMetaBitsAddr in interface IBufferStrategypublic long getMetaStartAddr()
IBufferStrategy
getMetaStartAddr in interface IBufferStrategypublic boolean requiresCommit(IRootBlockView block)
IBufferStrategy
requiresCommit in interface IBufferStrategyblock - The root block held by the client, can be checked against the
state of the Buffer Strategy
public int getMaxRecordSize()
getMaxRecordSize in interface IBufferStrategypublic boolean useChecksums()
false by default since these were added for HA with the
WORMStrategy and the RWStrategy.
useChecksums in interface IBufferStrategy
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||