Jira REST API concurrent requests fail

Mohammed Babur December 16, 2013

I am having issues with the Jira API. The code I have below works for the public Altassian Jira. If I change the $versions, $options, and $urls specifically for my Jira installation, then I end up getting a maximum of only 10 successful responses.

For my Jira installation:

- I change $versions to be specific to my installation

- I change $options to use port 80 and to use an 'Authentication: Basic ...' header

- I change $urls to use my installations url and to use http instead of https

My questions are:

- Is there a setting for Apache that limits the number of concurrent basic authentication requests for each user?

- Is there a setting for Jira that limits the number of concurrent API requests for each client?

Any help is appreciated.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>ghi</title>
    </head>
    <body>
        <?php
            $versions = array(
                "JRA" => array("6.1","6.0","5.2","5.0","4.4","4.3"),
            );
            $jqls = array(
                "one"   => "project='%s' AND fixVersion='%s'",
                "two"   => "project='%s' AND fixVersion='%s'",
                "three" => "project='%s' AND fixVersion='%s'",
                "four"  => "project='%s' AND fixVersion='%s'",
                "five"  => "project='%s' AND fixVersion='%s'",
                "six"   => "project='%s' AND fixVersion='%s'",
                "seven" => "project='%s' AND fixVersion='%s'",
                "eight" => "project='%s' AND fixVersion='%s'",
                "nine"  => "project='%s' AND fixVersion='%s'"
            );
            $options = array(
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_PORT => 443,
                CURLOPT_HTTPHEADER => array(
                    'Content-Type: application/json'
                )
            );
            foreach ($versions['JRA'] as $ver) {
                foreach ($jqls as $id => $query) {
                    $urls[$ver][$id] = 'https://jira.atlassian.com/rest/api/latest/search?startAt=0&maxResults=0&jql=' . rawurlencode(sprintf($query, 'JRA', $ver));
                }
            }
            set_time_limit(0);
            echo "<pre>";
            foreach ($urls as $ver => $group) {
                foreach ($group as $id => $u) {
                    $ch = curl_init($u);
                    curl_setopt_array($ch, $options);
                    $curls[$ver][$id] = $ch;
                }
            }
            $mh = curl_multi_init();
            foreach ($curls as $ver => $group) {
                foreach ($group as $id => $ch) {
                    curl_multi_add_handle($mh, $ch);
                }
            }
            $running = null;
            $failures = 0;
            do {
                $mrc = curl_multi_exec($mh, $running);
                $info = curl_multi_info_read($mh);
                if (false !== $info && $info['result'] != 0) {
                    $failures++;
                }
            } while ($running > 0);
            echo 'failed requests: ' . $failures . "\n\n";
            foreach ($curls as $ver => $group) {
                foreach ($group as $id => $ch) {
                    $resp = json_decode(curl_multi_getcontent($ch));
                    if (gettype($resp) == 'object') {
                        $results[$ver][$id] = $resp->total;
                    } else {
                        $results[$ver][$id] = gettype($resp);
                    }
                    curl_multi_remove_handle($mh, $ch);
                }
            }
            curl_multi_close($mh);
            print_r($results);
            print_r($urls);
            echo "</pre>";
        ?>
    </body>
</html>

1 answer

1 accepted

1 vote
Answer accepted
Ubisoft
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
December 17, 2013

Hello,

I am not aware of any limit in Jira or apache by default. So its probably a module installed in their Apache.

Here, we actually have a QOS in place on our Jira instance because we had user that were spammimg it.

We installed mod_QOS a module for apache : http://opensource.adnovum.ch/mod_qos/

before installing this, we could hit up to 80/sec by 1 ip of requests easily which was spamming our server. We limited it at 3/sec

Martin

Suggest an answer

Log in or Sign up to answer