[cvs] expresso commit by mtraum: make EventHandler throttling
configurable
JCorporate Ltd
jcorp at jcorporate.com
Tue Apr 12 04:22:26 UTC 2005
Log Message:
-----------
make EventHandler throttling configurable
Modified Files:
--------------
expresso/expresso-web/expresso/doc/edg:
event.xml
expresso/expresso-web/expresso/doc:
ChangeLog.xml
expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/misc:
EventHandler.java
expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core:
ExpressoSchema.java
Revision Data
-------------
Index: event.xml
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc/edg/event.xml,v
retrieving revision 1.15
retrieving revision 1.16
diff -Lexpresso-web/expresso/doc/edg/event.xml -Lexpresso-web/expresso/doc/edg/event.xml -u -r1.15 -r1.16
--- expresso-web/expresso/doc/edg/event.xml
+++ expresso-web/expresso/doc/edg/event.xml
@@ -277,6 +277,41 @@
that is being developed.
</para>
</sect2>
+ <sect2>
+ <title>Controlling the Rate at which Emails are Sent</title>
+
+ <para>The EventHandler throttles the rate at which emails are sent out
+ to minimize the impact on the system load. Two Setup values exist to
+ control this rate:<table>
+ <title>Event Handler Setup Values</title>
+
+ <tgroup cols="2">
+ <colspec align="center" />
+
+ <thead>
+ <row>
+ <entry align="center">Setup Code</entry>
+
+ <entry align="center">Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>EventHandler.BatchSize</entry>
+
+ <entry>The number of event emails to send at a time</entry>
+ </row>
+
+ <row>
+ <entry>EventHandler.TimeBetweenBatch</entry>
+
+ <entry>Seconds to sleep between email batches</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table></para>
+ </sect2>
</sect1>
<sect1>
<title>Conclusion</title>
Index: ChangeLog.xml
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc/ChangeLog.xml,v
retrieving revision 1.300
retrieving revision 1.301
diff -Lexpresso-web/expresso/doc/ChangeLog.xml -Lexpresso-web/expresso/doc/ChangeLog.xml -u -r1.300 -r1.301
--- expresso-web/expresso/doc/ChangeLog.xml
+++ expresso-web/expresso/doc/ChangeLog.xml
@@ -6,6 +6,13 @@
<project name="Expresso">
<version name="5.6.1" releaseDate="Not released yet">
<comment>Continued Updates</comment>
+ <new-feature title="Added ability to set how quickly Event emails are sent out">
+ <explanation>The EventHandler throttles the rate at which emails are sent out to minimize the impact on the system load. Previously, these
+ values were hardcoded to send out 5 emails and then wait 30 seconds. Now, the defaults are 10 emails, waiting 2 seconds in between. These values
+ are configurable through the Setup values "EventHandler.BatchSize" and "EventHandler.TimeBetweenBatch".
+ </explanation>
+ <contributor>Mike Traum</contributor>
+ </new-feature>
<bug-fix title="NPE in Controller.newState() if external State does not call setResponse()">
<explanation>When transitioning between external states if State.setResponse() is not called, a NPE can be throwed in Controller.newState()</explanation>
<contributor>Raul Davidovich</contributor>
Index: EventHandler.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/misc/EventHandler.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/core/misc/EventHandler.java -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/core/misc/EventHandler.java -u -r1.20 -r1.21
--- expresso-web/WEB-INF/src/com/jcorporate/expresso/core/misc/EventHandler.java
+++ expresso-web/WEB-INF/src/com/jcorporate/expresso/core/misc/EventHandler.java
@@ -73,6 +73,8 @@
import com.jcorporate.expresso.core.registry.ExpressoThread;
import com.jcorporate.expresso.core.security.User;
import com.jcorporate.expresso.services.dbobj.Event;
+import com.jcorporate.expresso.services.dbobj.Setup;
+
import org.apache.log4j.Logger;
import java.util.Vector;
@@ -99,7 +101,12 @@
* Don't process more than a certain number of Event entries, it slows
* the system down too much
*/
- private static int maxWrites = 5;
+ private int maxWrites = 10;
+
+ /**
+ * The amount of time to sleep between maxWrites intervals
+ */
+ private int sleepTimeBetweenWrites = 2;
/**
* How long to sleep between checking the queue
@@ -176,8 +183,10 @@
writeCount++;
- if (writeCount > maxWrites) {
- break;
+ if (writeCount >= maxWrites) {
+ yield();
+ sleep(sleepTimeBetweenWrites * 1000);
+ writeCount = 0;
}
} /* for each queue entry */
@@ -265,7 +274,17 @@
*/
public void run() {
super.run();
- log.info("Event Handler starts");
+ try {
+ maxWrites = Integer.parseInt(Setup.getValue("EventHandler.BatchSize"));
+ sleepTimeBetweenWrites = Integer.parseInt(Setup.getValue("EventHandler.TimeBetweenBatch"));
+ }
+ catch (DBException e) {
+ log.warn("Error retrieving EventHandler setup values. Using defaults.");
+ }
+ catch (NumberFormatException e) {
+ log.warn("EventHandler setup values are not numbers. Using defaults.");
+ }
+ log.info("Event Handler starts with BatchSize="+maxWrites+" and TimeBetweenBatch="+sleepTimeBetweenWrites);
try {
while (true) {
if (idleTimes >= maxIdleTimes) {
Index: ExpressoSchema.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/ExpressoSchema.java,v
retrieving revision 1.55
retrieving revision 1.56
diff -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/core/ExpressoSchema.java -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/core/ExpressoSchema.java -u -r1.55 -r1.56
--- expresso-web/WEB-INF/src/com/jcorporate/expresso/core/ExpressoSchema.java
+++ expresso-web/WEB-INF/src/com/jcorporate/expresso/core/ExpressoSchema.java
@@ -455,6 +455,10 @@
addSetup("AsyncNumThreads", "Number of aysnc handling threads", "10");
addSetup("AsyncQueueSize", "Size of queue for waiting async processes.", "20");
+
+ // EventHandler setup values
+ addSetup("EventHandler.BatchSize", "The number of event emails to send at a time (used minimize performance impact)", "10");
+ addSetup("EventHandler.TimeBetweenBatch", "Seconds to sleep between email batches (used minimize performance impact)", "2");
}
}
More information about the cvs
mailing list