click here for details... Sakai Executive Director Position Search now open
Issue Details (XML | Word | Printable)

Key: SAK-16921
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Blocker Blocker
Assignee: Zhen Qian
Reporter: David Horwitz
Votes: 0
Watchers: 3
Operations

If you were logged in you would be able to see more operations.
Sakai

NPE from assignments leads to corrupt state

Created: 03-Sep-2009 04:54   Updated: 29-Sep-2009 06:28
Component/s: Assignments
Affects Version/s: 2.6.x
Fix Version/s: 2.6.1

Time Tracking:
Not Specified

File Attachments: None
Image Attachments:

1. screenshot-1.jpg
(213 kB)

2. screenshot-2.jpg
(195 kB)

2.6.x Status: Closed
2.5.x Status: None
2.4.x Status: None


 Description  « Hide
affexts 2.6.x currently - introduced by a fairly recent merge:

"i tried to set up a new assignment "Assignment 6". when i choose
"non-electronic" the "number of submissions" drop down box went away - i
thought this was strange because this never happened before. anyway, i
added a description of "..." and chose to create a gradebook entry. when
i then tried to create the assignment it told me i was missing a model
answer (the message flashed by very quickly so i tried to create the
assignment a few times) ... i then tried to create a dummy model answer
and that did not work either."

In the log the following NPE is seen:

2009-09-03 10:49:17,312 WARN TP-Processor209 org.sakaiproject.cheftool.VelocityPortletPaneledAction - Exception calling method doAssignment_form java.lang.reflect.InvocationTargetException (Caused by java.lang.NullPointerException)
java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor8545.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:592)
        at org.sakaiproject.cheftool.VelocityPortletPaneledAction.actionDispatch(VelocityPortletPaneledAction.java:600)
        at org.sakaiproject.cheftool.VelocityPortletPaneledAction.processAction(VelocityPortletPaneledAction.java:516)
        at org.sakaiproject.cheftool.ToolServlet.doGet(ToolServlet.java:221)
        at org.sakaiproject.cheftool.VelocityPortletPaneledAction.doGet(VelocityPortletPaneledAction.java:1014)
        at org.sakaiproject.cheftool.ToolServlet.doPost(ToolServlet.java:151)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at org.sakaiproject.vm.ComponentServlet.service(ComponentServlet.java:56)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:565)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:364)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
        at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:475)
        at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1216)
        at org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:188)
        at org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:93)
        at org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:70)
        at org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1059)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:616)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NullPointerException
        at org.sakaiproject.assignment.tool.AssignmentAction.change_resubmit_option(AssignmentAction.java:5205)
        at org.sakaiproject.assignment.tool.AssignmentAction.postOrSaveAssignment(AssignmentAction.java:4801)
        at org.sakaiproject.assignment.tool.AssignmentAction.doPost_assignment(AssignmentAction.java:4660)
        at org.sakaiproject.assignment.tool.AssignmentAction.doAssignment_form(AssignmentAction.java:7118)
        ... 46 more

 All   Comments   Work Log   Change History   Subversion Commits   git Commits      Sort Order: Ascending order - Click to sort in descending order

Stephen Marquard added a comment - 03-Sep-2009 06:19
Screenshot showing results

Stephen Marquard added a comment - 03-Sep-2009 06:45
If one sorts the assignments by title, then you end up with a set of assignments which are incompletely created and in Draft state, and the regular assignments.

The velocity display error, viz.

0-$assignment.getContent().getMaxGradePointDisplay()

then goes away (though this only shows for the incomplete assignments in the unsorted view).

Zhen Qian added a comment - 03-Sep-2009 08:10
Found the problem with 2-6-x. Even though I cannot repeat this same problem from trunk code, I put in the null value check there also just in case. r66270

Merged into 2-6-x in r66271


Zhen Qian added a comment - 03-Sep-2009 08:28
As for removing the incomplete assignments, one need to remove the corresponding record from the sakai_locks table first. Find the proper locks by usage_session_id, and remove the lock. After that, one can remove the assignment from the UI.

The lock was generated by the NullPointerException which broke the assignment creation process. Simply remove the assignment from assignment_assignment table (one can get the assignment id by look at the html source code) won't remove the lock itself.


Stephen Marquard added a comment - 03-Sep-2009 12:02
Zhen, thank you for the very rapid fix. I can confirm that this resolves the issue on our 2-6-x test server.

Jean-François Lévêque added a comment - 15-Sep-2009 02:37
Closing base on Stephen's comment