Uploaded image for project: 'Atlassian Connector for Eclipse (discontinued)'
  1. Atlassian Connector for Eclipse (discontinued)
  2. PLE-1516

Performance improvement - get all data with jql search instead of separate calls for every issue

    Details

    • Type: Task
    • Status: Closed
    • Priority: Major
    • Resolution: Won't Fix
    • Affects Version/s: 3.2.1
    • Fix Version/s: None
    • Component/s: None
    • Labels:

      Description

      Unfortunately it is not possible to get all issue data in one jql call before JIRA 5.2.6 because of this bug: https://jira.atlassian.com/browse/JRA-31418
      Older versions does not allow to expand issue details for JQL search (editmeta expando does not work).
      We would need to handle older JIRA versions separately but it would be a maintenance overhead.

      Other solutions:

      1. only JQL call (no separate issue call) and grab as much data as we can during search and retrieve details when issue is being opened (we would need to check if missing data is OK for the TaskList - we miss transitions and editmeta)
      2. JQL call and separate issue call but only first time when details are missing (subsequent call will ask only for JQL results and no separate issue calls), fresh issue details retrieved when issue is being opened

      Wrt 1, unfortunately it does not work because partial issue is considered as different than full issue and Mylyn marks it as changed (not read marker on the Task List and "issue changed" marker in the Issue Editor).

      Wrt 2, it could be difficult because we build issue object every time it is retrieved. It would require non trivial changes.

      My current proposal: get issues in bulk with jql search and if they lack edit meta (for JIRA prior to 5.2.6) then get details with separate call (one per issue as it is in current implementation).
      That is quite easy to implement and we will reduce performance significantly for JIRA 5.2.6 and newer.

        Gliffy Diagrams

          Issue Links

            Activity

            Hide
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: jjaroczynski; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Jacek Jaroczynski added a comment -

            Unfortunately due to https://jira.atlassian.com/browse/JRA-34471 this issue cannot be fixed.

            I finished implementation and it appeared that missing attachments information from the bulk query is a blocker due to Mylyn architecture.

            Here is short overview how it works:

            • after bulk synchronization Mylyn stores all task data locally (without attachments information)
            • when user opens the task, its fresh information is retrieved from the server and if not changed (our implementation) then task data from the task list (local storage) is displayed (without attachments)

            We could change "not changed" implementation and always say it has changed but this way all open task editors would get notification and display "refresh editor to..." information.

            It is not possible to force Mylyn to store data retrieved for single task over data retrieved from bulk query.

            There is also "partial" concept. We could mark all tasks retrieved in bulk as partial but this way open editor is not refreshed and does not get information about changes if any - again we lose existing functionality.

            I will commit current state to separate branch. Hopefully JIRA issue will be solved for 6.2 and it will be possible to merge the fix into main branch.

            Show
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: jjaroczynski; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Jacek Jaroczynski added a comment - Unfortunately due to https://jira.atlassian.com/browse/JRA-34471 this issue cannot be fixed. I finished implementation and it appeared that missing attachments information from the bulk query is a blocker due to Mylyn architecture. Here is short overview how it works: after bulk synchronization Mylyn stores all task data locally (without attachments information) when user opens the task, its fresh information is retrieved from the server and if not changed (our implementation) then task data from the task list (local storage) is displayed (without attachments) We could change "not changed" implementation and always say it has changed but this way all open task editors would get notification and display "refresh editor to..." information. It is not possible to force Mylyn to store data retrieved for single task over data retrieved from bulk query. There is also "partial" concept. We could mark all tasks retrieved in bulk as partial but this way open editor is not refreshed and does not get information about changes if any - again we lose existing functionality. I will commit current state to separate branch. Hopefully JIRA issue will be solved for 6.2 and it will be possible to merge the fix into main branch.
            Hide
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: jjaroczynski; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Jacek Jaroczynski added a comment -

            Rescheduled to 3.3

            Show
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: jjaroczynski; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Jacek Jaroczynski added a comment - Rescheduled to 3.3
            Hide
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: rombert; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Robert Munteanu added a comment -

            I think it's feasible to get all the task data in one go and use the partial concept, it's already used in other connectors - I've done it for the Mantis connector. Can't the Jira REST API return just the list of attachments in the JQL call?

            And IIRC the task list only uses the attachment data to decide if there is a remote task context. IMO, even if we lose this, the huge performance gains for large installations will be worth it.

            Show
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: rombert; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Robert Munteanu added a comment - I think it's feasible to get all the task data in one go and use the partial concept, it's already used in other connectors - I've done it for the Mantis connector. Can't the Jira REST API return just the list of attachments in the JQL call? And IIRC the task list only uses the attachment data to decide if there is a remote task context. IMO, even if we lose this, the huge performance gains for large installations will be worth it.
            Hide
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: rombert; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Robert Munteanu added a comment -

            Is there any chance to have this improvement implemented? It would greatly ease the work with Jira and also make the ops team happy

            Show
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: rombert; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Robert Munteanu added a comment - Is there any chance to have this improvement implemented? It would greatly ease the work with Jira and also make the ops team happy
            Hide
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: sazwerner; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Scott Zwerner added a comment -

            We have several users using the Mylyn integration and we've noticed that during the "synchronization" operation the JIRA server receives quite a few requests per second, which end up slowing the server down. I think implementing bulk synchronization using the REST JQL resource would probably solve this problem.

            Show
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: sazwerner; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Scott Zwerner added a comment - We have several users using the Mylyn integration and we've noticed that during the "synchronization" operation the JIRA server receives quite a few requests per second, which end up slowing the server down. I think implementing bulk synchronization using the REST JQL resource would probably solve this problem.
            Hide
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: jjaroczynski; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Jacek Jaroczynski added a comment -

            Support for Atlassian IDE Connectors has been discontinued and announced in following blog post: https://developer.atlassian.com/blog/2015/06/discontinuing-ide-connectors-support/

            From now on this project is open source and is not maintained by Atlassian any more. Feel free to fork the repository and make changes.

            Thank you for your feedback, comments and votes.

            Cheers,
            Jacek
            Development team lead

            Show
            {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: jjaroczynski; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Jacek Jaroczynski added a comment - Support for Atlassian IDE Connectors has been discontinued and announced in following blog post: https://developer.atlassian.com/blog/2015/06/discontinuing-ide-connectors-support/ From now on this project is open source and is not maintained by Atlassian any more. Feel free to fork the repository and make changes. Thank you for your feedback, comments and votes. Cheers, Jacek Development team lead

              People

              • Assignee:
                {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: ; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Unassigned
                Reporter:
                {annotationCollection: [{}], annotations: [{}], collectionInheritableAnnotations: [{}], declaredAnnotations: [{}], description: Annotated value: jjaroczynski; Annotations: [@com.atlassian.velocity.htmlsafe.HtmlSafe()]} Jacek Jaroczynski
              • Votes:
                3 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Who's Looking?