|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||
java.lang.Objectorg.opennms.netmgt.rrd.QueuingRrdStrategy
public class QueuingRrdStrategy
Provides queuing implementation of RrdStrategy. In order to provide a more scalable collector. We created a queuing RrdStrategy that enabled the system to amortize the high cost of opening an round robin database across multiple updates. This RrdStrategy implementation enqueues the create and update operations on a per file basis and maintains a set of threads that process enqueued work file by file. If the I/O system can keep up with the collection threads while performing only a single update per file then eventually all the data is processed and the threads sleep until there is more work to do. If the I/O system is initially slower than than the collection threads then work will enqueue here and the write threads will get behind. As this happens each file will eventually have more than a single update enqueued and therefore the number of updates pushed thru the system will increase because more then one will be output per 'open' Eventually, the I/O system and the collection system will balance out. When this happens all data will be collected but will not be output to the rrd files until the next time the file is processed by the write threads. As another performance improving strategy. The queue distinguishes between files with significant vs insignificant updates. Files with only insignificant updates are put at the lowest priority and are only written when the highest priority updates have been written This implementation delegates all the actual writing to another RrdStrategy implementation. System properties effecting the operation: org.opennms.rrd.queuing.writethreads: (default 2) The number of rrd write threads that process the queue org.opennms.rrd.queuing.queueCreates: (default false) indicates whether rrd file creates should be queued or processed synchronously org.opennms.rrd.queuing.maxInsigUpdateSeconds: (default 0) the number of seconds over which all files with significant updates only should be promoted onto the significant less. This is to ensure they don't stay unprocessed forever. Zero means not promotion. org.opennms.rrd.queuing.modulus: (default 10000) the number of updates the get enqueued between statistics output org.opennms.rrd.queuing.category: (default "OpenNMS.Queued") the log category to place the statistics output in TODO: Promote files when ZeroUpdate operations can't be merged. This may be a collection miss which we want to push thru. It should also help with memory. TODO: Set an upper bound on enqueued operations TODO: Provide an event that will write data for a particular file... Say right before we try to graph it.
| Nested Class Summary | |
|---|---|
class |
QueuingRrdStrategy.CreateOperation
This class represents an operation to create an rrd file |
class |
QueuingRrdStrategy.UpdateOperation
Represents an update to a rrd file. |
class |
QueuingRrdStrategy.ZeroUpdateOperation
Represents an update whose value is 0. |
| Constructor Summary | |
|---|---|
QueuingRrdStrategy(RrdStrategy delegate)
|
|
| Method Summary | |
|---|---|
void |
addOperation(org.opennms.netmgt.rrd.QueuingRrdStrategy.Operation op)
Add an operation to the queue. |
void |
closeFile(Object rrd)
This closes the supplied round robin database |
Object |
createDefinition(String creator,
String directory,
String rrdName,
int step,
List<RrdDataSource> dataSources,
List<String> rraList)
Create a round robin database definition from the supplied parameters. |
Object |
createDefinition(String creator,
String directory,
String dsName,
int step,
String dsType,
int dsHeartbeat,
String dsMin,
String dsMax,
List<String> rraList)
|
void |
createFile(Object op)
Creates the round robin database defined by the supplied definition. |
InputStream |
createGraph(String command,
File workDir)
Creates an InputStream representing the bytes of a graph created from round robin data. |
RrdGraphDetails |
createGraphReturnDetails(String command,
File workDir)
Creates an RrdGraphDetails object representing the graph created from round robin data. |
void |
ensureThreadsStarted()
Ensure that we have threads started to process the queue. |
Double |
fetchLastValue(String rrdFile,
String ds,
int interval)
Fetches the last value from the round robin database with the given name. |
Double |
fetchLastValue(String rrdFile,
String ds,
String consolidationFunction,
int interval)
Fetches the last value from the round robin database with the given name. |
Double |
fetchLastValueInRange(String rrdFile,
String ds,
int interval,
int range)
Fetches the last value from the round robin database with the given name within a time range. |
long |
getCreatesCompleted()
|
String |
getDefaultFileExtension()
Get the file extension appropriate for files of this type |
RrdStrategy |
getDelegate()
|
long |
getDequeuedItems()
|
long |
getDequeuedOperations()
|
long |
getEnqueuedOperations()
|
long |
getErrors()
|
int |
getGraphLeftOffset()
Returns the number of pixels that the leftt-hand side of the graph is offset from the left side of the created image. |
int |
getGraphRightOffset()
Returns the number of pixels that the right-hand side of the graph is offset from the right side of the created image. |
int |
getGraphTopOffsetWithText()
Returns the number of pixels that the top of the graph is offset from the top of the created image if there is single line of header text. |
String |
getLapTime()
|
LinkedList<org.opennms.netmgt.rrd.QueuingRrdStrategy.Operation> |
getNext()
Get the operations for the next file that should be worked on. |
long |
getPromotionCount()
|
long |
getSignificantOpsCompleted()
|
long |
getSignificantOpsDequeued()
|
long |
getSignificantOpsEnqueued()
|
long |
getStartTime()
|
String |
getStats()
Print queue statistics. |
long |
getTotalOperationsPending()
|
long |
getUpdatesCompleted()
|
void |
graphicsInitialize()
This Initializes the graphics subsystem only. |
void |
initialize()
Initialize the appropriate round robin system |
void |
logStats()
|
org.opennms.netmgt.rrd.QueuingRrdStrategy.Operation |
makeCreateOperation(String fileName,
Object rrdDef)
|
org.opennms.netmgt.rrd.QueuingRrdStrategy.Operation |
makeUpdateOperation(String fileName,
String owner,
String update)
|
Object |
openFile(String fileName)
Opens the round robin database with the supplied name. |
void |
promoteEnqueuedFiles(Collection<String> rrdFiles)
In the event that this is a queuing implementation of the RrdStrategy. |
void |
run()
|
void |
setCreatesCompleted(long createsCompleted)
|
void |
setDequeuedItems(long dequeuedItems)
|
void |
setDequeuedOperations(long dequeuedOperations)
|
void |
setEnqueuedOperations(long enqueuedOperations)
|
void |
setErrors(long errors)
|
void |
setPromotionCount(long promotionCount)
|
void |
setSignificantOpsCompleted(long significantOpsCompleted)
|
void |
setSignificantOpsDequeued(long significantOpsDequeued)
|
void |
setSignificantOpsEnqueued(long significantOpsEnqueued)
|
void |
setStartTime(long updateStart)
|
void |
setTotalOperationsPending(long totalOperationsPending)
|
void |
setUpdatesCompleted(long updatesCompleted)
|
void |
updateFile(Object rrdFile,
String owner,
String data)
Updates the supplied round robin database with the given timestamp:value point |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public QueuingRrdStrategy(RrdStrategy delegate)
| Method Detail |
|---|
public org.opennms.netmgt.rrd.QueuingRrdStrategy.Operation makeCreateOperation(String fileName,
Object rrdDef)
public org.opennms.netmgt.rrd.QueuingRrdStrategy.Operation makeUpdateOperation(String fileName,
String owner,
String update)
public void addOperation(org.opennms.netmgt.rrd.QueuingRrdStrategy.Operation op)
public void ensureThreadsStarted()
public LinkedList<org.opennms.netmgt.rrd.QueuingRrdStrategy.Operation> getNext()
public void promoteEnqueuedFiles(Collection<String> rrdFiles)
RrdStrategy
promoteEnqueuedFiles in interface RrdStrategypublic RrdStrategy getDelegate()
public void closeFile(Object rrd)
throws Exception
RrdStrategy
closeFile in interface RrdStrategyrrd - an rrd object created using openFile
Exception - if an error occurs closing the file
public Object createDefinition(String creator,
String directory,
String dsName,
int step,
String dsType,
int dsHeartbeat,
String dsMin,
String dsMax,
List<String> rraList)
throws Exception
Exception
public Object createDefinition(String creator,
String directory,
String rrdName,
int step,
List<RrdDataSource> dataSources,
List<String> rraList)
throws Exception
RrdStrategy
createDefinition in interface RrdStrategycreator - -
A string representing who is creating this file for use in log
msgsdirectory - -
The directory to create the file inrrdName - -
The name to use for the round robin databasestep - -
the step for the databasedataSources - -
the data sources to use for round robin databaserraList - -
a List of the round robin archives to create in the database
Exception - If an error occurs while creating the definition
public void createFile(Object op)
throws Exception
RrdStrategy
createFile in interface RrdStrategyop - an round robin database definition created using the
createDefinition call.
Exception - if an error occurs create the file
public void initialize()
throws Exception
RrdStrategy
initialize in interface RrdStrategyException - if an Error occurs
public void graphicsInitialize()
throws Exception
RrdStrategy
graphicsInitialize in interface RrdStrategyException
public Object openFile(String fileName)
throws Exception
RrdStrategy
openFile in interface RrdStrategyfileName - the name of the associated rrd file
Exception - if an error occurs opening the file
public void updateFile(Object rrdFile,
String owner,
String data)
throws Exception
RrdStrategy
updateFile in interface RrdStrategyrrdFile - an rrd object created using openFileowner - the owner of the rrddata - a string of the form Exception - if an error occurs updating the file
public Double fetchLastValue(String rrdFile,
String ds,
int interval)
throws NumberFormatException,
RrdException
RrdStrategy
fetchLastValue in interface RrdStrategyrrdFile - a name the represents a round robin databaseds - a name the represents a data source to be usedinterval - a step interval of the round robin database
NumberFormatException
RrdException
public Double fetchLastValue(String rrdFile,
String ds,
String consolidationFunction,
int interval)
throws NumberFormatException,
RrdException
RrdStrategy
fetchLastValue in interface RrdStrategyrrdFile - a name the represents a round robin databaseds - a name the represents a data source to be usedinterval - a step interval of the round robin database
NumberFormatException
RrdException
public Double fetchLastValueInRange(String rrdFile,
String ds,
int interval,
int range)
throws NumberFormatException,
RrdException
RrdStrategy
fetchLastValueInRange in interface RrdStrategyrrdFile - a name the represents a round robin databaseds - a name the represents a data source to be usedinterval - a step interval of the round robin databaserange - an acceptable range for which the last value will be returned
NumberFormatException
RrdException
public InputStream createGraph(String command,
File workDir)
throws IOException,
RrdException
RrdStrategy
createGraph in interface RrdStrategycommand - the command needed to create the graphworkDir - the directory that all referenced files are relative to
IOException - if an IOError occurs
RrdException - if an RRD error occurspublic void run()
run in interface Runnablepublic String getStats()
getStats in interface RrdStrategypublic void logStats()
public String getLapTime()
public int getGraphLeftOffset()
RrdStrategy
getGraphLeftOffset in interface RrdStrategypublic int getGraphRightOffset()
RrdStrategy
getGraphRightOffset in interface RrdStrategypublic int getGraphTopOffsetWithText()
RrdStrategy
getGraphTopOffsetWithText in interface RrdStrategypublic String getDefaultFileExtension()
RrdStrategy
getDefaultFileExtension in interface RrdStrategy
public RrdGraphDetails createGraphReturnDetails(String command,
File workDir)
throws IOException,
RrdException
RrdStrategy
createGraphReturnDetails in interface RrdStrategycommand - the command needed to create the graphworkDir - the directory that all referenced files are relative to
IOException - if an IOError occurs
RrdException - if an RRD error occurspublic long getTotalOperationsPending()
public void setTotalOperationsPending(long totalOperationsPending)
public long getCreatesCompleted()
public void setCreatesCompleted(long createsCompleted)
public long getUpdatesCompleted()
public void setUpdatesCompleted(long updatesCompleted)
public long getErrors()
public void setErrors(long errors)
public long getPromotionCount()
public void setPromotionCount(long promotionCount)
public long getSignificantOpsEnqueued()
public void setSignificantOpsEnqueued(long significantOpsEnqueued)
public long getSignificantOpsDequeued()
public void setSignificantOpsDequeued(long significantOpsDequeued)
public long getEnqueuedOperations()
public void setEnqueuedOperations(long enqueuedOperations)
public long getDequeuedOperations()
public void setDequeuedOperations(long dequeuedOperations)
public long getDequeuedItems()
public void setDequeuedItems(long dequeuedItems)
public long getSignificantOpsCompleted()
public void setSignificantOpsCompleted(long significantOpsCompleted)
public long getStartTime()
public void setStartTime(long updateStart)
|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||