Uploaded image for project: 'Jira Cloud'
  1. Jira Cloud
  2. JRACLOUD-81923

Trello import to JIRA fails due to Trello API Rate Limiting.

    XMLWordPrintable

Details

    Description

      Summary

      Using the "Import from Trello" external service importer built into JIRA can easily fail due to API rate limiting from Trello.

      Environment

      Cloud

      Steps to Reproduce

      1. create a trello board with more than 300 objects.
      2. perform the import from Trello into JIRA.

      Expected Results

      The import completes successfully.

      Actual Results

      The import fails and returns an error like this:

      "Unexpected failure occurred. Importer will stop immediately. Data may be in an unstable state: Error "429: {"error":"RATE_LIMIT_EXCEEDED","message":"Exceeded rate limit to /1/member"}" returned when getting user with the ID {1}.: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1 column 4 path $: Expected BEGIN_OBJECT but was NUMBER at line 1 column 4 path $"
      

      Stacktrace found in Jira logs:

      2018-10-12 06:18:48.238	ERROR	com.atlassian.jira.plugins.importer.imports.importer.impl.DefaultJiraDataImporter	Unexpected failure occurred. Importer will stop immediately. Data may be in an unstable state	Error "429: {"error":"RATE_LIMIT_EXCEEDED","message":"Exceeded rate limit to /1/member"}" returned when getting user with the ID {1}.	com.atlassian.jira.plugins.importer.trello.fetch.TrelloParseException: Error "429: {"error":"RATE_LIMIT_EXCEEDED","message":"Exceeded rate limit to /1/member"}" returned when getting user with the ID {1}.
       at com.atlassian.jira.plugins.importer.trello.fetch.TrelloParser.getUser(TrelloParser.java:78)
       at com.atlassian.jira.plugins.importer.trello.transformers.CardTransformerImpl.getAttachments(CardTransformerImpl.java:417)
       at com.atlassian.jira.plugins.importer.trello.transformers.CardTransformerImpl.createBasicIssue(CardTransformerImpl.java:99)
       at com.atlassian.jira.plugins.importer.trello.transformers.CardTransformerStrategyProviderImpl.lambda$null$2(CardTransformerStrategyProviderImpl.java:26)
       at java.util.Optional.map(Optional.java:215)
       at com.atlassian.jira.plugins.importer.trello.transformers.CardTransformerStrategyProviderImpl.lambda$convertToAgilityIssue$3(CardTransformerStrategyProviderImpl.java:26)
       at com.atlassian.jira.plugins.importer.trello.TrelloImporterClient.lambda$getIssueIterator$0(TrelloImporterClient.java:128)
       at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
       at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359)
       at java.util.stream.StreamSpliterators$WrappingSpliterator.lambda$initPartialTraversalState$0(StreamSpliterators.java:294)
       at java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.fillBuffer(StreamSpliterators.java:206)
       at java.util.stream.StreamSpliterators$AbstractWrappingSpliterator.doAdvance(StreamSpliterators.java:169)
       at java.util.stream.StreamSpliterators$WrappingSpliterator.tryAdvance(StreamSpliterators.java:300)
       at java.util.Spliterators$1Adapter.hasNext(Spliterators.java:681)
       at com.atlassian.jira.plugins.importer.imports.importer.impl.DefaultJiraDataImporter.importIssues(DefaultJiraDataImporter.java:737)
       at com.atlassian.jira.plugins.importer.imports.importer.impl.DefaultJiraDataImporter.doImport(DefaultJiraDataImporter.java:382)
       at com.atlassian.jira.plugins.importer.trello.TrelloTaskRunner.runTask(TrelloTaskRunner.java:117)
       at com.atlassian.jira.task.progress.ProgressAwareMessageRunner.processMessage(ProgressAwareMessageRunner.java:87)
       at com.atlassian.messagequeue.internal.core.NestedMessageConsumer.consume(NestedMessageConsumer.java:135)
       at com.atlassian.messagequeue.internal.sqs.SQSMessageConsumer.processReceiveMessageResult(SQSMessageConsumer.java:171)
       at com.atlassian.messagequeue.internal.sqs.SQSMessageConsumer.run(SQSMessageConsumer.java:112)
       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) Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER
       at line 1 column 4 path $
       at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
       at com.google.gson.Gson.fromJson(Gson.java:888)
       at com.google.gson.Gson.fromJson(Gson.java:853)
       at com.google.gson.Gson.fromJson(Gson.java:802)
       at com.google.gson.Gson.fromJson(Gson.java:774)
       at com.atlassian.jira.plugins.importer.trello.fetch.TrelloParser.getUser(TrelloParser.java:76) ... 23 more Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER
       at line 1 column 4 path $
       at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
       at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213) ... 28 more
      

       

      Workaround

      Use CSV export and import:

      Import Trello board to new JWM project. If you would like JSW project in Jira, you can move issues to Software project afterward. Please use the following guides:

      Attachments

        Issue Links

          Activity

            People

              7a1812415629 Nick Palenchar
              jlong@atlassian.com Jared Long
              Votes:
              8 Vote for this issue
              Watchers:
              25 Start watching this issue

              Dates

                Created:
                Updated: