[Building Sakai] is anyone using Samigo auto submit?

Karen Tsao ktsao at stanford.edu
Fri Feb 15 11:06:11 PST 2013


Hi Charles,

Actually we just notice the performance issue around two weeks ago. We are
going to add one more condition to the query:

sam_assessmentgrading_t.isautosubmit <> 1

I need more testing but I think this should increase the performance.

We implemented this as Quartz job because we expected it to run for a
while. However, at Stanford, the Quartz job doesn't take that long. Do you
have most data with SAM_PUBLISHEDACCESSCONTROL_T.autosubmit = 1? As it is
default to 0, do you think this change is made by instructors purposely or
your admin turn auto submission on in the default template (so all the
assessments created with auto submission =1, but instructors might not
actually need it)? We only have small portion of assessments with auto
submission on.

But, anyway, I think my above change should improve the performance. I will
let you know when I am done.

Thanks,
Karen


On Fri, Feb 15, 2013 at 5:10 AM, Hedrick Charles <hedrick at rutgers.edu>wrote:

> There's an option in Samigo to auto submit saved assessments at the due
> date. Is anyone using it? I tried turning it on, but the Quartz job to do
> the submit has been running for more than 12 hours so far. That might be OK
> if that's only the first time, but I see no reason to think it will do
> better next time. But it looks to me like it will process the same very
> large set of submissions each time:
>
> The test checks for
>     current time >= retract date
>     status not in 4,5
>     autosubmit = 1
>
> It shouldn't do anything unless forgrade != 1, and submitting sets it to
> 1, so it doesn't look like it will actually process anything twice, but it
> looks to me like each time it runs it will continue look at a huge number
> of assessments. In a system of our size I wonder whether this is practical.
>
> Here's a backtrace of what it's doing now. It looks to me like to be
> practical this job may need to be recoded in SQL, not hibernate.
>
> Main display <https://sakai-prod3.oirt.rutgers.edu/threads.jsp>
>
> "QuartzScheduler_Worker-1" Id=27 RUNNABLE
>
> java.lang.Class.getInterfaces(Native Method)
> org.hibernate.intercept.FieldInterceptionHelper.isInstrumented(FieldInterceptionHelper.java:27)
> org.hibernate.intercept.FieldInterceptionHelper.isInstrumented(FieldInterceptionHelper.java:38)
> org.hibernate.engine.EntityEntry.requiresDirtyCheck(EntityEntry.java:221)
> org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:118)
> org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
> org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
> org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:35)
> org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:970)
> org.hibernate.impl.SessionImpl.list(SessionImpl.java:1115)
> org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
> org.sakaiproject.tool.assessment.facade.ItemFacadeQueries$7.doInHibernate(ItemFacadeQueries.java:590)
> org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
> org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343)
> org.sakaiproject.tool.assessment.facade.ItemFacadeQueries.getItemTextId(ItemFacadeQueries.java:593)
> sun.reflect.GeneratedMethodAccessor10376.invoke(Unknown Source)
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> java.lang.reflect.Method.invoke(Method.java:597)
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> $Proxy98.getItemTextId(Unknown Source)
> org.sakaiproject.tool.assessment.services.ItemService.getItemTextId(ItemService.java:226)
> org.sakaiproject.tool.assessment.facade.AssessmentGradingFacadeQueries.saveItemGradingData(AssessmentGradingFacadeQueries.java:3155)
> org.sakaiproject.tool.assessment.facade.AssessmentGradingFacadeQueries.completeItemGradingData(AssessmentGradingFacadeQueries.java:3128)
> org.sakaiproject.tool.assessment.facade.AssessmentGradingFacadeQueries.autoSubmitAssessments(AssessmentGradingFacadeQueries.java:2845)
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> java.lang.reflect.Method.invoke(Method.java:597)
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> $Proxy102.autoSubmitAssessments(Unknown Source)
> org.sakaiproject.tool.assessment.services.GradingService.autoSubmitAssessments(GradingService.java:2003)
> org.sakaiproject.tool.assessment.services.AutoSubmitAssessmentsJob.execute(AutoSubmitAssessmentsJob.java:84)
> org.sakaiproject.component.app.scheduler.jobs.SpringJobBeanWrapper.execute(SpringJobBeanWrapper.java:70)
> org.quartz.core.JobRunShell.run(JobRunShell.java:202)
> org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)
>
> Main display <https://sakai-prod3.oirt.rutgers.edu/threads.jsp>
>                                    Kill thread<https://sakai-prod3.oirt.rutgers.edu/threads.jsp?kill=27>
>
> _______________________________________________
> sakai-dev mailing list
> sakai-dev at collab.sakaiproject.org
> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>
> TO UNSUBSCRIBE: send email to
> sakai-dev-unsubscribe at collab.sakaiproject.org with a subject of
> "unsubscribe"
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20130215/8fa27637/attachment.html 


More information about the sakai-dev mailing list