Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-68235

EVENT reminder emails intermittently fail to send prior to EVENT date.

XMLWordPrintable

      Issue Summary

      Event reminder notifications in WATCHED CALENDARS do not consistently fire. When adding a single user to the 'WHO' section when adding a new EVENT, these reminders fire off intermittently. When adding multiple users in the 'WHO' section, these EVENT reminders never fire off.

      NOTE: WATCHING the CALENDAR means that the user has ADDED the CALENDAR to their CALENDAR (user logs in, selects CALENDARS at the top, adds the newly created CALENDAR and turns on reminders for that calendar).

      Users that are simply watching the SPACE or PAGE that has an embedded CALENDAR only will NOT receive EVENT reminders when added to an EVENT on this CALENDAR.

      Steps to Reproduce

      Tested using Confluence 7.10.0 with TC 7.0.17. Some admins may also see the issue in Confluence 7.11.1 with TC 7.0.17.

      1. Install Confluence (latest) with TC (latest).
      2. User A creates a CALENDAR for a space. Setup the EVENT type reminder for 10 minutes (same with Custom EVENT types).
      3. User B logs in, navigates to CALENDARS, adds the new CALENDAR to their CALENDAR.
      4. User C does the same as User B.
      5. User A adds User B and C to the 'Who' section of the EVENT, both of which should be WATCHING the CALENDAR.
      6. Set an EVENT for 15 minutes in the future, end an hour later. Set a description.
      7. After saving the EVENT, you should see an reminder email fire after 5 minutes (not an add user or add event email).

      Expected Results

      The EVENT reminder is sent out to all who users who are WATCHING the CALENDAR and were added to the EVENT 10 minutes before the EVENT starts.

      Actual Results

      The EVENT reminders is not sent to anyone. For a single user, the EVENT reminder is sometimes sent, but is intermittent.

      The below NPE exception is thrown in the atlassian-confluence.log file, with DEBUG set on 'com.atlassian.confluence.extra.calendar3' under 'Logging & Profiling':

      2021-08-11 13:51:06,494 DEBUG [team-calendars-worker-0] [extra.calendar3.util.DefaultAsynchronousTaskExecutor] lambda$submit$0 Task com.atlassian.confluence.extra.calendar3.util.CalendarAsyncHelper$$Lambda$3240/1081781755@46fa4b8c spent 0ms in queue
      2021-08-11 13:51:06,496 DEBUG [team-calendars-worker-0] [extra.calendar3.util.ConditionalCallable] call Executing ConditionalCallable
      2021-08-11 13:51:06,502 ERROR [team-calendars-worker-0] [extra.calendar3.util.DefaultAsynchronousTaskExecutor] lambda$wrap$1 Exception happens on task execution:
      java.lang.NullPointerException
          at com.atlassian.confluence.extra.calendar3.calendarstore.event.transformers.SubCalendarEventSupportingInviteesTransformer.appendDescription(SubCalendarEventSupportingInviteesTransformer.java:163)
          at com.atlassian.confluence.extra.calendar3.calendarstore.event.transformers.SubCalendarEventSupportingInviteesTransformer.transform(SubCalendarEventSupportingInviteesTransformer.java:100)
          at com.atlassian.confluence.extra.calendar3.calendarstore.event.transformers.ReminderSubCalendarEventTransformer.transform(ReminderSubCalendarEventTransformer.java:58)
          at com.atlassian.confluence.extra.calendar3.notification.DefaultReminderEmailNotificationBuilder.composeReminderEventModel(DefaultReminderEmailNotificationBuilder.java:334)
          at com.atlassian.confluence.extra.calendar3.notification.DefaultReminderEmailNotificationBuilder.build(DefaultReminderEmailNotificationBuilder.java:126)
          at com.atlassian.confluence.extra.calendar3.notification.DefaultCalendarNotificationManager.createReminderEventNotification(DefaultCalendarNotificationManager.java:587)
          at com.atlassian.confluence.extra.calendar3.notification.DefaultCalendarNotificationManager.sendEventReminderNotification(DefaultCalendarNotificationManager.java:536)
          at com.atlassian.confluence.extra.calendar3.notification.DefaultCalendarNotificationManager.lambda$notifyReminderEvent$7(DefaultCalendarNotificationManager.java:393)
          at com.atlassian.confluence.extra.calendar3.util.ConditionalCallable.call(ConditionalCallable.java:37)
          at com.atlassian.confluence.extra.calendar3.util.CalendarAsyncHelper.lambda$null$1(CalendarAsyncHelper.java:51)
          at com.atlassian.sal.core.transaction.HostContextTransactionTemplate$1.doInTransaction(HostContextTransactionTemplate.java:21)
          at com.atlassian.sal.spring.component.SpringHostContextAccessor.lambda$doInTransaction$0(SpringHostContextAccessor.java:70)
          at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
          at com.atlassian.sal.spring.component.SpringHostContextAccessor.doInTransaction(SpringHostContextAccessor.java:68)
          at com.atlassian.confluence.spring.transaction.interceptor.ConfluenceSpringHostContextAccessor.access$001(ConfluenceSpringHostContextAccessor.java:21)
          at com.atlassian.confluence.spring.transaction.interceptor.ConfluenceSpringHostContextAccessor.lambda$doInTransaction$3(ConfluenceSpringHostContextAccessor.java:72)
          at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContextInternal(VCacheRequestContextManager.java:84)
          at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContext(VCacheRequestContextManager.java:68)
          at com.atlassian.confluence.spring.transaction.interceptor.ConfluenceSpringHostContextAccessor.doInTransaction(ConfluenceSpringHostContextAccessor.java:72)
          at com.atlassian.sal.core.transaction.HostContextTransactionTemplate.execute(HostContextTransactionTemplate.java:18)
          at sun.reflect.GeneratedMethodAccessor265.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:498)
          at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
          at com.sun.proxy.$Proxy264.execute(Unknown Source)
          at sun.reflect.GeneratedMethodAccessor265.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:498)
          at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
          at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
          at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
          at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:136)
          at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:124)
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
          at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
          at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
          at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
          at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:136)
          at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:124)
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
          at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
          at com.sun.proxy.$Proxy2729.execute(Unknown Source)
          at com.atlassian.confluence.extra.calendar3.util.CalendarAsyncHelper.lambda$doAsyncWithTransaction$2(CalendarAsyncHelper.java:49)
          at com.atlassian.confluence.extra.calendar3.util.DefaultAsynchronousTaskExecutor.lambda$wrap$1(DefaultAsynchronousTaskExecutor.java:87)
          at com.atlassian.confluence.extra.calendar3.util.DefaultAsynchronousTaskExecutor.lambda$submit$0(DefaultAsynchronousTaskExecutor.java:80)
          at com.atlassian.sal.core.executor.ThreadLocalDelegateCallable.call(ThreadLocalDelegateCallable.java:38)
          at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContextInternal(VCacheRequestContextManager.java:84)
          at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContext(VCacheRequestContextManager.java:68)
          at com.atlassian.confluence.vcache.VCacheRequestContextOperations.lambda$withRequestContext$1(VCacheRequestContextOperations.java:59)
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at java.lang.Thread.run(Thread.java:748)
      2021-08-11 13:51:06,503 ERROR [team-calendars-worker-0] [extra.calendar3.util.DefaultAsynchronousTaskExecutor] lambda$wrap$1 Exception in task submitted from thread team-calendars-worker-0 here:
      java.lang.Exception: Client stack trace
          at com.atlassian.confluence.extra.calendar3.util.DefaultAsynchronousTaskExecutor.clientTrace(DefaultAsynchronousTaskExecutor.java:97)
          at com.atlassian.confluence.extra.calendar3.util.DefaultAsynchronousTaskExecutor.lambda$submit$0(DefaultAsynchronousTaskExecutor.java:80)
          at com.atlassian.sal.core.executor.ThreadLocalDelegateCallable.call(ThreadLocalDelegateCallable.java:38)
          at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContextInternal(VCacheRequestContextManager.java:84)
          at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContext(VCacheRequestContextManager.java:68)
          at com.atlassian.confluence.vcache.VCacheRequestContextOperations.lambda$withRequestContext$1(VCacheRequestContextOperations.java:59)
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at java.lang.Thread.run(Thread.java:748)
      

      It may also throw the following error:

      2021-08-18 16:30:00,076 ERROR [team-calendars-worker-0] [extra.calendar3.util.DefaultAsynchronousTaskExecutor] lambda$wrap$1 Exception happens on task execution:
      java.lang.NullPointerException
      	at com.atlassian.confluence.extra.calendar3.calendarstore.event.transformers.SubCalendarEventSupportingInviteesTransformer.appendDescription(SubCalendarEventSupportingInviteesTransformer.java:163)
      

      Workaround

      Currently there is no known workaround for this behavior. A workaround will be added here when available.

              Unassigned Unassigned
              dmaye@atlassian.com David Maye
              Votes:
              19 Vote for this issue
              Watchers:
              30 Start watching this issue

                Created:
                Updated: