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

        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: