Package org.jrobin.core
Class RrdDbPool
- java.lang.Object
-
- org.jrobin.core.RrdDbPool
-
public class RrdDbPool extends Object
This class should be used to synchronize access to RRD files in a multithreaded environment. This class should be also used to prevent openning of too many RRD files at the same time (thus avoiding operating system limits)
-
-
Field Summary
Fields Modifier and Type Field Description static int
INITIAL_CAPACITY
Initial capacity of the pool i.e.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description int
getCapacity()
Returns the maximum number of simultaneously open RRD files.static RrdDbPool
getInstance()
Creates a single instance of the class on the first call, or returns already existing one.int
getOpenFileCount()
Returns the number of open RRD files.String[]
getOpenFiles()
Returns an array of open file names.void
release(RrdDb rrdDb)
Releases RrdDb reference previously obtained from the pool.RrdDb
requestRrdDb(String path)
Requests a RrdDb reference for the given RRD file path.RrdDb
requestRrdDb(String path, String sourcePath)
Requests a RrdDb reference for the given path.RrdDb
requestRrdDb(RrdDef rrdDef)
Requests a RrdDb reference for the given RRD file definition object.void
setCapacity(int capacity)
Sets the maximum number of simultaneously open RRD files.
-
-
-
Field Detail
-
INITIAL_CAPACITY
public static final int INITIAL_CAPACITY
Initial capacity of the pool i.e. maximum number of simultaneously open RRD files. The pool will never open too many RRD files at the same time.- See Also:
- Constant Field Values
-
-
Method Detail
-
getInstance
public static RrdDbPool getInstance() throws RrdException
Creates a single instance of the class on the first call, or returns already existing one.- Returns:
- Single instance of this class
- Throws:
RrdException
- Thrown if the default RRD backend is not derived from theRrdFileBackendFactory
-
requestRrdDb
public RrdDb requestRrdDb(String path) throws IOException, RrdException
Requests a RrdDb reference for the given RRD file path.- If the file is already open, previously returned RrdDb reference will be returned. Its usage count will be incremented by one.
- If the file is not already open and the number of already open RRD files is less than
INITIAL_CAPACITY
, the file will be open and a new RrdDb reference will be returned. If the file is not already open and the number of already open RRD files is equal toINITIAL_CAPACITY
, the method blocks until some RRD file is closed.
- Parameters:
path
- Path to existing RRD file- Returns:
- reference for the give RRD file
- Throws:
IOException
- Thrown in case of I/O errorRrdException
- Thrown in case of JRobin specific error
-
requestRrdDb
public RrdDb requestRrdDb(RrdDef rrdDef) throws IOException, RrdException
Requests a RrdDb reference for the given RRD file definition object.- If the file with the path specified in the RrdDef object is already open, the method blocks until the file is closed.
- If the file is not already open and the number of already open RRD files is less than
INITIAL_CAPACITY
, a new RRD file will be created and a its RrdDb reference will be returned. If the file is not already open and the number of already open RRD files is equal toINITIAL_CAPACITY
, the method blocks until some RRD file is closed.
- Parameters:
rrdDef
- Definition of the RRD file to be created- Returns:
- Reference to the newly created RRD file
- Throws:
IOException
- Thrown in case of I/O errorRrdException
- Thrown in case of JRobin specific error
-
requestRrdDb
public RrdDb requestRrdDb(String path, String sourcePath) throws IOException, RrdException, RrdException
Requests a RrdDb reference for the given path. The file will be created from external data (from XML dump, RRD file or RRDTool's binary RRD file).- If the file with the path specified is already open, the method blocks until the file is closed.
- If the file is not already open and the number of already open RRD files is less than
INITIAL_CAPACITY
, a new RRD file will be created and a its RrdDb reference will be returned. If the file is not already open and the number of already open RRD files is equal toINITIAL_CAPACITY
, the method blocks until some RRD file is closed.
- Parameters:
path
- Path to RRD file which should be createdsourcePath
- Path to external data which is to be converted to JRobin's native RRD file format- Returns:
- Reference to the newly created RRD file
- Throws:
IOException
- Thrown in case of I/O errorRrdException
- Thrown in case of JRobin specific error
-
release
public void release(RrdDb rrdDb) throws IOException, RrdException
Releases RrdDb reference previously obtained from the pool. When a reference is released, its usage count is decremented by one. If usage count drops to zero, the underlying RRD file will be closed.- Parameters:
rrdDb
- RrdDb reference to be returned to the pool- Throws:
IOException
- Thrown in case of I/O errorRrdException
- Thrown in case of JRobin specific error
-
getCapacity
public int getCapacity()
Returns the maximum number of simultaneously open RRD files.- Returns:
- maximum number of simultaneously open RRD files
-
setCapacity
public void setCapacity(int capacity)
Sets the maximum number of simultaneously open RRD files.- Parameters:
capacity
- Maximum number of simultaneously open RRD files.
-
getOpenFiles
public String[] getOpenFiles()
Returns an array of open file names.- Returns:
- Array with canonical paths to open RRD files held in the pool.
-
getOpenFileCount
public int getOpenFileCount()
Returns the number of open RRD files.- Returns:
- Number of currently open RRD files held in the pool.
-
-