Uploaded image for project: 'Sakai'
  1. Sakai
  2. SAK-43853

Assignments > Grader > Assigning resubmission then leaving grader breaks the submission

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Verified
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 20.0, 21.0, 22.0 [Tentative]
    • Fix Version/s: 20.2, 21.0, 22.0 [Tentative]
    • Component/s: WC Sakai Grader
    • Labels:
      None
    • 20 status:
      Verified
    • Test Plan:
      Hide
      1. Create and publish an assignment which does not allow resubmissions
      2. As a student, submit something to the assignment
      3. As instructor, view the submission from the previous step in the new Grader UI
      4. Select "Allow Resubmission", and select a value from the drop down (selected date does not matter)
      5. Click "Save", then click "Return to List"
      6. With the "Use new Grader to grade submissions" checkbox checked, click on the student who was granted a resubmission
        1. PASS: the new grader UI loads the submission
        2. FAIL: the list is refreshed, stack trace produced in the logs
      7. With the "Use new Grader to grade submissions" checkbox unchecked (using the old grading UI), click on the student who was granted a resubmission
        1. PASS: the old grader UI loads the submission
        2. FAIL: the list is refreshed, stack trace produced in the logs
      Show
      Create and publish an assignment which does not allow resubmissions As a student, submit something to the assignment As instructor, view the submission from the previous step in the new Grader UI Select "Allow Resubmission", and select a value from the drop down (selected date does not matter) Click "Save", then click "Return to List" With the "Use new Grader to grade submissions" checkbox checked, click on the student who was granted a resubmission PASS : the new grader UI loads the submission FAIL : the list is refreshed, stack trace produced in the logs With the "Use new Grader to grade submissions" checkbox unchecked (using the old grading UI), click on the student who was granted a resubmission PASS : the old grader UI loads the submission FAIL : the list is refreshed, stack trace produced in the logs

      Description

      After granting a resubmission to any user and then leaving the grader, you are no longer able to view the original submission using either the new grader (directly), nor the old grader. You'll find an exception in the logs similar to the following:

      25-Jun-2020 09:53:15.902 WARN [http-nio-20013-exec-37] org.sakaiproject.cheftool.VelocityPortletPaneledAction.actionDispatch Exception calling method doGrade_submission java.lang.reflect.InvocationTargetException (Caused by java.lang.NumberFormatException: For input string: "undefined")
      java.lang.reflect.InvocationTargetException
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.sakaiproject.cheftool.VelocityPortletPaneledAction.actionDispatch(VelocityPortletPaneledAction.java:767)
      	at org.sakaiproject.cheftool.VelocityPortletPaneledAction.processAction(VelocityPortletPaneledAction.java:576)
      	at org.sakaiproject.cheftool.ToolServlet.doGet(ToolServlet.java:228)
      	at org.sakaiproject.cheftool.VelocityPortletPaneledAction.doGet(VelocityPortletPaneledAction.java:1193)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
      	at org.sakaiproject.vm.ComponentServlet.service(ComponentServlet.java:56)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
      	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
      	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352)
      	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
      	at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:508)
      	at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1500)
      	at org.sakaiproject.portal.charon.handlers.SiteHandler.doToolBuffer(SiteHandler.java:1254)
      	at org.sakaiproject.portal.charon.handlers.SiteHandler.bufferContent(SiteHandler.java:1088)
      	at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:499)
      	at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:275)
      	at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:163)
      	at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:857)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
      	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
      	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
      	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
      	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
      	at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:679)
      	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
      	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
      	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
      	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
      	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
      	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)
      	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      	at java.lang.Thread.run(Thread.java:748)
      Caused by: java.lang.NumberFormatException: For input string: "undefined"
      	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
      	at java.lang.Long.parseLong(Long.java:589)
      	at java.lang.Long.parseLong(Long.java:631)
      	at org.sakaiproject.assignment.tool.AssignmentAction.assignment_resubmission_option_into_state(AssignmentAction.java:13523)
      	at org.sakaiproject.assignment.tool.AssignmentAction.putSubmissionInfoIntoState(AssignmentAction.java:9783)
      	at org.sakaiproject.assignment.tool.AssignmentAction.doGrade_submission(AssignmentAction.java:9719)
      	... 55 more
      

      Interestingly, if you have the box checked to use the new grader, and select a student from the list who has not been granted a resumbission, then use the navigation controls within the new grader to navigate to the student who was granted a resubmission, the stack trace does not occur. However, in that case the number of resubmissions granted is not reflected in the UI (this is reported in SAK-43854).

      The only workaround the user has is to use the new Grader UI to view another student, then navigate to the affected student, deselect "Allow Resubmission", then "Save". This removes the bad data causing the NumberFormatException and you can then use both the new and old grader directly on this submission.

        Gliffy Diagrams

          Zeplin

            Attachments

              Issue Links

                Activity

                  People

                  Assignee:
                  a.fish@lancaster.ac.uk Adrian Fish
                  Reporter:
                  bjones86 Brian Jones
                  Votes:
                  0 Vote for this issue
                  Watchers:
                  6 Start watching this issue

                    Dates

                    Created:
                    Updated:
                    Resolved:

                      Git Integration