Skip to content

jenkinsapi Nodes class should limit api requests with tree #855

Open
@J17359

Description

ISSUE TYPE
  • Bug Report
Jenkinsapi VERSION

0.3.13

Jenkins VERSION

2.426.3

SUMMARY

On systems with a large number of Nodes, jenkinsapi will throw a requests.exceptions.ConnectionError exception as it times out retrieving the node list from the Jenkins python api. Based on some best practices documentation, api requests should be used with tree to restrict the information pulled from the server.

Simply typing <my_server>/computuer/api/python into a web browser is enough to see a similar "504 Gateway Time-out" error.

But using <my_server>/computer/api/python?tree=computer[displayName] works. I know jenkinsapi probably needs more information about that node list than just the display name of each node, but limiting the response from the api seems to solve the timeout issue.

EXPECTED RESULTS

A Nodes class object returned when calling Jenkins.get_nodes().

ACTUAL RESULTS

An exception was thrown caused by a timeout trying to access the node list from the server.

USEFUL INFORMATION

When calling the /computer/api/python api endpoint on servers with a large Nodes list (ours has 300+), the below traceback can be observed.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/jenkinsapi/jenkins.py", line 305, in get_node
    return self.nodes[nodename]
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/jenkinsapi/jenkins.py", line 327, in nodes
    return self.get_nodes()
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/jenkinsapi/jenkins.py", line 323, in get_nodes
    return Nodes(self.baseurl, self)
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/jenkinsapi/nodes.py", line 27, in __init__
    JenkinsBase.__init__(
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/jenkinsapi/jenkinsbase.py", line 39, in __init__
    self.poll()
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/jenkinsapi/jenkinsbase.py", line 62, in poll
    data = self._poll(tree=tree)
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/jenkinsapi/jenkinsbase.py", line 72, in _poll
    return self.get_data(url, tree=tree)
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/jenkinsapi/jenkinsbase.py", line 82, in get_data
    response = requester.get_url(url, params)
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/jenkinsapi/utils/requester.py", line 167, in get_url
    return self.session.get(self._update_url_scheme(url), **requestKwargs)
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/requests/sessions.py", line 542, in get
    return self.request('GET', url, **kwargs)
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/requests/sessions.py", line 529, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/requests/sessions.py", line 645, in send
    r = adapter.send(request, **kwargs)
  File "/home/user/builder-automation/venv/lib64/python3.9/site-packages/requests/adapters.py", line 519, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='<my_server>', port=443): Max retries exceeded with url: /computer/api/python (Caused by ReadTimeoutError("HTTPSConnectionPool(host='<my_server>', port=443): Read timed out. (read timeout=10)"))

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions