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

Updating Form content intermittently triggers email notification

    Details

    • Previous Issue Keys:

      Description

      Updating form content in Resources through Actions / Edit Content sometimes triggers an email notification of the type below (the standard updated resource notification).

      As the email notification option is not selectable anywhere in the UI when updating form content, and we haven't found any easy way to reproduce the behaviour, this seems to be an intermittent bug.


      A resource has been updated in the "emerge2008" site at Emerge2008 (http://emerge2008.net/portal)

      Location: site "emerge2008" > Resources > Presentations > Zooming into the landscape > Workshop: Connected Teacher Toolkit

        Gliffy Diagrams

          Activity

          Hide
          Stephen Marquard added a comment -

          The event logged for this action (editing content of a form) is content.revise, e.g.:

          269167 2008-07-10 19:17:06 content.revise /content/group/emerge2008/Presentations/zooming into the landscape/workshop 25c9f6ba-ebba-48f5-9645-ec63d08f04bc m emerge2008
          Show
          Stephen Marquard added a comment - The event logged for this action (editing content of a form) is content.revise, e.g.: 269167 2008-07-10 19:17:06 content.revise /content/group/emerge2008/Presentations/zooming into the landscape/workshop 25c9f6ba-ebba-48f5-9645-ec63d08f04bc m emerge2008
          Hide
          Stephen Marquard added a comment -

          Adding in a debug line in the event notification code shows the stack trace below for a notification from editing form content.

          The notification is checked in org.sakaiproject.content.tool.ResourcesAction.reviseContent(ResourcesAction.java:3715 which does:

          ContentHostingService.commitResource(edit, pipe.getNotification());

          ResourceHelperArtifactHome.java does not explicitly set the pipe notification settings, though from my reading of the code they should default to 0 (none). The only possibly fix I can think of for this is for ResourceHelperArtifactHome.java to set the notification settings explicitly.

          The inability to reproduce this consistently points to some form of concurrency / session state issue.

          INFO: Notification trace: (2008-07-11 13:58:53,191 http-8888-Processor20_org.sakaiproject.util.EmailNotification)
          java.lang.Throwable
          at org.sakaiproject.util.EmailNotification.reNotify(EmailNotification.java:182)
          at org.sakaiproject.util.EmailNotification.notify(EmailNotification.java:163)
          at org.sakaiproject.event.impl.BaseNotificationService$BaseNotification.notify(BaseNotificationService.java:1094)
          at org.sakaiproject.event.impl.BaseNotificationService.update(BaseNotificationService.java:607)
          at java.util.Observable.notifyObservers(Observable.java:142)
          at org.sakaiproject.event.impl.BaseEventTrackingService.notifyObservers(BaseEventTrackingService.java:125)
          at org.sakaiproject.event.impl.ClusterEventTracking.postEvent(ClusterEventTracking.java:255)
          at org.sakaiproject.event.impl.BaseEventTrackingService.post(BaseEventTrackingService.java:267)
          at org.sakaiproject.event.cover.EventTrackingService.post(EventTrackingService.java:129)
          at org.sakaiproject.content.impl.BaseContentService.commitResourceEdit(BaseContentService.java:5466)
          at org.sakaiproject.content.impl.BaseContentService.commitResource(BaseContentService.java:5413)
          at org.sakaiproject.content.cover.ContentHostingService.commitResource(ContentHostingService.java:519)
          at org.sakaiproject.content.tool.ResourcesAction.reviseContent(ResourcesAction.java:3715)
          at org.sakaiproject.content.tool.ResourcesAction.finishAction(ResourcesAction.java:7217)
          at org.sakaiproject.content.tool.ResourcesAction.buildMainPanelContext(ResourcesAction.java:4736)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:585)
          at org.sakaiproject.cheftool.VelocityPortletPaneledAction.toolModeDispatch(VelocityPortletPaneledAction.java:392)
          at org.sakaiproject.cheftool.ToolServlet.doGet(ToolServlet.java:227)
          at org.sakaiproject.cheftool.VelocityPortletPaneledAction.doGet(VelocityPortletPaneledAction.java:1005)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
          at org.sakaiproject.vm.ComponentServlet.service(ComponentServlet.java:56)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
          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:555)
          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:459)
          at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1209)
          at org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:165)
          at org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:88)
          at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:764)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
          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:592)
          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:174)
          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.coyote.http11.Http11Processor.process(Http11Processor.java:874)
          at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
          at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
          at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
          at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
          at java.lang.Thread.run(Thread.java:595)

          Show
          Stephen Marquard added a comment - Adding in a debug line in the event notification code shows the stack trace below for a notification from editing form content. The notification is checked in org.sakaiproject.content.tool.ResourcesAction.reviseContent(ResourcesAction.java:3715 which does: ContentHostingService.commitResource(edit, pipe.getNotification()); ResourceHelperArtifactHome.java does not explicitly set the pipe notification settings, though from my reading of the code they should default to 0 (none). The only possibly fix I can think of for this is for ResourceHelperArtifactHome.java to set the notification settings explicitly. The inability to reproduce this consistently points to some form of concurrency / session state issue. INFO: Notification trace: (2008-07-11 13:58:53,191 http-8888-Processor20_org.sakaiproject.util.EmailNotification) java.lang.Throwable at org.sakaiproject.util.EmailNotification.reNotify(EmailNotification.java:182) at org.sakaiproject.util.EmailNotification.notify(EmailNotification.java:163) at org.sakaiproject.event.impl.BaseNotificationService$BaseNotification.notify(BaseNotificationService.java:1094) at org.sakaiproject.event.impl.BaseNotificationService.update(BaseNotificationService.java:607) at java.util.Observable.notifyObservers(Observable.java:142) at org.sakaiproject.event.impl.BaseEventTrackingService.notifyObservers(BaseEventTrackingService.java:125) at org.sakaiproject.event.impl.ClusterEventTracking.postEvent(ClusterEventTracking.java:255) at org.sakaiproject.event.impl.BaseEventTrackingService.post(BaseEventTrackingService.java:267) at org.sakaiproject.event.cover.EventTrackingService.post(EventTrackingService.java:129) at org.sakaiproject.content.impl.BaseContentService.commitResourceEdit(BaseContentService.java:5466) at org.sakaiproject.content.impl.BaseContentService.commitResource(BaseContentService.java:5413) at org.sakaiproject.content.cover.ContentHostingService.commitResource(ContentHostingService.java:519) at org.sakaiproject.content.tool.ResourcesAction.reviseContent(ResourcesAction.java:3715) at org.sakaiproject.content.tool.ResourcesAction.finishAction(ResourcesAction.java:7217) at org.sakaiproject.content.tool.ResourcesAction.buildMainPanelContext(ResourcesAction.java:4736) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.sakaiproject.cheftool.VelocityPortletPaneledAction.toolModeDispatch(VelocityPortletPaneledAction.java:392) at org.sakaiproject.cheftool.ToolServlet.doGet(ToolServlet.java:227) at org.sakaiproject.cheftool.VelocityPortletPaneledAction.doGet(VelocityPortletPaneledAction.java:1005) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at org.sakaiproject.vm.ComponentServlet.service(ComponentServlet.java:56) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 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:555) 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:459) at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1209) at org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:165) at org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:88) at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(SkinnableCharonPortal.java:764) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 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:592) 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:174) 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.coyote.http11.Http11Processor.process(Http11Processor.java:874) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Thread.java:595)
          Hide
          David Horwitz added a comment -

          MAINTANCE TEAM: Unassigned so these get reviewed by the Maintance Team

          Show
          David Horwitz added a comment - MAINTANCE TEAM: Unassigned so these get reviewed by the Maintance Team
          Hide
          Greg Thomas added a comment -

          This worked fine for me on 2.9.0 and nightly. Resolving and closing as Cannot Reproduce.

          Show
          Greg Thomas added a comment - This worked fine for me on 2.9.0 and nightly. Resolving and closing as Cannot Reproduce.

            People

            • Assignee:
              Unassigned
              Reporter:
              Stephen Marquard
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development