Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-74410

Duplicated Slack notifications

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • High
    • None
    • 8.20.10
    • Data Center - Apps
    • None

    Description

      Issue Summary

      Jira Server for Slack (Official) app started to send duplicate notifications after 2022-10-14 without any configuration changes made.

      This is reproducible on Data Center: yes

      Steps to Reproduce

      1. Have Jira send a Slack notification.

      Expected Results

      A single Slack notification is shown.

      Actual Results

      Duplicated Slack notifications are shown.

      The application logs will show the following errors:

      2022-10-14 10:22:38,231+0000 jira-slack-plugin:thread-5 WARN xxxxxx 578x6850920x11 quxdfr xxxxxxxxxxxxxx /secure/AjaxIssueAction.jspa [c.a.p.slack.util.ResponseMapper] Error when performing request to Slack: chat.postMessage/G0186MULC7R
      com.google.gson.JsonParseException: Unsupported layout block type: rich_text
          at com.github.seratch.jslack.common.json.GsonLayoutBlockFactory.getLayoutClassInstance(GsonLayoutBlockFactory.java:36)
          at com.github.seratch.jslack.common.json.GsonLayoutBlockFactory.deserialize(GsonLayoutBlockFactory.java:19)
          at com.github.seratch.jslack.common.json.GsonLayoutBlockFactory.deserialize(GsonLayoutBlockFactory.java:12)
          at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69)
          at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
          at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
          at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
          at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
          at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
          at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
          at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
          at com.google.gson.Gson.fromJson(Gson.java:963)
          at com.google.gson.Gson.fromJson(Gson.java:928)
          at com.google.gson.Gson.fromJson(Gson.java:877)
          at com.google.gson.Gson.fromJson(Gson.java:848)
          at com.github.seratch.jslack.common.http.SlackHttpClient.parseJsonResponse(SlackHttpClient.java:81)
          at com.github.seratch.jslack.api.methods.impl.MethodsClientImpl.doPostFormWithToken(MethodsClientImpl.java:913)
          at com.github.seratch.jslack.api.methods.impl.MethodsClientImpl.chatPostMessage(MethodsClientImpl.java:304)
          at com.atlassian.plugins.slack.api.client.DefaultSlackClient.lambda$postMessage$23(DefaultSlackClient.java:494)
          at com.atlassian.plugins.slack.util.ResponseMapper.toEither(ResponseMapper.java:25)
          at com.atlassian.plugins.slack.api.client.DefaultSlackClient.postMessage(DefaultSlackClient.java:492)
          at com.atlassian.jira.plugins.slack.service.task.impl.SendNotificationTask.lambda$null$0(SendNotificationTask.java:89)
          at java.base/java.util.Optional.flatMap(Optional.java:294)
          at com.atlassian.plugins.slack.api.client.RetryLoaderHelper.lambda$retryWithUserTokens$1(RetryLoaderHelper.java:25)
          at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
          at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
          at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
          at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
          at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
          at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
          at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
          at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
          at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
          at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543)
          at com.atlassian.plugins.slack.api.client.RetryLoaderHelper.retryWithUserTokens(RetryLoaderHelper.java:26)
          at com.atlassian.jira.plugins.slack.service.task.impl.SendNotificationTask.lambda$call$1(SendNotificationTask.java:87)
          at com.atlassian.jira.plugins.slack.service.task.impl.DefaultTaskExecutorService.lambda$submitTask$1(DefaultTaskExecutorService.java:94)
          at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
          at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57)
          at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
          at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
          at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
          at java.base/java.lang.Thread.run(Thread.java:829)
      

      Workaround

      A new version of the Jira Server for Slack (Official) was released with a hotfix for this issue (version 3.0.2)

      Note that this version will still show errors in the logs but it will prevent duplicate messages until a permanent fix is delivered.

      Notes

      Investigation done by the development team shows Slack's chat.postMessage REST method suddenly started returning blocks that include rich_text, which is undocumented and not properly handled by the Jira Server for Slack app, causing duplicate notifications.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              vfontes Vinicius Fontes
              Votes:
              39 Vote for this issue
              Watchers:
              60 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: