Uploaded image for project: 'SR Platform'
  1. SR Platform
  2. SRPLAT-9

REST Endpoints not entirely thread safe

    Details

    • Type: Bug
    • Status: Done (View Workflow)
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 4.3.12
    • Fix Version/s: 4.1.3.22, 4.3.13
    • Component/s: None
    • Labels:
      None
    • Critical Points:
      0.6

      Description

      The example REST endpoint to allow cross-origin requests doesn't work well in asynchronous contexts because it isn't thread safe. The chief cause of this seems to be that the extraPath dynamic variable isn't thread safe, which would affect any REST Endpoint that uses it.

      As an example, add some debug text to the endpoint so that the bitbucketproxy looks something like this:

      bitbucketproxy(
              httpMethod: "GET"
      ) { MultivaluedMap queryParams, String body, HttpServletRequest request ->
      
          // get the path after the method name, so we can proxy the request
          def extraPath = extraPath as String
      
          log.debug("Test")
          log.debug("Sent request to $extraPath")
      
          def response = http.request(GET, JSON) {
              path = extraPath
          }
      
          log.debug("Response: ${response.data}")
      
          return Response
                  .ok(new JsonBuilder(response.data).toString())
                  .header("Access-Control-Allow-Origin", "*")
                  .build()
      }
      

      Then, click the button in the attached restendpointissue.html file. You can see from the javascript code that it's calling multiple URLs. However, the output will sometimes be something like:

      2016-10-25 17:12:57 [http-bio-8080-exec-80] DEBUG c.o.s.runner.ScriptRunnerImpl - Test
      2016-10-25 17:12:57 [http-bio-8080-exec-72] DEBUG c.o.s.runner.ScriptRunnerImpl - Test
      2016-10-25 17:12:57 [http-bio-8080-exec-78] DEBUG c.o.s.runner.ScriptRunnerImpl - Test
      2016-10-25 17:12:57 [http-bio-8080-exec-52] DEBUG c.o.s.runner.ScriptRunnerImpl - Test
      2016-10-25 17:12:57 [http-bio-8080-exec-77] DEBUG c.o.s.runner.ScriptRunnerImpl - Test
      2016-10-25 17:12:57 [http-bio-8080-exec-81] DEBUG c.o.s.runner.ScriptRunnerImpl - Test
      2016-10-25 17:12:57 [http-bio-8080-exec-52] DEBUG c.o.s.runner.ScriptRunnerImpl - Sent request to /rest/api/1.0/projects
      2016-10-25 17:12:57 [http-bio-8080-exec-80] DEBUG c.o.s.runner.ScriptRunnerImpl - Sent request to /rest/api/1.0/projects
      2016-10-25 17:12:57 [http-bio-8080-exec-78] DEBUG c.o.s.runner.ScriptRunnerImpl - Sent request to /rest/api/1.0/projects
      2016-10-25 17:12:57 [http-bio-8080-exec-72] DEBUG c.o.s.runner.ScriptRunnerImpl - Sent request to /rest/api/1.0/projects
      2016-10-25 17:12:57 [http-bio-8080-exec-81] DEBUG c.o.s.runner.ScriptRunnerImpl - Sent request to /rest/api/1.0/projects
      2016-10-25 17:12:57 [http-bio-8080-exec-77] DEBUG c.o.s.runner.ScriptRunnerImpl - Sent request to /rest/api/1.0/projects
      

      The extraPath isn't different; sometimes, it's the same one from a previous call.

        Attachments

          Issue Links

            Structure

              Activity

                People

                Assignee:
                jechlin Jamie Echlin
                Reporter:
                jcarter Jonny Carter
                Votes:
                1 Vote for this issue
                Watchers:
                4 Start watching this issue

                  Dates

                  Created:
                  Updated:
                  Resolved:

                    Structure Helper Panel