Package org.rrd4j.core
Class RrdBackend
java.lang.Object
org.rrd4j.core.RrdBackend
- Direct Known Subclasses:
ByteBufferBackend,RrdRandomAccessFileBackend
Base implementation class for all backend classes. Each Round Robin Database object
(RrdDb object) is backed with a single RrdBackend object which performs
actual I/O operations on the underlying storage. Rrd4j supports
multiple backends out of the box. E.g.:
RrdRandomAccessFileBackend: objects of this class are created from theRrdRandomAccessFileBackendFactoryclass. This was the default backend used in all Rrd4j releases prior to 1.4.0. It uses java.io.* package and RandomAccessFile class to store RRD data in files on the disk.RrdNioBackend: objects of this class are created from theRrdNioBackendFactoryclass. The backend uses java.io.* and java.nio.* classes (mapped ByteBuffer) to store RRD data in files on the disk. This backend is fast, very fast, but consumes a lot of memory (borrowed not from the JVM but from the underlying operating system directly). This is the default backend used in Rrd4j since 1.4.0 release.RrdMemoryBackend: objects of this class are created from theRrdMemoryBackendFactoryclass. This backend stores all data in memory. Once JVM exits, all data gets lost. The backend is extremely fast and memory hungry.
To create your own backend in order to provide some custom type of RRD storage, you should do the following:
- Create your custom RrdBackend class (RrdCustomBackend, for example) by extending RrdBackend class. You have to implement all abstract methods defined in the base class.
- Create your custom RrdBackendFactory class (RrdCustomBackendFactory, for example) by extending RrdBackendFactory class. You have to implement all abstract methods defined in the base class. Your custom factory class will actually create custom backend objects when necessary.
- Create instance of your custom RrdBackendFactory and register it as a regular
factory available to Rrd4j framework. See javadoc for
RrdBackendFactoryto find out how to do this.
- Author:
- Sasa Markovic
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final ByteOrderAllByteBufferusage should use this standard order. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedRrdBackend(String path) Creates backend for a RRD storage with the given path. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract voidclose()Closes the underlying backend.(package private) voiddone(RrdBackendFactory factory, PhantomReference<RrdDb> ref) protected CharBuffergetCharBuffer(long offset, int size) Extract a CharBuffer from the backend, used by readStringabstract longReturns the number of RRD bytes in the underlying storage.getPath()Returns path to the storage.getUri()Return the URI associated to this backend, using the factory to generate it from the path.protected booleanThis method suggests the caching policy to the Rrd4j frontend (high-level) classes.(package private) static booleanprotected abstract voidread(long offset, byte[] b) Reads an array of bytes from the underlying storage starting from the given storage offset.final byte[]readAll()Reads all RRD bytes from the underlying storage.protected doublereadDouble(long offset) protected double[]readDouble(long offset, int count) protected intreadInt(long offset) protected longreadLong(long offset) protected shortreadShort(long offset) protected final StringreadString(long offset) protected voidrrdClose()Closes the underlying backend.protected abstract voidsetLength(long length) Sets the number of bytes in the underlying RRD storage.protected abstract voidwrite(long offset, byte[] b) Writes an array of bytes to the underlying storage starting from the given storage offset.protected voidwriteDouble(long offset, double value) protected voidwriteDouble(long offset, double[] values) protected voidwriteDouble(long offset, double value, int count) protected voidwriteInt(long offset, int value) protected voidwriteLong(long offset, long value) protected voidwriteShort(long offset, short value) protected final voidwriteString(long offset, String value) protected voidwriteString(long offset, String value, int length)
-
Field Details
-
BYTEORDER
AllByteBufferusage should use this standard order.
-
-
Constructor Details
-
RrdBackend
Creates backend for a RRD storage with the given path.- Parameters:
path- String identifying RRD storage. For files on the disk, this argument should represent file path. Other storage types might interpret this argument differently.
-
-
Method Details
-
done
- Parameters:
factory- the factory to set
-
getFactory
- Returns:
- the factory
-
getPath
Returns path to the storage.- Returns:
- Storage path
-
getUri
Return the URI associated to this backend, using the factory to generate it from the path.- Returns:
- URI to this backend's rrd.
-
write
Writes an array of bytes to the underlying storage starting from the given storage offset.- Parameters:
offset- Storage offset.b- Array of bytes that should be copied to the underlying storage- Throws:
IOException- Thrown in case of I/O error
-
read
Reads an array of bytes from the underlying storage starting from the given storage offset.- Parameters:
offset- Storage offset.b- Array which receives bytes from the underlying storage- Throws:
IOException- Thrown in case of I/O error
-
getLength
Returns the number of RRD bytes in the underlying storage.- Returns:
- Number of RRD bytes in the storage.
- Throws:
IOException- Thrown in case of I/O error.
-
setLength
Sets the number of bytes in the underlying RRD storage. This method is called only once, immediately after a new RRD storage gets created.- Parameters:
length- Length of the underlying RRD storage in bytes.- Throws:
IOException- Thrown in case of I/O error.
-
close
Closes the underlying backend. Used internally, should not be called from external code.- Throws:
IOException- Thrown in case of I/O error
-
rrdClose
Closes the underlying backend. Call byRrdDb#close()when it's closed. All subclass must keep calling it.- Throws:
IOException- Thrown in case of I/O error
-
isCachingAllowed
protected boolean isCachingAllowed()This method suggests the caching policy to the Rrd4j frontend (high-level) classes. Iftrueis returned, frontend classes will cache frequently used parts of a RRD file in memory to improve performance. Iffalseis returned, high level classes will never cache RRD file sections in memory.- Returns:
trueif file caching is enabled,falseotherwise. By default, the method returnstruebut it can be overridden in subclasses.
-
readAll
Reads all RRD bytes from the underlying storage.- Returns:
- RRD bytes
- Throws:
IOException- Thrown in case of I/O error
-
writeShort
- Throws:
IOException
-
writeInt
- Throws:
IOException
-
writeLong
- Throws:
IOException
-
writeDouble
- Throws:
IOException
-
writeDouble
- Throws:
IOException
-
writeDouble
- Throws:
IOException
-
writeString
- Throws:
IOException
-
writeString
- Throws:
IOException
-
readShort
- Throws:
IOException
-
readInt
- Throws:
IOException
-
readLong
- Throws:
IOException
-
readDouble
- Throws:
IOException
-
readDouble
- Throws:
IOException
-
getCharBuffer
Extract a CharBuffer from the backend, used by readString- Parameters:
offset- the offset in the rrdsize- the size of the buffer, in character- Returns:
- a new CharBuffer
- Throws:
IOException- if the read fails
-
readString
- Throws:
IOException
-
isInstanceCreated
static boolean isInstanceCreated()
-