[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