Hi Anjana,

This [1] happens when we schedule tasks with different tenants. When I dug
deep I saw that tasks try to update its state to FINISH state using
TriggerListeners. I believe this is where the problem is. It seems the last
registered listener is getting notified for all the tasks. I think it is
because we are not using a matcher, the registered listener receives events
for all the triggers [2].

Therefore, I changed the code as in the attached diff and I could not
observe the issue any more. When I debugged I could see that all the task's
states are getting updated properly. Can you please help us on this matter ?

[1]

org.wso2.carbon.ntask.common.TaskException: The task 'super_tenent' does
not exist
at
org.wso2.carbon.ntask.core.impl.RegistryBasedTaskRepository.getTaskMetadataPropResource(RegistryBasedTaskRepository.java:310)
at
org.wso2.carbon.ntask.core.impl.RegistryBasedTaskRepository.setTaskMetadataProp(RegistryBasedTaskRepository.java:323)
at org.wso2.carbon.ntask.core.TaskUtils.setTaskState(TaskUtils.java:109)
at org.wso2.carbon.ntask.core.TaskUtils.setTaskFinished(TaskUtils.java:146)
at
org.wso2.carbon.ntask.core.impl.AbstractQuartzTaskManager$TaskTriggerListener.triggerComplete(AbstractQuartzTaskManager.java:424)
at
org.quartz.core.QuartzScheduler.notifyTriggerListenersComplete(QuartzScheduler.java:1876)
at
org.quartz.core.JobRunShell.notifyTriggerListenersComplete(JobRunShell.java:377)
at org.quartz.core.JobRunShell.run(JobRunShell.java:254)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by:
*org.wso2.carbon.registry.core.exceptions.ResourceNotFoundException*:
Resource does not exist at path
/_system/governance/repository/components/org.wso2.carbon.tasks/definitions/1/ESB_TASK/super_tenent
at
org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.get(EmbeddedRegistry.java:532)
at
org.wso2.carbon.registry.core.caching.CacheBackedRegistry.getGhostResourceFromCache(CacheBackedRegistry.java:194)
at
org.wso2.carbon.registry.core.caching.CacheBackedRegistry.get(CacheBackedRegistry.java:167)
at
org.wso2.carbon.registry.core.session.UserRegistry.getInternal(UserRegistry.java:613)
at
org.wso2.carbon.registry.core.session.UserRegistry.access$400(UserRegistry.java:60)
at
org.wso2.carbon.registry.core.session.UserRegistry$5.run(UserRegistry.java:596)
at
org.wso2.carbon.registry.core.session.UserRegistry$5.run(UserRegistry.java:593)
at java.security.AccessController.doPrivileged(Native Method)
at
org.wso2.carbon.registry.core.session.UserRegistry.get(UserRegistry.java:593)
at
org.wso2.carbon.ntask.core.impl.RegistryBasedTaskRepository.getTaskMetadataPropResource(RegistryBasedTaskRepository.java:306)
... 12 more

[2]
http://quartz-scheduler.org/api/2.2.0/org/quartz/ListenerManager.html#addTriggerListener(org.quartz.TriggerListener)

-- 
Regards,
*Shafreen*
Software Engineer
WSO2 Inc
Mobile : 077-556-395-1
diff --git 
a/components/ntask/org.wso2.carbon.ntask.core/src/main/java/org/wso2/carbon/ntask/core/impl/AbstractQuartzTaskManager.java
 
b/components/ntask/org.wso2.carbon.ntask.core/src/main/java/org/wso2/carbon/ntask/core/impl/AbstractQuartzTaskManager.java
index 8bc2521..56eddce 100644
--- 
a/components/ntask/org.wso2.carbon.ntask.core/src/main/java/org/wso2/carbon/ntask/core/impl/AbstractQuartzTaskManager.java
+++ 
b/components/ntask/org.wso2.carbon.ntask.core/src/main/java/org/wso2/carbon/ntask/core/impl/AbstractQuartzTaskManager.java
@@ -20,6 +20,7 @@ import org.apache.commons.logging.LogFactory;
 import org.quartz.*;
 import org.quartz.Trigger.TriggerState;
 import org.quartz.impl.matchers.GroupMatcher;
+import org.quartz.impl.matchers.KeyMatcher;
 import org.quartz.spi.OperableTrigger;
 import org.wso2.carbon.context.PrivilegedCarbonContext;
 import org.wso2.carbon.ntask.common.TaskConstants;
@@ -53,11 +54,6 @@ public abstract class AbstractQuartzTaskManager implements 
TaskManager {
     public AbstractQuartzTaskManager(TaskRepository taskRepository) throws 
TaskException {
         this.taskRepository = taskRepository;
         this.scheduler = TasksDSComponent.getScheduler();
-        try {
-            this.getScheduler().getListenerManager().addTriggerListener(new 
TaskTriggerListener(TASK_TRIGGER_LISTENER_NAME)) ;
-        } catch (SchedulerException e) {
-            throw new TaskException("Error in initiating task trigger 
listener", Code.UNKNOWN, e);
-        }
     }
 
     public TaskRepository getTaskRepository() {
@@ -206,6 +202,15 @@ public abstract class AbstractQuartzTaskManager implements 
TaskManager {
         JobDetail job = JobBuilder.newJob(jobClass).withIdentity(taskName, 
taskGroup).usingJobData(
                 this.getJobDataMapFromTaskInfo(taskInfo)).build();
         Trigger trigger = this.getTriggerFromInfo(taskName, taskGroup, 
taskInfo.getTriggerInfo());
+
+        try {
+            KeyMatcher<TriggerKey> matcher = 
KeyMatcher.keyEquals(trigger.getKey());
+            this.getScheduler().getListenerManager().addTriggerListener(
+                    new TaskTriggerListener(trigger.getKey().getGroup() + 
trigger.getKey().getName()), matcher);
+        } catch (SchedulerException e) {
+            throw new TaskException("Error in initiating task trigger 
listener", Code.UNKNOWN, e);
+        }
+
         try {
             this.getScheduler().scheduleJob(job, trigger);
             if (paused) {

_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to