Uploaded image for project: 'Bitbucket Server'
  1. Bitbucket Server
  2. BSERV-12818

Broken Pagination in Rest API for Webhooks

    XMLWordPrintable

Details

    Description

      Issue Summary

      The Rest API for retrieving Webhooks is broken when using the limit and start query parameters (start=0&limit=2) to retrieve the desired number of results.

      Steps to Reproduce

      1. Have at least 4 Webhooks configured.
      2. Use the REST API to retrieve the Webhooks, for example:
        curl -H "Authorization: Bearer xxxxx" -X GET https://localhost:8444/b760/rest/api/1.0/projects/LIN/repos/practice_git/webhooks?start=0&limit=2
        

      Expected Results

      2 Webhooks should be returned.

      {
          "size": 2,
          "limit": 2,
          "isLastPage": false,
          "values": [
              {
                  "id": 6,
                  "name": "danny",
                  "createdDate": 1617782072303,
                  "updatedDate": 1617782072303,
                  "events": [
                      "repo:refs_changed"
                  ],
                  "configuration": {
                      "createdBy": "bitbucket"
                  },
                  "url": "http://localhost:8080/bitbucket-scmsource-hook/notify",
                  "active": true
              },
              {
                  "id": 7,
                  "name": "https://d1f9f469ec5730337b80ff1302c3c739.m.pipedream.net",
                  "createdDate": 1617782072305,
                  "updatedDate": 1617782072305,
                  "events": [
                      "repo:refs_changed"
                  ],
                  "configuration": {},
                  "url": "https://d1f9f469ec5730337b80ff1302c3c739.m.pipedream.net",
                  "active": true
              }
          ],
          "start": 0,
          "nextPageStart": 2
      }
      

      Actual Results

      3 Webhooks are returned as show below:

      {
          "size": 2,
          "limit": 2,
          "isLastPage": false,
          "values": [
              {
                  "id": 6,
                  "name": "danny",
                  "createdDate": 1617780109672,
                  "updatedDate": 1617780109672,
                  "events": [
                      "repo:refs_changed"
                  ],
                  "configuration": {
                      "createdBy": "bitbucket"
                  },
                  "url": "http://localhost:8080/bitbucket-scmsource-hook/notify",
                  "active": true
              },
              {
                  "id": 7,
                  "name": "https://d1f9f469ec5730337b80ff1302c3c739.m.pipedream.net",
                  "createdDate": 1617780109674,
                  "updatedDate": 1617780109674,
                  "events": [
                      "repo:refs_changed"
                  ],
                  "configuration": {},
                  "url": "https://d1f9f469ec5730337b80ff1302c3c739.m.pipedream.net",
                  "active": true
              },
              {
                  "id": 9,
                  "name": "43209a81b9b5694b39daf4d231c44dd76d12f4ef",
                  "createdDate": 1617780109675,
                  "updatedDate": 1617780109675,
                  "events": [
                      "repo:refs_changed"
                  ],
                  "configuration": {
                      "createdBy": "jenkins"
                  },
                  "url": "http://localhost:8080/bitbucket-server-webhook/trigger",
                  "active": true
              }
          ],
          "start": 0,
          "nextPageStart": 2
      }
      

      Workaround

      The workaround is adding a "+1" to the nextPageStart when calling the next page. For example,

      -- Current API call
      curl -H "Authorization: Bearer xxxxx" -X GET https://localhost:8444/b760/rest/api/1.0/projects/LIN/repos/practice_git/webhooks?start=0&limit=2
      -- Next API call
      curl -H "Authorization: Bearer xxxxx" -X GET https://localhost:8444/b760/rest/api/1.0/projects/LIN/repos/practice_git/webhooks?start=3&limit=2
      

      However, the lastpage is true only when the page limit is has reached or exceeded the number of Webhooks. For example, if 4 Webhooks are available it behaves like this:

      curl -H "Authorization: Bearer xxxxx" -X GET https://localhost:8444/b760/rest/api/1.0/projects/LIN/repos/practice_git/webhooks?start=0&limit=3
      -- Output
      4 Webhooks with lastpage as false
      
      curl -H "Authorization: Bearer xxxxx" -X GET https://localhost:8444/b760/rest/api/1.0/projects/LIN/repos/practice_git/webhooks?start=0&limit=4
      -- Output
      4 Webhooks with lastpage as true
      
      curl -H "Authorization: Bearer xxxxx" -X GET https://localhost:8444/b760/rest/api/1.0/projects/LIN/repos/practice_git/webhooks?start=4&limit=4
      -- Output
      1 Webhook with lastpage as true
      

      Attachments

        Issue Links

          Activity

            People

              khughes@atlassian.com Kristy
              abimba@atlassian.com Andrew Bimba
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Backbone Issue Sync