ramc 01/03/15 09:10:07
Modified: src/java/org/apache/cornerstone/blocks/scheduler
DefaultTimeScheduler.xinfo
DefaultTimeScheduler.java
Log:
Patch for TimeScheduler block. This should fix the problem with timeout when the
trigger is rescheduled.
Revision Changes Path
1.2 +1 -0
jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/blocks/scheduler/DefaultTimeScheduler.xinfo
Index: DefaultTimeScheduler.xinfo
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/blocks/scheduler/DefaultTimeScheduler.xinfo,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultTimeScheduler.xinfo 2001/02/22 07:52:16 1.1
+++ DefaultTimeScheduler.xinfo 2001/03/15 17:10:01 1.2
@@ -6,6 +6,7 @@
<contributors>
<author name="Peter Donald" email="[EMAIL PROTECTED]"/>
+ <patcher name="Ram Chidambaram" email="[EMAIL PROTECTED]"/>
</contributors>
</meta>
1.2 +37 -9
jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/blocks/scheduler/DefaultTimeScheduler.java
Index: DefaultTimeScheduler.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-cornerstone/src/java/org/apache/cornerstone/blocks/scheduler/DefaultTimeScheduler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultTimeScheduler.java 2001/02/22 07:52:16 1.1
+++ DefaultTimeScheduler.java 2001/03/15 17:10:03 1.2
@@ -24,6 +24,7 @@
* Default implementation of TimeScheduler service.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Ram Chidambaram</a>
*/
public class DefaultTimeScheduler
extends AbstractLoggable
@@ -86,6 +87,7 @@
//use the kill-o-matic against any entry with same name
final TimeScheduledEntry entry = getEntry( name );
entry.invalidate();
+ m_entries.remove( name );
}
/**
@@ -109,16 +111,30 @@
* @param timeEntry the entry
* @param clone true if new entry is to be created
*/
- protected void rescheduleEntry( final TimeScheduledEntry timeEntry, final
boolean clone )
+ protected void rescheduleEntry( final TimeScheduledEntry timeEntry,
+ final boolean clone )
{
TimeScheduledEntry entry = timeEntry;
if( clone )
{
- entry = new TimeScheduledEntry( timeEntry.getName(),
- timeEntry.getTimeTrigger(),
- timeEntry.getTarget() );
- timeEntry.invalidate();
+ try
+ {
+ entry = new TimeScheduledEntry( timeEntry.getName(),
+
timeEntry.getTimeTrigger().getClone(),
+ timeEntry.getTarget() );
+ timeEntry.invalidate();
+
+ // remove old refernce to the entry..so that next time
+ // somebody calls getEntry( name ), we will get the new valid entry.
+ m_entries.remove( timeEntry.getName() );
+ m_entries.put( timeEntry.getName(), entry );
+ }
+ catch( final CloneNotSupportedException cnse )
+ {
+ //not sure what to do with this....
+ //but this should never happen as interface TimeTrigger is
Cloneable.
+ }
}
//reschedule if appropriate
@@ -191,8 +207,22 @@
if( !m_priorityQueue.isEmpty() )
{
- final TimeScheduledEntry entry =
+ TimeScheduledEntry entry =
(TimeScheduledEntry)m_priorityQueue.peek();
+
+ //if job has been invalidated then remove it and continue
+ while( !entry.isValid() )
+ {
+ m_priorityQueue.pop();
+
+ if ( m_priorityQueue.isEmpty() ) break;
+
+ entry = (TimeScheduledEntry)m_priorityQueue.peek();
+ }
+
+ if ( m_priorityQueue.isEmpty() )
+ continue;
+
duration = entry.getNextTime() - System.currentTimeMillis();
if( 0 == duration )
@@ -209,9 +239,6 @@
//and run it
m_priorityQueue.pop();
- //if job has been invalidated then remove it and continue
- if( !entry.isValid() ) continue;
-
runEntry( entry );
rescheduleEntry( entry, false );
@@ -224,6 +251,7 @@
//top of heap
try { synchronized( m_monitor ) { m_monitor.wait( duration ); } }
catch( final InterruptedException ie ) { }
+
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]