03:58:35 Triggered by Gerrit: https://gerrit.o-ran-sc.org/r/c/ric-plt/xapp-frame-py/+/12317 03:58:35 Running as SYSTEM 03:58:35 [EnvInject] - Loading node environment variables. 03:58:35 Building remotely on prd-ubuntu1804-builder-2c-2g-2154 (ubuntu1804-builder-2c-2g ubuntu2004-builder-2c-2g) in workspace /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master 03:58:35 [ssh-agent] Looking for ssh-agent implementation... 03:58:35 [ssh-agent] Exec ssh-agent (binary ssh-agent on a remote machine) 03:58:35 $ ssh-agent 03:58:35 SSH_AUTH_SOCK=/tmp/ssh-zP3EZ8h8LCkP/agent.5746 03:58:35 SSH_AGENT_PID=5748 03:58:35 [ssh-agent] Started. 03:58:35 Running ssh-add (command line suppressed) 03:58:35 Identity added: /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master@tmp/private_key_8337496869508180518.key (jenkins-ssh) 03:58:35 [ssh-agent] Using credentials jenkins (jenkins) 03:58:35 The recommended git tool is: NONE 03:58:37 using credential jenkins 03:58:37 Wiping out workspace first. 03:58:37 Cloning the remote Git repository 03:58:37 Cloning repository ssh://oran-jobbuilder@gerrit.o-ran-sc.org:29418/ric-plt/xapp-frame-py 03:58:37 > git init /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master # timeout=10 03:58:37 Fetching upstream changes from ssh://oran-jobbuilder@gerrit.o-ran-sc.org:29418/ric-plt/xapp-frame-py 03:58:37 > git --version # timeout=10 03:58:37 > git --version # 'git version 2.25.1' 03:58:37 using GIT_SSH to set credentials jenkins 03:58:37 > git fetch --tags --force --progress -- ssh://oran-jobbuilder@gerrit.o-ran-sc.org:29418/ric-plt/xapp-frame-py +refs/heads/*:refs/remotes/origin/* # timeout=10 03:58:38 > git config remote.origin.url ssh://oran-jobbuilder@gerrit.o-ran-sc.org:29418/ric-plt/xapp-frame-py # timeout=10 03:58:38 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 03:58:39 > git config remote.origin.url ssh://oran-jobbuilder@gerrit.o-ran-sc.org:29418/ric-plt/xapp-frame-py # timeout=10 03:58:39 Fetching upstream changes from ssh://oran-jobbuilder@gerrit.o-ran-sc.org:29418/ric-plt/xapp-frame-py 03:58:39 using GIT_SSH to set credentials jenkins 03:58:39 > git fetch --tags --force --progress -- ssh://oran-jobbuilder@gerrit.o-ran-sc.org:29418/ric-plt/xapp-frame-py refs/changes/17/12317/12 # timeout=10 03:58:39 > git rev-parse d0e8bfae4ec5928ef3cc217190d9572daaf0195e^{commit} # timeout=10 03:58:39 JENKINS-19022: warning: possible memory leak due to Git plugin usage; see: https://plugins.jenkins.io/git/#remove-git-plugin-buildsbybranch-builddata-script 03:58:39 Checking out Revision d0e8bfae4ec5928ef3cc217190d9572daaf0195e (refs/changes/17/12317/12) 03:58:39 > git config core.sparsecheckout # timeout=10 03:58:39 > git checkout -f d0e8bfae4ec5928ef3cc217190d9572daaf0195e # timeout=10 03:58:42 Commit message: "RIC-1032: xapp-frame-py block xApp to register when communicating with Rtmgr" 03:58:42 > git rev-parse FETCH_HEAD^{commit} # timeout=10 03:58:42 > git rev-list --no-walk e0de19a1c51e607b7e7a4a71a326a09486583539 # timeout=10 03:58:43 > git remote # timeout=10 03:58:43 > git submodule init # timeout=10 03:58:43 > git submodule sync # timeout=10 03:58:43 > git config --get remote.origin.url # timeout=10 03:58:43 > git submodule init # timeout=10 03:58:43 > git config -f .gitmodules --get-regexp ^submodule\.(.+)\.url # timeout=10 03:58:43 > git config --get submodule.nodeb-rnib.url # timeout=10 03:58:43 > git config -f .gitmodules --get submodule.nodeb-rnib.path # timeout=10 03:58:43 > git submodule update --init --recursive nodeb-rnib # timeout=10 03:58:43 provisioning config files... 03:58:43 copy managed file [npmrc] to file:/home/jenkins/.npmrc 03:58:43 copy managed file [pipconf] to file:/home/jenkins/.config/pip/pip.conf 03:58:43 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins6035364789680282499.sh 03:58:43 ---> python-tools-install.sh 03:58:43 Setup pyenv: 03:58:43 * system (set by /opt/pyenv/version) 03:58:44 * 3.8.13 (set by /opt/pyenv/version) 03:58:44 * 3.9.13 (set by /opt/pyenv/version) 03:58:44 * 3.10.6 (set by /opt/pyenv/version) 03:58:49 lf-activate-venv(): INFO: Creating python3 venv at /tmp/venv-BkFA 03:58:49 lf-activate-venv(): INFO: Save venv in file: /tmp/.os_lf_venv 03:58:53 lf-activate-venv(): INFO: Installing: lftools 03:59:34 lf-activate-venv(): INFO: Adding /tmp/venv-BkFA/bin to PATH 03:59:34 Generating Requirements File 04:00:13 Python 3.10.6 04:00:13 pip 23.3.2 from /tmp/venv-BkFA/lib/python3.10/site-packages/pip (python 3.10) 04:00:14 appdirs==1.4.4 04:00:14 argcomplete==3.2.1 04:00:14 aspy.yaml==1.3.0 04:00:14 attrs==23.1.0 04:00:14 autopage==0.5.2 04:00:14 Babel==2.14.0 04:00:14 beautifulsoup4==4.12.2 04:00:14 boto3==1.34.8 04:00:14 botocore==1.34.8 04:00:14 bs4==0.0.1 04:00:14 cachetools==5.3.2 04:00:14 certifi==2023.11.17 04:00:14 cffi==1.16.0 04:00:14 cfgv==3.4.0 04:00:14 chardet==5.2.0 04:00:14 charset-normalizer==3.3.2 04:00:14 click==8.1.7 04:00:14 cliff==4.4.0 04:00:14 cmd2==2.4.3 04:00:14 cryptography==3.3.2 04:00:14 debtcollector==2.5.0 04:00:14 decorator==5.1.1 04:00:14 defusedxml==0.7.1 04:00:14 Deprecated==1.2.14 04:00:14 distlib==0.3.8 04:00:14 dnspython==2.4.2 04:00:14 docker==4.2.2 04:00:14 dogpile.cache==1.3.0 04:00:14 email-validator==2.1.0.post1 04:00:14 filelock==3.13.1 04:00:14 future==0.18.3 04:00:14 gitdb==4.0.11 04:00:14 GitPython==3.1.40 04:00:14 google-auth==2.25.2 04:00:14 httplib2==0.22.0 04:00:14 identify==2.5.33 04:00:14 idna==3.6 04:00:14 importlib-metadata==7.0.1 04:00:14 importlib-resources==1.5.0 04:00:14 iso8601==2.1.0 04:00:14 Jinja2==3.1.2 04:00:14 jmespath==1.0.1 04:00:14 jsonpatch==1.33 04:00:14 jsonpointer==2.4 04:00:14 jsonschema==4.20.0 04:00:14 jsonschema-specifications==2023.12.1 04:00:14 keystoneauth1==5.4.0 04:00:14 kubernetes==28.1.0 04:00:14 lftools==0.37.8 04:00:14 lxml==4.9.4 04:00:14 MarkupSafe==2.1.3 04:00:14 msgpack==1.0.7 04:00:14 multi_key_dict==2.0.3 04:00:14 munch==4.0.0 04:00:14 netaddr==0.9.0 04:00:14 netifaces==0.11.0 04:00:14 niet==1.4.2 04:00:14 nodeenv==1.8.0 04:00:14 oauth2client==4.1.3 04:00:14 oauthlib==3.2.2 04:00:14 openstacksdk==0.62.0 04:00:14 os-client-config==2.1.0 04:00:14 os-service-types==1.7.0 04:00:14 osc-lib==2.9.0 04:00:14 oslo.config==9.2.0 04:00:14 oslo.context==5.3.0 04:00:14 oslo.i18n==6.2.0 04:00:14 oslo.log==5.4.0 04:00:14 oslo.serialization==5.2.0 04:00:14 oslo.utils==6.3.0 04:00:14 packaging==23.2 04:00:14 pbr==6.0.0 04:00:14 platformdirs==4.1.0 04:00:14 prettytable==3.9.0 04:00:14 pyasn1==0.5.1 04:00:14 pyasn1-modules==0.3.0 04:00:14 pycparser==2.21 04:00:14 pygerrit2==2.0.15 04:00:14 PyGithub==2.1.1 04:00:14 pyinotify==0.9.6 04:00:14 PyJWT==2.8.0 04:00:14 PyNaCl==1.5.0 04:00:14 pyparsing==2.4.7 04:00:14 pyperclip==1.8.2 04:00:14 pyrsistent==0.20.0 04:00:14 python-cinderclient==9.4.0 04:00:14 python-dateutil==2.8.2 04:00:14 python-heatclient==3.3.0 04:00:14 python-jenkins==1.8.2 04:00:14 python-keystoneclient==5.2.0 04:00:14 python-magnumclient==4.3.0 04:00:14 python-novaclient==18.4.0 04:00:14 python-openstackclient==6.0.0 04:00:14 python-swiftclient==4.4.0 04:00:14 pytz==2023.3.post1 04:00:14 PyYAML==6.0.1 04:00:14 referencing==0.32.0 04:00:14 requests==2.31.0 04:00:14 requests-oauthlib==1.3.1 04:00:14 requestsexceptions==1.4.0 04:00:14 rfc3986==2.0.0 04:00:14 rpds-py==0.15.2 04:00:14 rsa==4.9 04:00:14 ruamel.yaml==0.18.5 04:00:14 ruamel.yaml.clib==0.2.8 04:00:14 s3transfer==0.10.0 04:00:14 simplejson==3.19.2 04:00:14 six==1.16.0 04:00:14 smmap==5.0.1 04:00:14 soupsieve==2.5 04:00:14 stevedore==5.1.0 04:00:14 tabulate==0.9.0 04:00:14 toml==0.10.2 04:00:14 tomlkit==0.12.3 04:00:14 tqdm==4.66.1 04:00:14 typing_extensions==4.9.0 04:00:14 tzdata==2023.3 04:00:14 urllib3==1.26.18 04:00:14 virtualenv==20.25.0 04:00:14 wcwidth==0.2.12 04:00:14 websocket-client==1.7.0 04:00:14 wrapt==1.16.0 04:00:14 xdg==6.0.0 04:00:14 xmltodict==0.13.0 04:00:14 yq==3.2.3 04:00:14 zipp==3.17.0 04:00:14 [EnvInject] - Injecting environment variables from a build step. 04:00:14 [EnvInject] - Injecting as environment variables the properties content 04:00:14 PYTHON=python3 04:00:14 04:00:14 [EnvInject] - Variables injected successfully. 04:00:14 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash -l /tmp/jenkins10392507156957335941.sh 04:00:14 ---> tox-install.sh 04:00:14 + source /home/jenkins/lf-env.sh 04:00:14 + lf-activate-venv --venv-file /tmp/.toxenv tox virtualenv urllib3~=1.26.15 04:00:14 ++ mktemp -d /tmp/venv-XXXX 04:00:14 + lf_venv=/tmp/venv-5Mha 04:00:14 + local venv_file=/tmp/.os_lf_venv 04:00:14 + local python=python3 04:00:14 + local options 04:00:14 + local set_path=true 04:00:14 + local install_args= 04:00:14 ++ getopt -o np:v: -l no-path,system-site-packages,python:,venv-file: -n lf-activate-venv -- --venv-file /tmp/.toxenv tox virtualenv urllib3~=1.26.15 04:00:14 + options=' --venv-file '\''/tmp/.toxenv'\'' -- '\''tox'\'' '\''virtualenv'\'' '\''urllib3~=1.26.15'\''' 04:00:14 + eval set -- ' --venv-file '\''/tmp/.toxenv'\'' -- '\''tox'\'' '\''virtualenv'\'' '\''urllib3~=1.26.15'\''' 04:00:14 ++ set -- --venv-file /tmp/.toxenv -- tox virtualenv urllib3~=1.26.15 04:00:14 + true 04:00:14 + case $1 in 04:00:14 + venv_file=/tmp/.toxenv 04:00:14 + shift 2 04:00:14 + true 04:00:14 + case $1 in 04:00:14 + shift 04:00:14 + break 04:00:14 + case $python in 04:00:14 + local pkg_list= 04:00:14 + [[ -d /opt/pyenv ]] 04:00:14 + echo 'Setup pyenv:' 04:00:14 Setup pyenv: 04:00:14 + export PYENV_ROOT=/opt/pyenv 04:00:14 + PYENV_ROOT=/opt/pyenv 04:00:14 + export PATH=/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:14 + PATH=/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:14 + pyenv versions 04:00:14 system 04:00:14 3.8.13 04:00:14 3.9.13 04:00:14 * 3.10.6 (set by /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.python-version) 04:00:14 + command -v pyenv 04:00:14 ++ pyenv init - --no-rehash 04:00:14 + eval 'PATH="$(bash --norc -ec '\''IFS=:; paths=($PATH); for i in ${!paths[@]}; do if [[ ${paths[i]} == "'\''/opt/pyenv/shims'\''" ]]; then unset '\''\'\'''\''paths[i]'\''\'\'''\''; fi; done; echo "${paths[*]}"'\'')" 04:00:14 export PATH="/opt/pyenv/shims:${PATH}" 04:00:14 export PYENV_SHELL=bash 04:00:14 source '\''/opt/pyenv/libexec/../completions/pyenv.bash'\'' 04:00:14 pyenv() { 04:00:14 local command 04:00:14 command="${1:-}" 04:00:14 if [ "$#" -gt 0 ]; then 04:00:14 shift 04:00:14 fi 04:00:14 04:00:14 case "$command" in 04:00:14 rehash|shell) 04:00:14 eval "$(pyenv "sh-$command" "$@")" 04:00:14 ;; 04:00:14 *) 04:00:14 command pyenv "$command" "$@" 04:00:14 ;; 04:00:14 esac 04:00:14 }' 04:00:14 +++ bash --norc -ec 'IFS=:; paths=($PATH); for i in ${!paths[@]}; do if [[ ${paths[i]} == "/opt/pyenv/shims" ]]; then unset '\''paths[i]'\''; fi; done; echo "${paths[*]}"' 04:00:14 ++ PATH=/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:14 ++ export PATH=/opt/pyenv/shims:/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:14 ++ PATH=/opt/pyenv/shims:/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:14 ++ export PYENV_SHELL=bash 04:00:14 ++ PYENV_SHELL=bash 04:00:14 ++ source /opt/pyenv/libexec/../completions/pyenv.bash 04:00:14 +++ complete -F _pyenv pyenv 04:00:14 ++ lf-pyver python3 04:00:14 ++ local py_version_xy=python3 04:00:14 ++ local py_version_xyz= 04:00:14 ++ grep -E '^[0-9.]*[0-9]$' 04:00:14 ++ awk '{ print $1 }' 04:00:14 ++ sed 's/^[ *]* //' 04:00:14 ++ pyenv versions 04:00:14 ++ local command 04:00:14 ++ command=versions 04:00:14 ++ '[' 1 -gt 0 ']' 04:00:14 ++ shift 04:00:14 ++ case "$command" in 04:00:14 ++ command pyenv versions 04:00:14 ++ pyenv versions 04:00:14 ++ [[ ! -s /tmp/.pyenv_versions ]] 04:00:14 +++ grep '^3' /tmp/.pyenv_versions 04:00:14 +++ tail -n 1 04:00:14 +++ sort -V 04:00:14 ++ py_version_xyz=3.10.6 04:00:14 ++ [[ -z 3.10.6 ]] 04:00:14 ++ echo 3.10.6 04:00:14 ++ return 0 04:00:14 + pyenv local 3.10.6 04:00:14 + local command 04:00:14 + command=local 04:00:14 + '[' 2 -gt 0 ']' 04:00:14 + shift 04:00:14 + case "$command" in 04:00:14 + command pyenv local 3.10.6 04:00:14 + pyenv local 3.10.6 04:00:14 + for arg in "$@" 04:00:14 + case $arg in 04:00:14 + pkg_list+='tox ' 04:00:14 + for arg in "$@" 04:00:14 + case $arg in 04:00:14 + pkg_list+='virtualenv ' 04:00:14 + for arg in "$@" 04:00:14 + case $arg in 04:00:14 + pkg_list+='urllib3~=1.26.15 ' 04:00:14 + [[ -f /tmp/.toxenv ]] 04:00:14 + [[ ! -f /tmp/.toxenv ]] 04:00:14 + [[ -n '' ]] 04:00:14 + python3 -m venv /tmp/venv-5Mha 04:00:18 + echo 'lf-activate-venv(): INFO: Creating python3 venv at /tmp/venv-5Mha' 04:00:18 lf-activate-venv(): INFO: Creating python3 venv at /tmp/venv-5Mha 04:00:18 + echo /tmp/venv-5Mha 04:00:18 + echo 'lf-activate-venv(): INFO: Save venv in file: /tmp/.toxenv' 04:00:18 lf-activate-venv(): INFO: Save venv in file: /tmp/.toxenv 04:00:18 + /tmp/venv-5Mha/bin/python3 -m pip install --upgrade --quiet pip virtualenv 04:00:21 + [[ -z tox virtualenv urllib3~=1.26.15 ]] 04:00:21 + echo 'lf-activate-venv(): INFO: Installing: tox virtualenv urllib3~=1.26.15 ' 04:00:21 lf-activate-venv(): INFO: Installing: tox virtualenv urllib3~=1.26.15 04:00:21 + /tmp/venv-5Mha/bin/python3 -m pip install --upgrade --quiet --upgrade-strategy eager tox virtualenv urllib3~=1.26.15 04:00:24 + type python3 04:00:24 + true 04:00:24 + echo 'lf-activate-venv(): INFO: Adding /tmp/venv-5Mha/bin to PATH' 04:00:24 lf-activate-venv(): INFO: Adding /tmp/venv-5Mha/bin to PATH 04:00:24 + PATH=/tmp/venv-5Mha/bin:/opt/pyenv/shims:/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:24 + return 0 04:00:24 + python3 --version 04:00:24 Python 3.10.6 04:00:24 + python3 -m pip --version 04:00:24 pip 23.3.2 from /tmp/venv-5Mha/lib/python3.10/site-packages/pip (python 3.10) 04:00:24 + python3 -m pip freeze 04:00:24 cachetools==5.3.2 04:00:24 chardet==5.2.0 04:00:24 colorama==0.4.6 04:00:24 distlib==0.3.8 04:00:24 filelock==3.13.1 04:00:24 packaging==23.2 04:00:24 platformdirs==4.1.0 04:00:24 pluggy==1.3.0 04:00:24 pyproject-api==1.6.1 04:00:24 tomli==2.0.1 04:00:24 tox==4.11.4 04:00:24 urllib3==1.26.18 04:00:24 virtualenv==20.25.0 04:00:24 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins17700990912085005355.sh 04:00:24 ---> install-deb-rmr.sh 04:00:24 + version_file=rmr-version.yaml 04:00:24 + [[ -f rmr-version.yaml ]] 04:00:24 ++ xargs 04:00:24 ++ cut -d: -f2 04:00:24 ++ grep '^repo:' rmr-version.yaml 04:00:24 + repo= 04:00:24 ++ grep '^version:' rmr-version.yaml 04:00:24 ++ cut -d: -f2 04:00:24 ++ xargs 04:00:24 + ver=4.9.1 04:00:24 + [[ -z 4.9.1 ]] 04:00:24 + repo=release 04:00:24 + for deb in "rmr_${ver}_amd64.deb" "rmr-dev_${ver}_amd64.deb" 04:00:24 + wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rmr_4.9.1_amd64.deb/download.deb 04:00:24 2023-12-28 04:00:24 URL:https://d3fo0g5hm7lbuv.cloudfront.net/20756/10598/debian/package_files/4252893.deb?Expires=1703736324&Signature=mrW2-7QAvu3DCS6tuu3zZsAUxA0~j-GGkXcy9psOBdSkuvdJkE-otTDqfodkMEox8RQxGqMl-NT2efjxgk3INiuaEn5AjHx13h6zRZAL3SveAJJMXIrMCBZS2Ky8sbrYVoMnxOxK-Dga5hS-qAcrbjiP1WrYYo9wJpuQEpcDdC0c8AiFgecH~n0gpP88estXux7veAAXA13Sx58YGFQR~XARy6yKOG2XDy-n7Bi~i5QolOZzHYr-377Rl99qhsT6UPOz0TaYoKo5DG0FifdAP6MeSaNIShSL8BvfRRendaqzZrjCcWtJqVrbC8z3L0FWzfkyB-my1PyeLAeyhALZ8A__&Key-Pair-Id=K1ZMSF1EKC3AZL [243050/243050] -> "rmr_4.9.1_amd64.deb" [1] 04:00:24 + sudo dpkg -i rmr_4.9.1_amd64.deb 04:00:25 Selecting previously unselected package rmr. 04:00:27 (Reading database ... 198606 files and directories currently installed.) 04:00:27 Preparing to unpack rmr_4.9.1_amd64.deb ... 04:00:27 Unpacking rmr (4.9.1) ... 04:00:27 Setting up rmr (4.9.1) ... 04:00:27 + rm -f rmr_4.9.1_amd64.deb 04:00:27 + for deb in "rmr_${ver}_amd64.deb" "rmr-dev_${ver}_amd64.deb" 04:00:27 + wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rmr-dev_4.9.1_amd64.deb/download.deb 04:00:27 2023-12-28 04:00:27 URL:https://d3fo0g5hm7lbuv.cloudfront.net/20756/10598/debian/package_files/4252891.deb?Expires=1703736327&Signature=mUdjSC4asVKVmfZMwVWiJY2cD4uvrLvlKKWqb3o4KYnrfGlNrOggOGokVeNSMpr9X6E38t-P2PBp4wBeKXjKBXZ6NemDPxxXTMXQBZmMogd6SgmthGGIC0jDkCPLNAOw84u3LEmbIMHmehAQPaUIcRZ3-CCr5O0oe9eYAjjiC2COsmzjNHjgptx1jul18KRcblFgsHtGvpR6EHamTg5zB5NOwYosUZpZbOsF3VAiUfEo79ObSAlBcAT9ECVK5S5flMK17~UsTJ1zTwr7q-uusYt8f1GSoFaKSNCbdo8xgteCmMKVWqiseAnkvhe5Y3VUbPjeKK7bVb7yDCuwoOiUnQ__&Key-Pair-Id=K1ZMSF1EKC3AZL [126164/126164] -> "rmr-dev_4.9.1_amd64.deb" [1] 04:00:27 + sudo dpkg -i rmr-dev_4.9.1_amd64.deb 04:00:27 Selecting previously unselected package rmr-dev. 04:00:27 (Reading database ... 198614 files and directories currently installed.) 04:00:27 Preparing to unpack rmr-dev_4.9.1_amd64.deb ... 04:00:27 Unpacking rmr-dev (4.9.1) ... 04:00:27 Setting up rmr-dev (4.9.1) ... 04:00:27 + rm -f rmr-dev_4.9.1_amd64.deb 04:00:27 + echo '---> install-deb-rmr.sh ends' 04:00:27 ---> install-deb-rmr.sh ends 04:00:27 + echo '---> install-deb-e2ap.sh' 04:00:27 ---> install-deb-e2ap.sh 04:00:27 + set -eux 04:00:27 + version_file=e2ap-version.yaml 04:00:27 + [[ -f e2ap-version.yaml ]] 04:00:27 ++ grep '^repo:' e2ap-version.yaml 04:00:27 ++ cut -d: -f2 04:00:27 ++ xargs 04:00:27 + repo= 04:00:27 ++ grep '^version:' e2ap-version.yaml 04:00:27 ++ xargs 04:00:27 ++ cut -d: -f2 04:00:27 + ver=1.1.0 04:00:27 + [[ -z 1.1.0 ]] 04:00:27 + repo=release 04:00:27 + for deb in "riclibe2ap_${ver}_amd64.deb" "riclibe2ap-dev_${ver}_amd64.deb" 04:00:27 + wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/riclibe2ap_1.1.0_amd64.deb/download.deb 04:00:27 2023-12-28 04:00:27 URL:https://d3fo0g5hm7lbuv.cloudfront.net/20756/10598/debian/package_files/2517358.deb?Expires=1703736327&Signature=v~N3XoRPUxD-PLpi6bq9~vI8dKFgDiLtujEpGaB1I0Y-YcQotMT7u9pHUIRcsunAqcdCbIAFtnA0I8Ihdieg1FxkZuvnaYR1ZdbTkLjFP3o03jQu5kopBIuQ2CKt61yKhtzBC2tcnJugor4zJ~0Cp5ax0QGThFE2gfUUdPQrunfPOxxZ8lHbaHQ~af0CJbwrvufLTFjPiHK-69cHG7qY1QoQUfbIHhmN7HfpuTwv5q8H1AC16oiFVg9BOjagt9nDR5ZKLvwmllOE0bKxy-xbnOAd4q~m7NFDuln7cIJIc5tMsa7T0VbpFrtyskcjIe0DnrTQS4AQVc0JUZMxvYMp9Q__&Key-Pair-Id=K1ZMSF1EKC3AZL [341294/341294] -> "riclibe2ap_1.1.0_amd64.deb" [1] 04:00:27 + sudo dpkg -i riclibe2ap_1.1.0_amd64.deb 04:00:27 Selecting previously unselected package riclibe2ap. 04:00:27 (Reading database ... 198621 files and directories currently installed.) 04:00:27 Preparing to unpack riclibe2ap_1.1.0_amd64.deb ... 04:00:27 Unpacking riclibe2ap (1.1.0) ... 04:00:27 Setting up riclibe2ap (1.1.0) ... 04:00:27 + rm -f riclibe2ap_1.1.0_amd64.deb 04:00:27 + for deb in "riclibe2ap_${ver}_amd64.deb" "riclibe2ap-dev_${ver}_amd64.deb" 04:00:27 + wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/riclibe2ap-dev_1.1.0_amd64.deb/download.deb 04:00:27 2023-12-28 04:00:27 URL:https://d3fo0g5hm7lbuv.cloudfront.net/20756/10598/debian/package_files/2517359.deb?Expires=1703736327&Signature=bpa0OLAoxZSkUlGRdxoQu7zuMKm7mgy3cY8NN81qqaai9GtQqOBLwM5k18bDGTyBw8cPeV~yjM61mKZndb3dBzbhFrq6meRhbUAAZxhEVmpdQs1OzOWop1FHjIiWa7iZVhmXk5CT1bJil8OW1TAThJgaiT5g4CKe6~UewQnPjsSf5OODWJsuKsKBGEfBZBm2QgsTaoXwCKHsapqoiVyKnMHPk1je9Kcn9f~KdD6RQkv2vuWY2PF-7FzM3YEfIr49ScoNKt4cTy70OmX5WAdZlX3DO4D69dMmr8AhuFpH-iEmGE4qmMJIc7YJKtMR7st7mmebgf8sXpoGn-Ar6cmS4A__&Key-Pair-Id=K1ZMSF1EKC3AZL [823070/823070] -> "riclibe2ap-dev_1.1.0_amd64.deb" [1] 04:00:27 + sudo dpkg -i riclibe2ap-dev_1.1.0_amd64.deb 04:00:27 Selecting previously unselected package riclibe2ap-dev. 04:00:28 (Reading database ... 198624 files and directories currently installed.) 04:00:28 Preparing to unpack riclibe2ap-dev_1.1.0_amd64.deb ... 04:00:28 Unpacking riclibe2ap-dev (1.1.0) ... 04:00:28 Setting up riclibe2ap-dev (1.1.0) ... 04:00:28 + rm -f riclibe2ap-dev_1.1.0_amd64.deb 04:00:28 + echo '---> install-deb-e2ap.sh ends' 04:00:28 ---> install-deb-e2ap.sh ends 04:00:28 [EnvInject] - Injecting environment variables from a build step. 04:00:28 [EnvInject] - Injecting as environment variables the properties content 04:00:28 PARALLEL=False 04:00:28 04:00:28 [EnvInject] - Variables injected successfully. 04:00:28 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash -l /tmp/jenkins15736338701309751592.sh 04:00:28 ---> tox-run.sh 04:00:28 + PATH=/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:28 + ARCHIVE_TOX_DIR=/w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/archives/tox 04:00:28 + ARCHIVE_DOC_DIR=/w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/archives/docs 04:00:28 + mkdir -p /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/archives/tox 04:00:28 + cd /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/. 04:00:28 + source /home/jenkins/lf-env.sh 04:00:28 + lf-activate-venv --venv-file /tmp/.toxenv tox virtualenv urllib3~=1.26.15 04:00:28 ++ mktemp -d /tmp/venv-XXXX 04:00:28 + lf_venv=/tmp/venv-UCaD 04:00:28 + local venv_file=/tmp/.os_lf_venv 04:00:28 + local python=python3 04:00:28 + local options 04:00:28 + local set_path=true 04:00:28 + local install_args= 04:00:28 ++ getopt -o np:v: -l no-path,system-site-packages,python:,venv-file: -n lf-activate-venv -- --venv-file /tmp/.toxenv tox virtualenv urllib3~=1.26.15 04:00:28 + options=' --venv-file '\''/tmp/.toxenv'\'' -- '\''tox'\'' '\''virtualenv'\'' '\''urllib3~=1.26.15'\''' 04:00:28 + eval set -- ' --venv-file '\''/tmp/.toxenv'\'' -- '\''tox'\'' '\''virtualenv'\'' '\''urllib3~=1.26.15'\''' 04:00:28 ++ set -- --venv-file /tmp/.toxenv -- tox virtualenv urllib3~=1.26.15 04:00:28 + true 04:00:28 + case $1 in 04:00:28 + venv_file=/tmp/.toxenv 04:00:28 + shift 2 04:00:28 + true 04:00:28 + case $1 in 04:00:28 + shift 04:00:28 + break 04:00:28 + case $python in 04:00:28 + local pkg_list= 04:00:28 + [[ -d /opt/pyenv ]] 04:00:28 + echo 'Setup pyenv:' 04:00:28 Setup pyenv: 04:00:28 + export PYENV_ROOT=/opt/pyenv 04:00:28 + PYENV_ROOT=/opt/pyenv 04:00:28 + export PATH=/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:28 + PATH=/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:28 + pyenv versions 04:00:28 system 04:00:28 3.8.13 04:00:28 3.9.13 04:00:28 * 3.10.6 (set by /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.python-version) 04:00:28 + command -v pyenv 04:00:28 ++ pyenv init - --no-rehash 04:00:28 + eval 'PATH="$(bash --norc -ec '\''IFS=:; paths=($PATH); for i in ${!paths[@]}; do if [[ ${paths[i]} == "'\''/opt/pyenv/shims'\''" ]]; then unset '\''\'\'''\''paths[i]'\''\'\'''\''; fi; done; echo "${paths[*]}"'\'')" 04:00:28 export PATH="/opt/pyenv/shims:${PATH}" 04:00:28 export PYENV_SHELL=bash 04:00:28 source '\''/opt/pyenv/libexec/../completions/pyenv.bash'\'' 04:00:28 pyenv() { 04:00:28 local command 04:00:28 command="${1:-}" 04:00:28 if [ "$#" -gt 0 ]; then 04:00:28 shift 04:00:28 fi 04:00:28 04:00:28 case "$command" in 04:00:28 rehash|shell) 04:00:28 eval "$(pyenv "sh-$command" "$@")" 04:00:28 ;; 04:00:28 *) 04:00:28 command pyenv "$command" "$@" 04:00:28 ;; 04:00:28 esac 04:00:28 }' 04:00:28 +++ bash --norc -ec 'IFS=:; paths=($PATH); for i in ${!paths[@]}; do if [[ ${paths[i]} == "/opt/pyenv/shims" ]]; then unset '\''paths[i]'\''; fi; done; echo "${paths[*]}"' 04:00:28 ++ PATH=/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:28 ++ export PATH=/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:28 ++ PATH=/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:28 ++ export PYENV_SHELL=bash 04:00:28 ++ PYENV_SHELL=bash 04:00:28 ++ source /opt/pyenv/libexec/../completions/pyenv.bash 04:00:28 +++ complete -F _pyenv pyenv 04:00:28 ++ lf-pyver python3 04:00:28 ++ local py_version_xy=python3 04:00:28 ++ local py_version_xyz= 04:00:28 ++ pyenv versions 04:00:28 ++ local command 04:00:28 ++ command=versions 04:00:28 ++ '[' 1 -gt 0 ']' 04:00:28 ++ shift 04:00:28 ++ case "$command" in 04:00:28 ++ command pyenv versions 04:00:28 ++ pyenv versions 04:00:28 ++ grep -E '^[0-9.]*[0-9]$' 04:00:28 ++ sed 's/^[ *]* //' 04:00:28 ++ awk '{ print $1 }' 04:00:28 ++ [[ ! -s /tmp/.pyenv_versions ]] 04:00:28 +++ grep '^3' /tmp/.pyenv_versions 04:00:28 +++ tail -n 1 04:00:28 +++ sort -V 04:00:28 ++ py_version_xyz=3.10.6 04:00:28 ++ [[ -z 3.10.6 ]] 04:00:28 ++ echo 3.10.6 04:00:28 ++ return 0 04:00:28 + pyenv local 3.10.6 04:00:28 + local command 04:00:28 + command=local 04:00:28 + '[' 2 -gt 0 ']' 04:00:28 + shift 04:00:28 + case "$command" in 04:00:28 + command pyenv local 3.10.6 04:00:28 + pyenv local 3.10.6 04:00:28 + for arg in "$@" 04:00:28 + case $arg in 04:00:28 + pkg_list+='tox ' 04:00:28 + for arg in "$@" 04:00:28 + case $arg in 04:00:28 + pkg_list+='virtualenv ' 04:00:28 + for arg in "$@" 04:00:28 + case $arg in 04:00:28 + pkg_list+='urllib3~=1.26.15 ' 04:00:28 + [[ -f /tmp/.toxenv ]] 04:00:28 ++ cat /tmp/.toxenv 04:00:28 + lf_venv=/tmp/venv-5Mha 04:00:28 + echo 'lf-activate-venv(): INFO: Reuse venv:/tmp/venv-5Mha from' file:/tmp/.toxenv 04:00:28 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-5Mha from file:/tmp/.toxenv 04:00:28 + /tmp/venv-5Mha/bin/python3 -m pip install --upgrade --quiet pip virtualenv 04:00:29 + [[ -z tox virtualenv urllib3~=1.26.15 ]] 04:00:29 + echo 'lf-activate-venv(): INFO: Installing: tox virtualenv urllib3~=1.26.15 ' 04:00:29 lf-activate-venv(): INFO: Installing: tox virtualenv urllib3~=1.26.15 04:00:29 + /tmp/venv-5Mha/bin/python3 -m pip install --upgrade --quiet --upgrade-strategy eager tox virtualenv urllib3~=1.26.15 04:00:31 + type python3 04:00:31 + true 04:00:31 + echo 'lf-activate-venv(): INFO: Adding /tmp/venv-5Mha/bin to PATH' 04:00:31 lf-activate-venv(): INFO: Adding /tmp/venv-5Mha/bin to PATH 04:00:31 + PATH=/tmp/venv-5Mha/bin:/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:31 + return 0 04:00:31 + [[ -d /opt/pyenv ]] 04:00:31 + echo '---> Setting up pyenv' 04:00:31 ---> Setting up pyenv 04:00:31 + export PYENV_ROOT=/opt/pyenv 04:00:31 + PYENV_ROOT=/opt/pyenv 04:00:31 + export PATH=/opt/pyenv/bin:/tmp/venv-5Mha/bin:/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:31 + PATH=/opt/pyenv/bin:/tmp/venv-5Mha/bin:/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 04:00:31 ++ pwd 04:00:31 + PYTHONPATH=/w/workspace/ric-plt-xapp-frame-py-pypi-verify-master 04:00:31 + export PYTHONPATH 04:00:31 + export TOX_TESTENV_PASSENV=PYTHONPATH 04:00:31 + TOX_TESTENV_PASSENV=PYTHONPATH 04:00:31 + tox --version 04:00:31 4.11.4 from /tmp/venv-5Mha/lib/python3.10/site-packages/tox/__init__.py 04:00:31 + PARALLEL=False 04:00:31 + TOX_OPTIONS_LIST= 04:00:31 + [[ -n code,flake8 ]] 04:00:31 + TOX_OPTIONS_LIST=' -e code,flake8' 04:00:31 + case ${PARALLEL,,} in 04:00:31 + tee -a /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/archives/tox/tox.log 04:00:31 + tox -e code,flake8 04:00:32 code: install_deps> python -I -m pip install coverage pytest pytest-cov six 04:00:36 .pkg: install_requires> python -I -m pip install 'setuptools>=40.8.0' wheel 04:00:37 .pkg: _optional_hooks> python /tmp/venv-5Mha/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ 04:00:37 .pkg: get_requires_for_build_sdist> python /tmp/venv-5Mha/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ 04:00:37 .pkg: get_requires_for_build_wheel> python /tmp/venv-5Mha/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ 04:00:37 .pkg: install_requires_for_build_wheel> python -I -m pip install wheel 04:00:38 .pkg: freeze> python -m pip freeze --all 04:00:38 .pkg: pip==23.3.1,setuptools==69.0.2,wheel==0.42.0 04:00:38 .pkg: prepare_metadata_for_build_wheel> python /tmp/venv-5Mha/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ 04:00:38 .pkg: build_sdist> python /tmp/venv-5Mha/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ 04:00:38 code: install_package_deps> python -I -m pip install inotify inotify-simple mdclogpy msgpack 'protobuf<3.21.0' requests 'ricsdl<4.0.0,>=3.0.0' 04:00:45 code: install_package> python -I -m pip install --force-reinstall --no-deps /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.tox/.tmp/package/1/ricxappframe-3.2.2.tar.gz 04:00:46 code: freeze> python -m pip freeze --all 04:00:46 code: async-timeout==4.0.3,certifi==2023.11.17,charset-normalizer==3.3.2,coverage==7.3.4,exceptiongroup==1.2.0,hiredis==2.0.0,idna==3.6,iniconfig==2.0.0,inotify==0.2.10,inotify-simple==1.3.5,mdclogpy==1.1.4,msgpack==1.0.7,nose==1.3.7,packaging==23.2,pip==23.3.1,pluggy==1.3.0,protobuf==3.20.3,pytest==7.4.3,pytest-cov==4.1.0,redis==4.3.6,requests==2.31.0,ricsdl==3.1.3,ricxappframe @ file:///w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.tox/.tmp/package/1/ricxappframe-3.2.2.tar.gz#sha256=29f3253066e75dc01e8ce24bb46d98f4d2674231160a469f38acd5b25a02e918,setuptools==69.0.2,six==1.16.0,tomli==2.0.1,urllib3==2.1.0,wheel==0.42.0 04:00:46 code: commands[0]> pytest --cov ricxappframe --cov-report xml --cov-report term-missing --cov-report html --cov-fail-under=70 --junitxml=/tmp/tests.xml 04:00:47 ============================= test session starts ============================== 04:00:47 platform linux -- Python 3.10.6, pytest-7.4.3, pluggy-1.3.0 04:00:47 cachedir: .tox/code/.pytest_cache 04:00:47 rootdir: /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master 04:00:47 plugins: cov-4.1.0 04:00:47 collected 75 items 04:00:47 04:00:47 tests/test_Logger.py .............. [ 18%] 04:00:48 tests/test_alarm.py .. [ 21%] 04:00:52 tests/test_config.py FFF [ 25%] 04:03:03 tests/test_e2ap.py ........ [ 36%] 04:03:03 tests/test_init.py .F1703736246131 28073/RMR [INFO] sends: ts=1703736246 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:04:06 1703736246131 28073/RMR [INFO] sends: ts=1703736246 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:04:06 1703736246131 28073/RMR [INFO] sends: ts=1703736246 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:04:06 1703736246131 28073/RMR [INFO] sends: ts=1703736246 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:04:06 F [ 40%] 04:04:06 tests/test_metric.py .. [ 42%] 04:04:10 tests/test_rest.py . [ 44%] 04:04:10 tests/test_rmr.py 1703736253714 28073/RMR [INFO] sends: ts=1703736253 src=prd-ubuntu1804-builder-2c-2g-2154:3564 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:04:13 1703736253714 28073/RMR [INFO] sends: ts=1703736253 src=prd-ubuntu1804-builder-2c-2g-2154:3564 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:04:13 1703736253714 28073/RMR [INFO] sends: ts=1703736253 src=prd-ubuntu1804-builder-2c-2g-2154:3564 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:04:13 1703736253714 28073/RMR [INFO] sends: ts=1703736253 src=prd-ubuntu1804-builder-2c-2g-2154:3564 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:04:13 ............. [ 61%] 04:04:20 tests/test_rmr_mocks.py ... [ 65%] 04:04:20 tests/test_rmrclib.py .. [ 68%] 04:04:20 tests/test_sdl.py ..... [ 74%] 04:04:21 tests/test_subscribe.py .... [ 80%] 04:04:21 tests/test_symptomdata.py .... [ 85%] 04:04:21 tests/test_xapps.py FFFFFFFFFFF [100%] 04:09:59 04:09:59 =================================== FAILURES =================================== 04:09:59 ______________________________ test_config_no_env ______________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fac994d8610> 04:09:59 04:09:59 def test_config_no_env(monkeypatch): 04:09:59 init_config_file() 04:09:59 monkeypatch.delenv(Constants.CONFIG_FILE_ENV, raising=False) 04:09:59 04:09:59 def default_rmr_handler(self, summary, sbuf): 04:09:59 pass 04:09:59 04:09:59 config_event_seen = False 04:09:59 04:09:59 def config_handler(self, json): 04:09:59 nonlocal config_event_seen 04:09:59 config_event_seen = True 04:09:59 04:09:59 global rmr_xapp_noconfig 04:09:59 rmr_xapp_noconfig = RMRXapp(default_rmr_handler, config_handler=config_handler, rmr_port=4652, use_fake_sdl=True) 04:09:59 # in unit tests we need to thread here or else execution is not returned! 04:09:59 rmr_xapp_noconfig.run(thread=True, rmr_timeout=1) 04:09:59 04:09:59 write_config_file() 04:09:59 # give the work loop a chance to timeout on RMR and process the config event 04:09:59 time.sleep(3) 04:09:59 assert not config_event_seen 04:09:59 > rmr_xapp_noconfig.stop() 04:09:59 04:09:59 tests/test_config.py:66: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:965: in stop 04:09:59 super().stop() 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736052490, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 1703736053488 28073/RMR [INFO] sends: ts=1703736053 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736053488 28073/RMR [INFO] sends: ts=1703736053 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736053488 28073/RMR [INFO] sends: ts=1703736053 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736053488 28073/RMR [INFO] sends: ts=1703736053 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736084492 28073/RMR [INFO] sends: ts=1703736084 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736084492 28073/RMR [INFO] sends: ts=1703736084 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736084492 28073/RMR [INFO] sends: ts=1703736084 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736084492 28073/RMR [INFO] sends: ts=1703736084 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 _________________________ test_default_config_handler __________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fac9061a7d0> 04:09:59 04:09:59 def test_default_config_handler(monkeypatch): 04:09:59 """Just for coverage""" 04:09:59 init_config_file() 04:09:59 monkeypatch.setenv(Constants.CONFIG_FILE_ENV, config_file_path) 04:09:59 04:09:59 def default_rmr_handler(self, summary, sbuf): 04:09:59 pass 04:09:59 04:09:59 # listen port is irrelevant, no messages arrive 04:09:59 global rmr_xapp_defconfig 04:09:59 rmr_xapp_defconfig = RMRXapp(default_rmr_handler, rmr_port=4567, use_fake_sdl=True) 04:09:59 # in unit tests we need to thread here or else execution is not returned! 04:09:59 rmr_xapp_defconfig.run(thread=True, rmr_timeout=1) 04:09:59 write_config_file() 04:09:59 # give the work loop a chance to timeout on RMR and process the config event 04:09:59 time.sleep(3) 04:09:59 > rmr_xapp_defconfig.stop() 04:09:59 04:09:59 tests/test_config.py:86: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:965: in stop 04:09:59 super().stop() 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 1703736087029 28073/RMR [INFO] sends: ts=1703736087 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736087030 28073/RMR [INFO] sends: ts=1703736087 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736087030 28073/RMR [INFO] sends: ts=1703736087 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736087030 28073/RMR [INFO] sends: ts=1703736087 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736115495 28073/RMR [INFO] sends: ts=1703736115 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736115495 28073/RMR [INFO] sends: ts=1703736115 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736115495 28073/RMR [INFO] sends: ts=1703736115 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736115495 28073/RMR [INFO] sends: ts=1703736115 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736118033 28073/RMR [INFO] sends: ts=1703736118 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736118033 28073/RMR [INFO] sends: ts=1703736118 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736118033 28073/RMR [INFO] sends: ts=1703736118 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736118033 28073/RMR [INFO] sends: ts=1703736118 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 __________________________ test_custom_config_handler __________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fac9a0615d0> 04:09:59 04:09:59 def test_custom_config_handler(monkeypatch): 04:09:59 # point watcher at the file 04:09:59 init_config_file() 04:09:59 monkeypatch.setenv(Constants.CONFIG_FILE_ENV, config_file_path) 04:09:59 04:09:59 def default_handler(self, summary, sbuf): 04:09:59 pass 04:09:59 04:09:59 startup_config_event = False 04:09:59 change_config_event = False 04:09:59 04:09:59 def config_handler(self, json): 04:09:59 mdc_logger.info("config_handler: json {}".format(json)) 04:09:59 nonlocal startup_config_event 04:09:59 nonlocal change_config_event 04:09:59 if "start" in json: 04:09:59 startup_config_event = True 04:09:59 if "change" in json: 04:09:59 change_config_event = True 04:09:59 04:09:59 # listen port is irrelevant, no messages arrive 04:09:59 global rmr_xapp_config 04:09:59 rmr_xapp_config = RMRXapp(default_handler, config_handler=config_handler, rmr_port=4567, use_fake_sdl=True) 04:09:59 assert startup_config_event 04:09:59 rmr_xapp_config.run(thread=True, rmr_timeout=1) # in unit tests we need to thread here or else execution is not returned! 04:09:59 write_config_file() 04:09:59 # give the work loop a chance to timeout on RMR and process the config event 04:09:59 time.sleep(3) 04:09:59 assert change_config_event 04:09:59 > rmr_xapp_config.stop() 04:09:59 04:09:59 tests/test_config.py:119: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:965: in stop 04:09:59 super().stop() 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 1703736120552 28073/RMR [INFO] sends: ts=1703736120 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736120553 28073/RMR [INFO] sends: ts=1703736120 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736120553 28073/RMR [INFO] sends: ts=1703736120 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736120553 28073/RMR [INFO] sends: ts=1703736120 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736146498 28073/RMR [INFO] sends: ts=1703736146 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736146498 28073/RMR [INFO] sends: ts=1703736146 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736146498 28073/RMR [INFO] sends: ts=1703736146 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736146498 28073/RMR [INFO] sends: ts=1703736146 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736149036 28073/RMR [INFO] sends: ts=1703736149 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736149036 28073/RMR [INFO] sends: ts=1703736149 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736149036 28073/RMR [INFO] sends: ts=1703736149 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736149036 28073/RMR [INFO] sends: ts=1703736149 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736151556 28073/RMR [INFO] sends: ts=1703736151 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736151556 28073/RMR [INFO] sends: ts=1703736151 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736151556 28073/RMR [INFO] sends: ts=1703736151 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736151556 28073/RMR [INFO] sends: ts=1703736151 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 --------------------------- Captured stderr teardown --------------------------- 04:09:59 1703736177501 28073/RMR [INFO] sends: ts=1703736177 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736177501 28073/RMR [INFO] sends: ts=1703736177 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736177501 28073/RMR [INFO] sends: ts=1703736177 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736177501 28073/RMR [INFO] sends: ts=1703736177 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736180039 28073/RMR [INFO] sends: ts=1703736180 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736180040 28073/RMR [INFO] sends: ts=1703736180 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736180040 28073/RMR [INFO] sends: ts=1703736180 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736180040 28073/RMR [INFO] sends: ts=1703736180 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736182559 28073/RMR [INFO] sends: ts=1703736182 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736182560 28073/RMR [INFO] sends: ts=1703736182 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736182560 28073/RMR [INFO] sends: ts=1703736182 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736182560 28073/RMR [INFO] sends: ts=1703736182 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 ---------------------------- Captured log teardown ----------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ____________________________ test_init_general_xapp ____________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 def test_init_general_xapp(): 04:09:59 def entry(self): 04:09:59 # normally we would have some kind of loop here 04:09:59 print("bye") 04:09:59 04:09:59 gen_xapp = Xapp(xapp_ready_cb=entry, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 gen_xapp.run() 04:09:59 time.sleep(1) 04:09:59 > gen_xapp.stop() # pytest will never return without this. 04:09:59 04:09:59 tests/test_init.py:49: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736183125, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 bye 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 1703736184125 28073/RMR [INFO] sends: ts=1703736184 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736184125 28073/RMR [INFO] sends: ts=1703736184 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736184125 28073/RMR [INFO] sends: ts=1703736184 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736184125 28073/RMR [INFO] sends: ts=1703736184 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736208505 28073/RMR [INFO] sends: ts=1703736208 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736208505 28073/RMR [INFO] sends: ts=1703736208 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736208505 28073/RMR [INFO] sends: ts=1703736208 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736208505 28073/RMR [INFO] sends: ts=1703736208 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736211043 28073/RMR [INFO] sends: ts=1703736211 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736211043 28073/RMR [INFO] sends: ts=1703736211 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736211043 28073/RMR [INFO] sends: ts=1703736211 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736211043 28073/RMR [INFO] sends: ts=1703736211 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736213564 28073/RMR [INFO] sends: ts=1703736213 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736213564 28073/RMR [INFO] sends: ts=1703736213 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736213564 28073/RMR [INFO] sends: ts=1703736213 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736213564 28073/RMR [INFO] sends: ts=1703736213 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ______________________________ test_init_rmr_xapp ______________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 def test_init_rmr_xapp(): 04:09:59 def post_init(self): 04:09:59 print("hey") 04:09:59 04:09:59 def foo(self, _summary, _sbuf): 04:09:59 pass 04:09:59 04:09:59 rmr_xapp = RMRXapp(foo, post_init=post_init, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 # pytest will never return without thread and stop 04:09:59 rmr_xapp.run(thread=True) 04:09:59 time.sleep(1) 04:09:59 > rmr_xapp.stop() 04:09:59 04:09:59 tests/test_init.py:63: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:965: in stop 04:09:59 super().stop() 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736214693, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 hey 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 1703736215128 28073/RMR [INFO] sends: ts=1703736215 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736215128 28073/RMR [INFO] sends: ts=1703736215 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736215128 28073/RMR [INFO] sends: ts=1703736215 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736215128 28073/RMR [INFO] sends: ts=1703736215 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736215704 28073/RMR [INFO] sends: ts=1703736215 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736215704 28073/RMR [INFO] sends: ts=1703736215 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736215704 28073/RMR [INFO] sends: ts=1703736215 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736215704 28073/RMR [INFO] sends: ts=1703736215 src=prd-ubuntu1804-builder-2c-2g-2154:4562 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736239510 28073/RMR [INFO] sends: ts=1703736239 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736239510 28073/RMR [INFO] sends: ts=1703736239 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736239510 28073/RMR [INFO] sends: ts=1703736239 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736239510 28073/RMR [INFO] sends: ts=1703736239 src=prd-ubuntu1804-builder-2c-2g-2154:4652 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736242046 28073/RMR [INFO] sends: ts=1703736242 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736242046 28073/RMR [INFO] sends: ts=1703736242 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736242046 28073/RMR [INFO] sends: ts=1703736242 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736242046 28073/RMR [INFO] sends: ts=1703736242 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736244568 28073/RMR [INFO] sends: ts=1703736244 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4569 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736244568 28073/RMR [INFO] sends: ts=1703736244 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:4564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736244568 28073/RMR [INFO] sends: ts=1703736244 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3564 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 1703736244568 28073/RMR [INFO] sends: ts=1703736244 src=prd-ubuntu1804-builder-2c-2g-2154:4567 target=127.0.0.1:3563 open=0 succ=0 fail=0 (hard=0 soft=0) 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ________________________________ test_rmr_init _________________________________ 04:09:59 04:09:59 def test_rmr_init(): 04:09:59 04:09:59 # test variables 04:09:59 def_pay = None 04:09:59 sixty_pay = None 04:09:59 04:09:59 # create rmr app 04:09:59 04:09:59 def default_handler(self, summary, sbuf): 04:09:59 nonlocal def_pay 04:09:59 def_pay = json.loads(summary["payload"]) 04:09:59 self.rmr_free(sbuf) 04:09:59 04:09:59 def sixtythou_handler(self, summary, sbuf): 04:09:59 nonlocal sixty_pay 04:09:59 sixty_pay = json.loads(summary["payload"]) 04:09:59 self.rmr_free(sbuf) 04:09:59 04:09:59 global rmr_xapp 04:09:59 rmr_xapp = RMRXapp(default_handler, rmr_port=4564, use_fake_sdl=True) 04:09:59 rmr_xapp.register_callback(sixtythou_handler, 60000) 04:09:59 rmr_xapp.run(thread=True) # in unit tests we need to thread here or else execution is not returned! 04:09:59 04:09:59 time.sleep(1) 04:09:59 04:09:59 # create a general xapp that will demonstrate some SDL functionality and launch some requests against the rmr xapp 04:09:59 04:09:59 def entry(self): 04:09:59 04:09:59 time.sleep(1) 04:09:59 04:09:59 self.sdl_set("testns", "mykey", 6) 04:09:59 assert self.sdl_get("testns", "mykey") == 6 04:09:59 assert self.sdl_find_and_get("testns", "myk") == {"mykey": 6} 04:09:59 assert self.healthcheck() 04:09:59 04:09:59 val = json.dumps({"test send 60000": 1}).encode() 04:09:59 self.rmr_send(val, 60000) 04:09:59 04:09:59 val = json.dumps({"test send 60001": 2}).encode() 04:09:59 self.rmr_send(val, 60001) 04:09:59 04:09:59 self.sdl_delete("testns", "bogus") 04:09:59 04:09:59 global gen_xapp 04:09:59 > gen_xapp = Xapp(entrypoint=entry, use_fake_sdl=True) 04:09:59 E TypeError: Xapp.__init__() got an unexpected keyword argument 'entrypoint' 04:09:59 04:09:59 tests/test_xapps.py:78: TypeError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736261669, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 _____________________________ test_rmr_healthcheck _____________________________ 04:09:59 04:09:59 def test_rmr_healthcheck(): 04:09:59 # thanos uses the rmr xapp to healthcheck the rmr xapp 04:09:59 04:09:59 # test variables 04:09:59 health_pay = None 04:09:59 04:09:59 def post_init(self): 04:09:59 self.rmr_send(b"", Constants.RIC_HEALTH_CHECK_REQ) 04:09:59 04:09:59 def default_handler(self, summary, sbuf): 04:09:59 pass 04:09:59 04:09:59 global rmr_xapp_health 04:09:59 rmr_xapp_health = RMRXapp(default_handler, post_init=post_init, rmr_port=4666, use_fake_sdl=True) 04:09:59 04:09:59 def health_handler(self, summary, sbuf): 04:09:59 nonlocal health_pay 04:09:59 health_pay = summary["payload"] 04:09:59 self.rmr_free(sbuf) 04:09:59 04:09:59 rmr_xapp_health.register_callback(health_handler, Constants.RIC_HEALTH_CHECK_RESP) 04:09:59 rmr_xapp_health.run(thread=True) # in unit tests we need to thread here or else execution is not returned! 04:09:59 04:09:59 time.sleep(1) 04:09:59 04:09:59 > assert health_pay == b"OK\n" 04:09:59 E AssertionError: assert None == b'OK\n' 04:09:59 04:09:59 tests/test_xapps.py:112: AssertionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736262694, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ___________________________ test_rnib_get_list_nodeb ___________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 rnib_information = [b'\n\nnodeb_5678\x12\x14\n\tplmn_5678\x12\x07nb_5678\x18\x06', b''] 04:09:59 04:09:59 def test_rnib_get_list_nodeb(rnib_information): 04:09:59 global rnib_xapp 04:09:59 rnib_xapp = _BaseXapp(rmr_port=4777, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 04:09:59 # Test there is no rnib information. 04:09:59 gnb_list = rnib_xapp.get_list_gnb_ids() 04:09:59 enb_list = rnib_xapp.get_list_enb_ids() 04:09:59 assert len(gnb_list) == 0 04:09:59 assert len(enb_list) == 0 04:09:59 04:09:59 # Add rnib information directly. 04:09:59 for rnib in rnib_information: 04:09:59 rnib_xapp.sdl.add_member(sdl_namespaces.E2_MANAGER, "ENB", rnib, usemsgpack=False) 04:09:59 rnib_xapp.sdl.add_member(sdl_namespaces.E2_MANAGER, "GNB", rnib, usemsgpack=False) 04:09:59 04:09:59 gnb_list = rnib_xapp.get_list_gnb_ids() 04:09:59 assert len(gnb_list) == len(rnib_information) 04:09:59 for gnb in gnb_list: 04:09:59 assert gnb.SerializeToString() in rnib_information 04:09:59 04:09:59 enb_list = rnib_xapp.get_list_enb_ids() 04:09:59 assert len(enb_list) == len(rnib_information) 04:09:59 for enb in enb_list: 04:09:59 assert enb.SerializeToString() in rnib_information 04:09:59 04:09:59 > rnib_xapp.stop() 04:09:59 04:09:59 tests/test_xapps.py:140: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736263720, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:23,725 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:25,731 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:29,742 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:37,752 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:53,768 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 _________________________ test_rnib_get_list_all_nodeb _________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 rnib_information = [b'\n\nnodeb_5678\x12\x14\n\tplmn_5678\x12\x07nb_5678\x18\x06', b''] 04:09:59 04:09:59 def test_rnib_get_list_all_nodeb(rnib_information): 04:09:59 global rnib_xapp 04:09:59 rnib_xapp = _BaseXapp(rmr_port=4777, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 04:09:59 # Add rnib information directly. 04:09:59 for rnib in rnib_information: 04:09:59 rnib_xapp.sdl.add_member(sdl_namespaces.E2_MANAGER, "GNB", rnib, usemsgpack=False) 04:09:59 04:09:59 nb_list = rnib_xapp.GetListNodebIds() 04:09:59 assert len(nb_list) == 2 04:09:59 04:09:59 for rnib in rnib_information: 04:09:59 rnib_xapp.sdl.add_member(sdl_namespaces.E2_MANAGER, "ENB", rnib, usemsgpack=False) 04:09:59 04:09:59 nb_list = rnib_xapp.GetListNodebIds() 04:09:59 assert len(nb_list) == 4 04:09:59 04:09:59 > rnib_xapp.stop() 04:09:59 04:09:59 tests/test_xapps.py:160: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736294260, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:54,267 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:04:56,273 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:00,283 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:08,291 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,303 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ___________________________ test_rnib_get_list_cells ___________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 rnib_cellinformation = [b'\x08\x01', b'\x08\x01'] 04:09:59 04:09:59 def test_rnib_get_list_cells(rnib_cellinformation): 04:09:59 global rnib_xapp 04:09:59 04:09:59 rnib_xapp = _BaseXapp(rmr_port=4777, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 04:09:59 mynb = pb_nb.NbIdentity() 04:09:59 mynb.inventory_name = "nodeb_1234" 04:09:59 mynb.global_nb_id.plmn_id = "plmn_1234" 04:09:59 mynb.global_nb_id.nb_id = "nb_1234" 04:09:59 mynb.connection_status = 1 04:09:59 rnib_xapp.sdl.add_member(sdl_namespaces.E2_MANAGER, "ENB", mynb.SerializeToString(), usemsgpack=False) 04:09:59 04:09:59 # Add rnib information directly. 04:09:59 for rnib in rnib_cellinformation: 04:09:59 rnib_xapp.sdl.add_member(sdl_namespaces.E2_MANAGER, "ENBCELL1", rnib, usemsgpack=False) 04:09:59 rnib_xapp.sdl.add_member(sdl_namespaces.E2_MANAGER, "ENBCELL2", rnib, usemsgpack=False) 04:09:59 > rnib_xapp.stop() 04:09:59 04:09:59 tests/test_xapps.py:179: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ---------------------------- Captured stdout setup ----------------------------- 04:09:59 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736324757, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:24,762 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:26,768 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:30,778 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:38,792 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:54,810 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 _____________________________ test_rnib_get_nodeb ______________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 rnib_helpers = 04:09:59 04:09:59 def test_rnib_get_nodeb(rnib_helpers): 04:09:59 global rnib_xapp 04:09:59 rnib_xapp = _BaseXapp(rmr_port=4777, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 nb1 = rnib_helpers.createNodebInfo('nodeb_1234', 'GNB', '192.168.1.1', 8088) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "RAN:" + 'nodeb_1234', nb1.SerializeToString(), usemsgpack=False) 04:09:59 nb2 = rnib_helpers.createNodebInfo('nodeb_1234', 'ENB', '192.168.1.2', 8088) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "RAN:" + 'nodeb_1235', nb2.SerializeToString(), usemsgpack=False) 04:09:59 04:09:59 gnb = rnib_xapp.GetNodeb('nodeb_1235') 04:09:59 assert gnb == nb2 04:09:59 gnb = rnib_xapp.GetNodeb('nodeb_1234') 04:09:59 assert gnb == nb1 04:09:59 gnb = rnib_xapp.GetNodeb('nodeb_1230') 04:09:59 assert gnb is None 04:09:59 > rnib_xapp.stop() 04:09:59 04:09:59 tests/test_xapps.py:196: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736355286, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:55,290 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:05:57,297 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:01,308 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:09,321 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,335 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ______________________________ test_rnib_get_cell ______________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 rnib_helpers = 04:09:59 04:09:59 def test_rnib_get_cell(rnib_helpers): 04:09:59 global rnib_xapp 04:09:59 rnib_xapp = _BaseXapp(rmr_port=4777, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 c1 = rnib_helpers.createCell('c1234', 8) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "PCI:c1234:08", c1.SerializeToString(), usemsgpack=False) 04:09:59 c2 = rnib_helpers.createCell('c1235', 11) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "PCI:c1235:0b", c2.SerializeToString(), usemsgpack=False) 04:09:59 04:09:59 cell = rnib_xapp.GetCell('c1235', 11) 04:09:59 assert cell == c2 04:09:59 cell = rnib_xapp.GetCell('c1234', 8) 04:09:59 assert cell == c1 04:09:59 cell = rnib_xapp.GetCell('c1236', 11) 04:09:59 assert cell is None 04:09:59 > rnib_xapp.stop() 04:09:59 04:09:59 tests/test_xapps.py:213: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736385797, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:25,803 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:27,809 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:31,818 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:39,830 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:55,839 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ___________________________ test_rnib_get_cell_by_id ___________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 rnib_helpers = 04:09:59 04:09:59 def test_rnib_get_cell_by_id(rnib_helpers): 04:09:59 global rnib_xapp 04:09:59 rnib_xapp = _BaseXapp(rmr_port=4777, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 c1 = rnib_helpers.createCell('c1234', 8) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "CELL:c1234", c1.SerializeToString(), usemsgpack=False) 04:09:59 c2 = rnib_helpers.createCell('c1235', 11) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "CELL:c1235", c2.SerializeToString(), usemsgpack=False) 04:09:59 04:09:59 cell = rnib_xapp.GetCellById('LTE_CELL', 'c1235') 04:09:59 assert cell == c2 04:09:59 cell = rnib_xapp.GetCellById('LTE_CELL', 'c1234') 04:09:59 assert cell == c1 04:09:59 cell = rnib_xapp.GetCellById('LTE_CELL', 'c1236') 04:09:59 assert cell is None 04:09:59 > rnib_xapp.stop() 04:09:59 04:09:59 tests/test_xapps.py:230: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736416299, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:56,305 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:06:58,311 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:02,319 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:10,327 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,346 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 _____________________________ test_rnib_get_cells ______________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 rnib_helpers = 04:09:59 04:09:59 def test_rnib_get_cells(rnib_helpers): 04:09:59 global rnib_xapp 04:09:59 rnib_xapp = _BaseXapp(rmr_port=4777, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 nb1 = rnib_helpers.createNodebInfo('nodeb_1234', 'GNB', '192.168.1.1', 8088) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "RAN:" + 'nodeb_1234', nb1.SerializeToString(), usemsgpack=False) 04:09:59 nb2 = rnib_helpers.createNodebInfo('nodeb_1234', 'ENB', '192.168.1.2', 8088) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "RAN:" + 'nodeb_1235', nb2.SerializeToString(), usemsgpack=False) 04:09:59 04:09:59 sc = rnib_xapp.GetCellList('nodeb_1235') 04:09:59 assert sc == nb2.enb.served_cells 04:09:59 sc = rnib_xapp.GetCellList('nodeb_1234') 04:09:59 assert sc == nb1.gnb.served_nr_cells 04:09:59 sc = rnib_xapp.GetCellList('nodeb_1230') 04:09:59 assert sc is None 04:09:59 > rnib_xapp.stop() 04:09:59 04:09:59 tests/test_xapps.py:247: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736446818, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:26,823 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:28,831 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:32,839 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:40,853 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:56,868 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 __________________________ test_rnib_get_global_nodeb __________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 rnib_helpers = 04:09:59 04:09:59 def test_rnib_get_global_nodeb(rnib_helpers): 04:09:59 global rnib_xapp 04:09:59 rnib_xapp = _BaseXapp(rmr_port=4777, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 nb1 = rnib_helpers.createNodeb('nodeb_1234', '358', 'nb_1234') 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "GNB:" + '358:' + 'nodeb_1234', nb1.SerializeToString(), usemsgpack=False) 04:09:59 nb2 = rnib_helpers.createNodeb('nodeb_1235', '356', 'nb_1235') 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "GNB:" + '356:' + 'nodeb_1235', nb2.SerializeToString(), usemsgpack=False) 04:09:59 04:09:59 gnb = rnib_xapp.GetNodebByGlobalNbId('GNB', '356', 'nodeb_1235') 04:09:59 assert gnb == nb2 04:09:59 gnb = rnib_xapp.GetNodebByGlobalNbId('GNB', '358', 'nodeb_1234') 04:09:59 assert gnb == nb1 04:09:59 gnb = rnib_xapp.GetNodebByGlobalNbId('GNB', '356', 'nodeb_1230') 04:09:59 assert gnb is None 04:09:59 > rnib_xapp.stop() 04:09:59 04:09:59 tests/test_xapps.py:264: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736477311, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:57,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:07:59,321 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:03,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:11,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,356 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 __________________________ test_rnib_get_ranfunction ___________________________ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 > sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:203: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/connection.py:60: in create_connection 04:09:59 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 host = 'service-ricplt-appmgr-http.ricplt', port = 8080 04:09:59 family = , type = 04:09:59 proto = 0, flags = 0 04:09:59 04:09:59 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): 04:09:59 """Resolve host and port into list of address info entries. 04:09:59 04:09:59 Translate the host/port argument into a sequence of 5-tuples that contain 04:09:59 all the necessary arguments for creating a socket connected to that service. 04:09:59 host is a domain name, a string representation of an IPv4/v6 address or 04:09:59 None. port is a string service name such as 'http', a numeric port number or 04:09:59 None. By passing None as the value of host and port, you can pass NULL to 04:09:59 the underlying C API. 04:09:59 04:09:59 The family, type and proto arguments can be optionally specified in order to 04:09:59 narrow the list of addresses returned. Passing zero as a value for each of 04:09:59 these arguments selects the full range of results. 04:09:59 """ 04:09:59 # We override this function since we want to translate the numeric family 04:09:59 # and socket type values to enum constants. 04:09:59 addrlist = [] 04:09:59 > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): 04:09:59 E OSError: [Errno 16] Device or resource busy 04:09:59 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/socket.py:955: OSError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 method = 'POST', url = '/ric/v1/deregister', body = '' 04:09:59 headers = {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded'} 04:09:59 retries = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 redirect = False, assert_same_host = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None 04:09:59 release_conn = False, chunked = True, body_pos = None, preload_content = False 04:09:59 decode_content = False, response_kw = {} 04:09:59 parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/ric/v1/deregister', query=None, fragment=None) 04:09:59 destination_scheme = None, conn = None, release_this_conn = True 04:09:59 http_tunnel_required = False, err = None, clean_exit = False 04:09:59 04:09:59 def urlopen( # type: ignore[override] 04:09:59 self, 04:09:59 method: str, 04:09:59 url: str, 04:09:59 body: _TYPE_BODY | None = None, 04:09:59 headers: typing.Mapping[str, str] | None = None, 04:09:59 retries: Retry | bool | int | None = None, 04:09:59 redirect: bool = True, 04:09:59 assert_same_host: bool = True, 04:09:59 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 04:09:59 pool_timeout: int | None = None, 04:09:59 release_conn: bool | None = None, 04:09:59 chunked: bool = False, 04:09:59 body_pos: _TYPE_BODY_POSITION | None = None, 04:09:59 preload_content: bool = True, 04:09:59 decode_content: bool = True, 04:09:59 **response_kw: typing.Any, 04:09:59 ) -> BaseHTTPResponse: 04:09:59 """ 04:09:59 Get a connection from the pool and perform an HTTP request. This is the 04:09:59 lowest level call for making a request, so you'll need to specify all 04:09:59 the raw details. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 More commonly, it's appropriate to use a convenience method 04:09:59 such as :meth:`request`. 04:09:59 04:09:59 .. note:: 04:09:59 04:09:59 `release_conn` will only behave as expected if 04:09:59 `preload_content=False` because we want to make 04:09:59 `preload_content=False` the default behaviour someday soon without 04:09:59 breaking backwards compatibility. 04:09:59 04:09:59 :param method: 04:09:59 HTTP request method (such as GET, POST, PUT, etc.) 04:09:59 04:09:59 :param url: 04:09:59 The URL to perform the request on. 04:09:59 04:09:59 :param body: 04:09:59 Data to send in the request body, either :class:`str`, :class:`bytes`, 04:09:59 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 04:09:59 04:09:59 :param headers: 04:09:59 Dictionary of custom headers to send, such as User-Agent, 04:09:59 If-None-Match, etc. If None, pool headers are used. If provided, 04:09:59 these headers completely replace any pool-specific headers. 04:09:59 04:09:59 :param retries: 04:09:59 Configure the number of retries to allow before raising a 04:09:59 :class:`~urllib3.exceptions.MaxRetryError` exception. 04:09:59 04:09:59 Pass ``None`` to retry until you receive a response. Pass a 04:09:59 :class:`~urllib3.util.retry.Retry` object for fine-grained control 04:09:59 over different types of retries. 04:09:59 Pass an integer number to retry connection errors that many times, 04:09:59 but no other types of errors. Pass zero to never retry. 04:09:59 04:09:59 If ``False``, then retries are disabled and any exception is raised 04:09:59 immediately. Also, instead of raising a MaxRetryError on redirects, 04:09:59 the redirect response will be returned. 04:09:59 04:09:59 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 04:09:59 04:09:59 :param redirect: 04:09:59 If True, automatically handle redirects (status codes 301, 302, 04:09:59 303, 307, 308). Each redirect counts as a retry. Disabling retries 04:09:59 will disable redirect, too. 04:09:59 04:09:59 :param assert_same_host: 04:09:59 If ``True``, will make sure that the host of the pool requests is 04:09:59 consistent else will raise HostChangedError. When ``False``, you can 04:09:59 use the pool on an HTTP proxy and request foreign hosts. 04:09:59 04:09:59 :param timeout: 04:09:59 If specified, overrides the default timeout for this one 04:09:59 request. It may be a float (in seconds) or an instance of 04:09:59 :class:`urllib3.util.Timeout`. 04:09:59 04:09:59 :param pool_timeout: 04:09:59 If set and the pool is set to block=True, then this method will 04:09:59 block for ``pool_timeout`` seconds and raise EmptyPoolError if no 04:09:59 connection is available within the time period. 04:09:59 04:09:59 :param bool preload_content: 04:09:59 If True, the response's body will be preloaded into memory. 04:09:59 04:09:59 :param bool decode_content: 04:09:59 If True, will attempt to decode the body based on the 04:09:59 'content-encoding' header. 04:09:59 04:09:59 :param release_conn: 04:09:59 If False, then the urlopen call will not release the connection 04:09:59 back into the pool once a response is received (but will release if 04:09:59 you read the entire contents of the response such as when 04:09:59 `preload_content=True`). This is useful if you're not preloading 04:09:59 the response's content immediately. You will need to call 04:09:59 ``r.release_conn()`` on the response ``r`` to return the connection 04:09:59 back into the pool. If None, it takes the value of ``preload_content`` 04:09:59 which defaults to ``True``. 04:09:59 04:09:59 :param bool chunked: 04:09:59 If True, urllib3 will send the body using chunked transfer 04:09:59 encoding. Otherwise, urllib3 will send the body using the standard 04:09:59 content-length form. Defaults to False. 04:09:59 04:09:59 :param int body_pos: 04:09:59 Position to seek to in file-like body in the event of a retry or 04:09:59 redirect. Typically this won't need to be set because urllib3 will 04:09:59 auto-populate the value when needed. 04:09:59 """ 04:09:59 parsed_url = parse_url(url) 04:09:59 destination_scheme = parsed_url.scheme 04:09:59 04:09:59 if headers is None: 04:09:59 headers = self.headers 04:09:59 04:09:59 if not isinstance(retries, Retry): 04:09:59 retries = Retry.from_int(retries, redirect=redirect, default=self.retries) 04:09:59 04:09:59 if release_conn is None: 04:09:59 release_conn = preload_content 04:09:59 04:09:59 # Check host 04:09:59 if assert_same_host and not self.is_same_host(url): 04:09:59 raise HostChangedError(self, url, retries) 04:09:59 04:09:59 # Ensure that the URL we're connecting to is properly encoded 04:09:59 if url.startswith("/"): 04:09:59 url = to_str(_encode_target(url)) 04:09:59 else: 04:09:59 url = to_str(parsed_url.url) 04:09:59 04:09:59 conn = None 04:09:59 04:09:59 # Track whether `conn` needs to be released before 04:09:59 # returning/raising/recursing. Update this variable if necessary, and 04:09:59 # leave `release_conn` constant throughout the function. That way, if 04:09:59 # the function recurses, the original value of `release_conn` will be 04:09:59 # passed down into the recursive call, and its value will be respected. 04:09:59 # 04:09:59 # See issue #651 [1] for details. 04:09:59 # 04:09:59 # [1] 04:09:59 release_this_conn = release_conn 04:09:59 04:09:59 http_tunnel_required = connection_requires_http_tunnel( 04:09:59 self.proxy, self.proxy_config, destination_scheme 04:09:59 ) 04:09:59 04:09:59 # Merge the proxy headers. Only done when not using HTTP CONNECT. We 04:09:59 # have to copy the headers dict so we can safely change it without those 04:09:59 # changes being reflected in anyone else's copy. 04:09:59 if not http_tunnel_required: 04:09:59 headers = headers.copy() # type: ignore[attr-defined] 04:09:59 headers.update(self.proxy_headers) # type: ignore[union-attr] 04:09:59 04:09:59 # Must keep the exception bound to a separate variable or else Python 3 04:09:59 # complains about UnboundLocalError. 04:09:59 err = None 04:09:59 04:09:59 # Keep track of whether we cleanly exited the except block. This 04:09:59 # ensures we do proper cleanup in finally. 04:09:59 clean_exit = False 04:09:59 04:09:59 # Rewind body position, if needed. Record current position 04:09:59 # for future rewinds in the event of a redirect/retry. 04:09:59 body_pos = set_file_position(body, body_pos) 04:09:59 04:09:59 try: 04:09:59 # Request a connection from the queue. 04:09:59 timeout_obj = self._get_timeout(timeout) 04:09:59 conn = self._get_conn(timeout=pool_timeout) 04:09:59 04:09:59 conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] 04:09:59 04:09:59 # Is this a closed/new connection that requires CONNECT tunnelling? 04:09:59 if self.proxy is not None and http_tunnel_required and conn.is_closed: 04:09:59 try: 04:09:59 self._prepare_proxy(conn) 04:09:59 except (BaseSSLError, OSError, SocketTimeout) as e: 04:09:59 self._raise_timeout( 04:09:59 err=e, url=self.proxy.url, timeout_value=conn.timeout 04:09:59 ) 04:09:59 raise 04:09:59 04:09:59 # If we're going to release the connection in ``finally:``, then 04:09:59 # the response doesn't need to know about the connection. Otherwise 04:09:59 # it will also try to release it and we'll have a double-release 04:09:59 # mess. 04:09:59 response_conn = conn if not release_conn else None 04:09:59 04:09:59 # Make the request on the HTTPConnection object 04:09:59 > response = self._make_request( 04:09:59 conn, 04:09:59 method, 04:09:59 url, 04:09:59 timeout=timeout_obj, 04:09:59 body=body, 04:09:59 headers=headers, 04:09:59 chunked=chunked, 04:09:59 retries=retries, 04:09:59 response_conn=response_conn, 04:09:59 preload_content=preload_content, 04:09:59 decode_content=decode_content, 04:09:59 **response_kw, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:790: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:496: in _make_request 04:09:59 conn.request( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:395: in request 04:09:59 self.endheaders() 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1277: in endheaders 04:09:59 self._send_output(message_body, encode_chunked=encode_chunked) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:1037: in _send_output 04:09:59 self.send(msg) 04:09:59 /opt/pyenv/versions/3.10.6/lib/python3.10/http/client.py:975: in send 04:09:59 self.connect() 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:243: in connect 04:09:59 self.sock = self._new_conn() 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 04:09:59 def _new_conn(self) -> socket.socket: 04:09:59 """Establish a socket connection and set nodelay settings on it. 04:09:59 04:09:59 :return: New socket connection. 04:09:59 """ 04:09:59 try: 04:09:59 sock = connection.create_connection( 04:09:59 (self._dns_host, self.port), 04:09:59 self.timeout, 04:09:59 source_address=self.source_address, 04:09:59 socket_options=self.socket_options, 04:09:59 ) 04:09:59 except socket.gaierror as e: 04:09:59 raise NameResolutionError(self.host, self, e) from e 04:09:59 except SocketTimeout as e: 04:09:59 raise ConnectTimeoutError( 04:09:59 self, 04:09:59 f"Connection to {self.host} timed out. (connect timeout={self.timeout})", 04:09:59 ) from e 04:09:59 04:09:59 except OSError as e: 04:09:59 > raise NewConnectionError( 04:09:59 self, f"Failed to establish a new connection: {e}" 04:09:59 ) from e 04:09:59 E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 16] Device or resource busy 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connection.py:218: NewConnectionError 04:09:59 04:09:59 The above exception was the direct cause of the following exception: 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 > resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:486: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:874: in urlopen 04:09:59 return self.urlopen( 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/connectionpool.py:844: in urlopen 04:09:59 retries = retries.increment( 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = Retry(total=0, connect=None, read=None, redirect=None, status=None) 04:09:59 method = 'POST', url = '/ric/v1/deregister', response = None 04:09:59 error = NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy') 04:09:59 _pool = 04:09:59 _stacktrace = 04:09:59 04:09:59 def increment( 04:09:59 self, 04:09:59 method: str | None = None, 04:09:59 url: str | None = None, 04:09:59 response: BaseHTTPResponse | None = None, 04:09:59 error: Exception | None = None, 04:09:59 _pool: ConnectionPool | None = None, 04:09:59 _stacktrace: TracebackType | None = None, 04:09:59 ) -> Retry: 04:09:59 """Return a new Retry object with incremented retry counters. 04:09:59 04:09:59 :param response: A response object, or None, if the server did not 04:09:59 return a response. 04:09:59 :type response: :class:`~urllib3.response.BaseHTTPResponse` 04:09:59 :param Exception error: An error encountered during the request, or 04:09:59 None if the response was received successfully. 04:09:59 04:09:59 :return: A new ``Retry`` object. 04:09:59 """ 04:09:59 if self.total is False and error: 04:09:59 # Disabled, indicate to re-raise the error. 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 04:09:59 total = self.total 04:09:59 if total is not None: 04:09:59 total -= 1 04:09:59 04:09:59 connect = self.connect 04:09:59 read = self.read 04:09:59 redirect = self.redirect 04:09:59 status_count = self.status 04:09:59 other = self.other 04:09:59 cause = "unknown" 04:09:59 status = None 04:09:59 redirect_location = None 04:09:59 04:09:59 if error and self._is_connection_error(error): 04:09:59 # Connect retry? 04:09:59 if connect is False: 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif connect is not None: 04:09:59 connect -= 1 04:09:59 04:09:59 elif error and self._is_read_error(error): 04:09:59 # Read retry? 04:09:59 if read is False or method is None or not self._is_method_retryable(method): 04:09:59 raise reraise(type(error), error, _stacktrace) 04:09:59 elif read is not None: 04:09:59 read -= 1 04:09:59 04:09:59 elif error: 04:09:59 # Other retry? 04:09:59 if other is not None: 04:09:59 other -= 1 04:09:59 04:09:59 elif response and response.get_redirect_location(): 04:09:59 # Redirect retry? 04:09:59 if redirect is not None: 04:09:59 redirect -= 1 04:09:59 cause = "too many redirects" 04:09:59 response_redirect_location = response.get_redirect_location() 04:09:59 if response_redirect_location: 04:09:59 redirect_location = response_redirect_location 04:09:59 status = response.status 04:09:59 04:09:59 else: 04:09:59 # Incrementing because of a server error like a 500 in 04:09:59 # status_forcelist and the given method is in the allowed_methods 04:09:59 cause = ResponseError.GENERIC_ERROR 04:09:59 if response and response.status: 04:09:59 if status_count is not None: 04:09:59 status_count -= 1 04:09:59 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) 04:09:59 status = response.status 04:09:59 04:09:59 history = self.history + ( 04:09:59 RequestHistory(method, url, error, status, redirect_location), 04:09:59 ) 04:09:59 04:09:59 new_retry = self.new( 04:09:59 total=total, 04:09:59 connect=connect, 04:09:59 read=read, 04:09:59 redirect=redirect, 04:09:59 status=status_count, 04:09:59 other=other, 04:09:59 history=history, 04:09:59 ) 04:09:59 04:09:59 if new_retry.is_exhausted(): 04:09:59 reason = error or ResponseError(cause) 04:09:59 > raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 04:09:59 E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/urllib3/util/retry.py:515: MaxRetryError 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 rnib_helpers = 04:09:59 04:09:59 def test_rnib_get_ranfunction(rnib_helpers): 04:09:59 global rnib_xapp 04:09:59 rnib_xapp = _BaseXapp(rmr_port=4777, rmr_wait_for_ready=False, use_fake_sdl=True) 04:09:59 nb1 = rnib_helpers.createNodebInfo('nodeb_1234', 'GNB', '192.168.1.1', 8088) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "RAN:" + 'nodeb_1234', nb1.SerializeToString(), usemsgpack=False) 04:09:59 nb2 = rnib_helpers.createNodebInfo('nodeb_1235', 'GNB', '192.168.1.2', 8088) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "RAN:" + 'nodeb_1235', nb2.SerializeToString(), usemsgpack=False) 04:09:59 nb3 = rnib_helpers.createNodebInfo('nodeb_1236', 'GNB', '192.168.1.2', 8088) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "RAN:" + 'nodeb_1236', nb3.SerializeToString(), usemsgpack=False) 04:09:59 nb4 = rnib_helpers.createNodebInfo('nodeb_1237', 'GNB', '192.168.1.2', 8088) 04:09:59 rnib_xapp.sdl.set(sdl_namespaces.E2_MANAGER, "RAN:" + 'nodeb_1237', nb4.SerializeToString(), usemsgpack=False) 04:09:59 04:09:59 sc = rnib_xapp.GetRanFunctionDefinition('nodeb_1235', "1.3.6.1.4.1.1.2.2.2") 04:09:59 assert sc == ['te524367153'] 04:09:59 sc = rnib_xapp.GetRanFunctionDefinition('nodeb_1235', "1.3.6.1.4.1.1.2.2.5") 04:09:59 assert sc == [] 04:09:59 > rnib_xapp.stop() 04:09:59 04:09:59 tests/test_xapps.py:283: 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 ricxappframe/xapp_frame.py:793: in stop 04:09:59 self.xapp_shutdown() 04:09:59 ricxappframe/xapp_frame.py:268: in xapp_shutdown 04:09:59 self.deregister() 04:09:59 ricxappframe/xapp_frame.py:245: in deregister 04:09:59 self._do_post(dereg_url, request_string) 04:09:59 ricxappframe/xapp_frame.py:179: in _do_post 04:09:59 resp = session.post(url, msg) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:637: in post 04:09:59 return self.request("POST", url, data=data, json=json, **kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:589: in request 04:09:59 resp = self.send(prep, **send_kwargs) 04:09:59 .tox/code/lib/python3.10/site-packages/requests/sessions.py:703: in send 04:09:59 r = adapter.send(request, **kwargs) 04:09:59 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 04:09:59 04:09:59 self = 04:09:59 request = , stream = False 04:09:59 timeout = Timeout(connect=None, read=None, total=None), verify = True 04:09:59 cert = None, proxies = OrderedDict() 04:09:59 04:09:59 def send( 04:09:59 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 04:09:59 ): 04:09:59 """Sends PreparedRequest object. Returns Response object. 04:09:59 04:09:59 :param request: The :class:`PreparedRequest ` being sent. 04:09:59 :param stream: (optional) Whether to stream the request content. 04:09:59 :param timeout: (optional) How long to wait for the server to send 04:09:59 data before giving up, as a float, or a :ref:`(connect timeout, 04:09:59 read timeout) ` tuple. 04:09:59 :type timeout: float or tuple or urllib3 Timeout object 04:09:59 :param verify: (optional) Either a boolean, in which case it controls whether 04:09:59 we verify the server's TLS certificate, or a string, in which case it 04:09:59 must be a path to a CA bundle to use 04:09:59 :param cert: (optional) Any user-provided SSL certificate to be trusted. 04:09:59 :param proxies: (optional) The proxies dictionary to apply to the request. 04:09:59 :rtype: requests.Response 04:09:59 """ 04:09:59 04:09:59 try: 04:09:59 conn = self.get_connection(request.url, proxies) 04:09:59 except LocationValueError as e: 04:09:59 raise InvalidURL(e, request=request) 04:09:59 04:09:59 self.cert_verify(conn, request.url, verify, cert) 04:09:59 url = self.request_url(request, proxies) 04:09:59 self.add_headers( 04:09:59 request, 04:09:59 stream=stream, 04:09:59 timeout=timeout, 04:09:59 verify=verify, 04:09:59 cert=cert, 04:09:59 proxies=proxies, 04:09:59 ) 04:09:59 04:09:59 chunked = not (request.body is None or "Content-Length" in request.headers) 04:09:59 04:09:59 if isinstance(timeout, tuple): 04:09:59 try: 04:09:59 connect, read = timeout 04:09:59 timeout = TimeoutSauce(connect=connect, read=read) 04:09:59 except ValueError: 04:09:59 raise ValueError( 04:09:59 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 04:09:59 f"or a single float to set both timeouts to the same value." 04:09:59 ) 04:09:59 elif isinstance(timeout, TimeoutSauce): 04:09:59 pass 04:09:59 else: 04:09:59 timeout = TimeoutSauce(connect=timeout, read=timeout) 04:09:59 04:09:59 try: 04:09:59 resp = conn.urlopen( 04:09:59 method=request.method, 04:09:59 url=url, 04:09:59 body=request.body, 04:09:59 headers=request.headers, 04:09:59 redirect=False, 04:09:59 assert_same_host=False, 04:09:59 preload_content=False, 04:09:59 decode_content=False, 04:09:59 retries=self.max_retries, 04:09:59 timeout=timeout, 04:09:59 chunked=chunked, 04:09:59 ) 04:09:59 04:09:59 except (ProtocolError, OSError) as err: 04:09:59 raise ConnectionError(err, request=request) 04:09:59 04:09:59 except MaxRetryError as e: 04:09:59 if isinstance(e.reason, ConnectTimeoutError): 04:09:59 # TODO: Remove this in 3.0.0: see #2811 04:09:59 if not isinstance(e.reason, NewConnectionError): 04:09:59 raise ConnectTimeout(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, ResponseError): 04:09:59 raise RetryError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _ProxyError): 04:09:59 raise ProxyError(e, request=request) 04:09:59 04:09:59 if isinstance(e.reason, _SSLError): 04:09:59 # This branch is for urllib3 v1.22 and later. 04:09:59 raise SSLError(e, request=request) 04:09:59 04:09:59 > raise ConnectionError(e, request=request) 04:09:59 E requests.exceptions.ConnectionError: HTTPConnectionPool(host='service-ricplt-appmgr-http.ricplt', port=8080): Max retries exceeded with url: /ric/v1/deregister (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')) 04:09:59 04:09:59 .tox/code/lib/python3.10/site-packages/requests/adapters.py:519: ConnectionError 04:09:59 ----------------------------- Captured stdout call ----------------------------- 04:09:59 {"ts": 1703736507812, "crit": "ERROR", "id": "ricxappframe.xapp_frame", "mdc": {}, "msg": "__init__: Cannot Read config file for xapp Registration"} 04:09:59 ----------------------------- Captured stderr call ----------------------------- 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:27,816 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:29,821 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:33,831 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:41,845 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:57,863 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ------------------------------ Captured log call ------------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 --------------------------- Captured stderr teardown --------------------------- 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:08:58,316 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:00,323 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:04,331 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:12,339 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,359 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:28,373 WARNING Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:30,379 WARNING Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:34,390 WARNING Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:42,400 WARNING Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 2023-12-28 04:09:58,418 WARNING Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 ---------------------------- Captured log teardown ----------------------------- 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 WARNING urllib3.connectionpool:connectionpool.py:871 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError(': Failed to establish a new connection: [Errno 16] Device or resource busy')': /ric/v1/deregister 04:09:59 =============================== warnings summary =============================== 04:09:59 tests/test_config.py::test_custom_config_handler 04:09:59 /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.tox/code/lib/python3.10/site-packages/_pytest/threadexception.py:73: PytestUnhandledThreadExceptionWarning: Exception in thread Thread-6 (loop) 04:09:59 04:09:59 Traceback (most recent call last): 04:09:59 File "/w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/ricxappframe/xapp_frame.py", line 948, in loop 04:09:59 with open(self._config_path) as json_file: 04:09:59 FileNotFoundError: [Errno 2] No such file or directory: '/tmp/file.json' 04:09:59 04:09:59 During handling of the above exception, another exception occurred: 04:09:59 04:09:59 Traceback (most recent call last): 04:09:59 File "/opt/pyenv/versions/3.10.6/lib/python3.10/threading.py", line 1016, in _bootstrap_inner 04:09:59 self.run() 04:09:59 File "/opt/pyenv/versions/3.10.6/lib/python3.10/threading.py", line 953, in run 04:09:59 self._target(*self._args, **self._kwargs) 04:09:59 File "/w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/ricxappframe/xapp_frame.py", line 954, in loop 04:09:59 raise XappError(f"Error occurred during polling configuration handler: {error}") 04:09:59 ricxappframe.xapp_frame.XappError: Error occurred during polling configuration handler: [Errno 2] No such file or directory: '/tmp/file.json' 04:09:59 04:09:59 warnings.warn(pytest.PytestUnhandledThreadExceptionWarning(msg)) 04:09:59 04:09:59 tests/test_init.py::test_init_general_xapp 04:09:59 /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.tox/code/lib/python3.10/site-packages/_pytest/threadexception.py:73: PytestUnhandledThreadExceptionWarning: Exception in thread Thread-8 (register) 04:09:59 04:09:59 Traceback (most recent call last): 04:09:59 File "/opt/pyenv/versions/3.10.6/lib/python3.10/threading.py", line 1016, in _bootstrap_inner 04:09:59 self.run() 04:09:59 File "/opt/pyenv/versions/3.10.6/lib/python3.10/threading.py", line 953, in run 04:09:59 self._target(*self._args, **self._kwargs) 04:09:59 File "/w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/ricxappframe/xapp_frame.py", line 203, in register 04:09:59 raise XappError("Couldn't resolve service endpoints: empty http_endpoint or rmr_endpoint") 04:09:59 ricxappframe.xapp_frame.XappError: Couldn't resolve service endpoints: empty http_endpoint or rmr_endpoint 04:09:59 04:09:59 warnings.warn(pytest.PytestUnhandledThreadExceptionWarning(msg)) 04:09:59 04:09:59 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 04:09:59 ---------------------- generated xml file: /tmp/tests.xml ---------------------- 04:09:59 04:09:59 ---------- coverage: platform linux, python 3.10.6-final-0 ----------- 04:09:59 Name Stmts Miss Cover Missing 04:09:59 ----------------------------------------------------------------------- 04:09:59 ricxappframe/__init__.py 0 0 100% 04:09:59 ricxappframe/alarm/__init__.py 0 0 100% 04:09:59 ricxappframe/alarm/alarm.py 94 2 98% 250-251 04:09:59 ricxappframe/alarm/exceptions.py 2 0 100% 04:09:59 ricxappframe/constants.py 5 0 100% 04:09:59 ricxappframe/e2ap/__init__.py 0 0 100% 04:09:59 ricxappframe/e2ap/asn1.py 224 0 100% 04:09:59 ricxappframe/e2ap/asn1clib/__init__.py 0 0 100% 04:09:59 ricxappframe/e2ap/asn1clib/asn1clib.py 2 0 100% 04:09:59 ricxappframe/e2ap/asn1clib/types.py 16 0 100% 04:09:59 ricxappframe/logger/__init__.py 0 0 100% 04:09:59 ricxappframe/logger/mdclogger.py 133 22 83% 83-87, 95, 188-189, 196, 198, 200, 202, 220-224, 227-234 04:09:59 ricxappframe/metric/__init__.py 0 0 100% 04:09:59 ricxappframe/metric/exceptions.py 2 0 100% 04:09:59 ricxappframe/metric/metric.py 58 3 95% 122, 201-202 04:09:59 ricxappframe/rmr/__init__.py 0 0 100% 04:09:59 ricxappframe/rmr/exceptions.py 4 0 100% 04:09:59 ricxappframe/rmr/helpers.py 28 0 100% 04:09:59 ricxappframe/rmr/rmr.py 156 3 98% 257, 454, 544 04:09:59 ricxappframe/rmr/rmr_mocks/__init__.py 0 0 100% 04:09:59 ricxappframe/rmr/rmr_mocks/rmr_mocks.py 78 6 92% 39, 59, 79, 115, 133, 148 04:09:59 ricxappframe/rmr/rmrclib/__init__.py 0 0 100% 04:09:59 ricxappframe/rmr/rmrclib/rmrclib.py 38 1 97% 53 04:09:59 ricxappframe/util/__init__.py 0 0 100% 04:09:59 ricxappframe/util/constants.py 11 0 100% 04:09:59 ricxappframe/xapp_frame.py 278 57 79% 147-152, 181-184, 205-224, 247-251, 262, 269-270, 282-284, 313-314, 339-345, 388, 447, 463, 658-659, 747, 753, 791, 795, 866-869, 935-939, 959, 966-967 04:09:59 ricxappframe/xapp_rest.py 91 12 87% 66, 72-74, 131-132, 142-143, 155-156, 191-193 04:09:59 ricxappframe/xapp_rmr.py 45 14 69% 90, 94-95, 108-114, 127, 131-133 04:09:59 ricxappframe/xapp_sdl.py 94 2 98% 53, 655 04:09:59 ricxappframe/xapp_subscribe.py 54 3 94% 64, 103, 171 04:09:59 ricxappframe/xapp_symptomdata.py 119 20 83% 43, 111-116, 152, 154-156, 160-161, 200-201, 221-224, 228 04:09:59 ----------------------------------------------------------------------- 04:09:59 TOTAL 1532 145 91% 04:09:59 Coverage HTML written to dir htmlcov 04:09:59 Coverage XML written to file coverage.xml 04:09:59 04:09:59 Required test coverage of 70% reached. Total coverage: 90.54% 04:09:59 =========================== short test summary info ============================ 04:09:59 FAILED tests/test_config.py::test_config_no_env - requests.exceptions.Connect... 04:09:59 FAILED tests/test_config.py::test_default_config_handler - requests.exception... 04:09:59 FAILED tests/test_config.py::test_custom_config_handler - requests.exceptions... 04:09:59 FAILED tests/test_init.py::test_init_general_xapp - requests.exceptions.Conne... 04:09:59 FAILED tests/test_init.py::test_init_rmr_xapp - requests.exceptions.Connectio... 04:09:59 FAILED tests/test_xapps.py::test_rmr_init - TypeError: Xapp.__init__() got an... 04:09:59 FAILED tests/test_xapps.py::test_rmr_healthcheck - AssertionError: assert Non... 04:09:59 FAILED tests/test_xapps.py::test_rnib_get_list_nodeb - requests.exceptions.Co... 04:09:59 FAILED tests/test_xapps.py::test_rnib_get_list_all_nodeb - requests.exception... 04:09:59 FAILED tests/test_xapps.py::test_rnib_get_list_cells - requests.exceptions.Co... 04:09:59 FAILED tests/test_xapps.py::test_rnib_get_nodeb - requests.exceptions.Connect... 04:09:59 FAILED tests/test_xapps.py::test_rnib_get_cell - requests.exceptions.Connecti... 04:09:59 FAILED tests/test_xapps.py::test_rnib_get_cell_by_id - requests.exceptions.Co... 04:09:59 FAILED tests/test_xapps.py::test_rnib_get_cells - requests.exceptions.Connect... 04:09:59 FAILED tests/test_xapps.py::test_rnib_get_global_nodeb - requests.exceptions.... 04:09:59 FAILED tests/test_xapps.py::test_rnib_get_ranfunction - requests.exceptions.C... 04:09:59 ============ 16 failed, 59 passed, 2 warnings in 552.57s (0:09:12) ============= 04:13:43 Build timed out (after 15 minutes). Marking the build as failed. 04:13:43 $ ssh-agent -k 04:13:43 unset SSH_AUTH_SOCK; 04:13:43 unset SSH_AGENT_PID; 04:13:43 echo Agent pid 5748 killed; 04:13:43 [ssh-agent] Stopped. 04:13:43 Build was aborted 04:13:43 [PostBuildScript] - [INFO] Executing post build scripts. 04:13:43 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins17894047958619340014.sh 04:13:43 ---> sysstat.sh 04:13:45 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins3950564360146978411.sh 04:13:45 ---> package-listing.sh 04:13:45 ++ facter osfamily 04:13:45 ++ tr '[:upper:]' '[:lower:]' 04:13:45 + OS_FAMILY=debian 04:13:45 + workspace=/w/workspace/ric-plt-xapp-frame-py-pypi-verify-master 04:13:45 + START_PACKAGES=/tmp/packages_start.txt 04:13:45 + END_PACKAGES=/tmp/packages_end.txt 04:13:45 + DIFF_PACKAGES=/tmp/packages_diff.txt 04:13:45 + PACKAGES=/tmp/packages_start.txt 04:13:45 + '[' /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master ']' 04:13:45 + PACKAGES=/tmp/packages_end.txt 04:13:45 + case "${OS_FAMILY}" in 04:13:45 + dpkg -l 04:13:45 + grep '^ii' 04:13:45 + '[' -f /tmp/packages_start.txt ']' 04:13:45 + '[' -f /tmp/packages_end.txt ']' 04:13:45 + diff /tmp/packages_start.txt /tmp/packages_end.txt 04:13:45 + true 04:13:45 + '[' /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master ']' 04:13:45 + mkdir -p /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/archives/ 04:13:45 + cp -f /tmp/packages_diff.txt /tmp/packages_end.txt /tmp/packages_start.txt /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/archives/ 04:13:45 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins14317031728651315594.sh 04:13:45 ---> capture-instance-metadata.sh 04:13:45 Setup pyenv: 04:13:45 system 04:13:45 3.8.13 04:13:45 3.9.13 04:13:45 * 3.10.6 (set by /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.python-version) 04:13:46 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-BkFA from file:/tmp/.os_lf_venv 04:13:48 lf-activate-venv(): INFO: Installing: lftools 04:13:49 code: exit -15 (782.59 seconds) /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master> pytest --cov ricxappframe --cov-report xml --cov-report term-missing --cov-report html --cov-fail-under=70 --junitxml=/tmp/tests.xml pid=28073 04:13:49 .pkg: _exit> python /tmp/venv-5Mha/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ 04:13:49 .pkg: error while trying to close <_io.BufferedWriter name=6> with BrokenPipeError(32, 'Broken pipe') 04:13:49 + tox_status=143 04:13:49 + echo '---> Completed tox runs' 04:13:49 ---> Completed tox runs 04:13:49 + for i in .tox/*/log 04:13:49 ++ awk -F/ '{print $2}' 04:13:49 ++ echo .tox/code/log 04:13:49 + tox_env=code 04:13:49 + cp -r .tox/code/log /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/archives/tox/code 04:14:03 lf-activate-venv(): INFO: Adding /tmp/venv-BkFA/bin to PATH 04:14:03 INFO: Running in OpenStack, capturing instance metadata 04:14:04 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins17064218656057397208.sh 04:14:04 provisioning config files... 04:14:04 copy managed file [jenkins-log-archives-settings] to file:/w/workspace/ric-plt-xapp-frame-py-pypi-verify-master@tmp/config10408460414311672515tmp 04:14:04 Regular expression run condition: Expression=[^.*logs-s3.*], Label=[] 04:14:04 Run condition [Regular expression match] preventing perform for step [Provide Configuration files] 04:14:04 [EnvInject] - Injecting environment variables from a build step. 04:14:04 [EnvInject] - Injecting as environment variables the properties content 04:14:04 SERVER_ID=logs 04:14:04 04:14:04 [EnvInject] - Variables injected successfully. 04:14:04 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins10830875132091047935.sh 04:14:04 ---> create-netrc.sh 04:14:04 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins6913866191492991130.sh 04:14:04 ---> python-tools-install.sh 04:14:04 Setup pyenv: 04:14:04 system 04:14:04 3.8.13 04:14:04 3.9.13 04:14:04 * 3.10.6 (set by /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.python-version) 04:14:04 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-BkFA from file:/tmp/.os_lf_venv 04:14:06 lf-activate-venv(): INFO: Installing: lftools 04:14:18 lf-activate-venv(): INFO: Adding /tmp/venv-BkFA/bin to PATH 04:14:18 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins16317745886979562270.sh 04:14:18 ---> sudo-logs.sh 04:14:18 Archiving 'sudo' log.. 04:14:18 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash /tmp/jenkins11131668371209038344.sh 04:14:18 ---> job-cost.sh 04:14:18 Setup pyenv: 04:14:18 system 04:14:18 3.8.13 04:14:18 3.9.13 04:14:18 * 3.10.6 (set by /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.python-version) 04:14:18 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-BkFA from file:/tmp/.os_lf_venv 04:14:20 lf-activate-venv(): INFO: Installing: zipp==1.1.0 python-openstackclient urllib3~=1.26.15 04:14:29 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. 04:14:29 lftools 0.37.8 requires openstacksdk<1.5.0, but you have openstacksdk 2.0.0 which is incompatible. 04:14:29 lf-activate-venv(): INFO: Adding /tmp/venv-BkFA/bin to PATH 04:14:29 INFO: No Stack... 04:14:29 INFO: Retrieving Pricing Info for: v2-highcpu-2 04:14:30 INFO: Archiving Costs 04:14:30 [ric-plt-xapp-frame-py-pypi-verify-master] $ /bin/bash -l /tmp/jenkins11562624671170868292.sh 04:14:30 ---> logs-deploy.sh 04:14:30 Setup pyenv: 04:14:30 system 04:14:30 3.8.13 04:14:30 3.9.13 04:14:30 * 3.10.6 (set by /w/workspace/ric-plt-xapp-frame-py-pypi-verify-master/.python-version) 04:14:30 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-BkFA from file:/tmp/.os_lf_venv 04:14:31 lf-activate-venv(): INFO: Installing: lftools 04:14:44 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. 04:14:44 python-openstackclient 6.4.0 requires openstacksdk>=2.0.0, but you have openstacksdk 1.4.0 which is incompatible. 04:14:45 lf-activate-venv(): INFO: Adding /tmp/venv-BkFA/bin to PATH 04:14:45 INFO: Nexus URL https://nexus.o-ran-sc.org path production/vex-sjc-oran-jenkins-prod-1/ric-plt-xapp-frame-py-pypi-verify-master/262 04:14:45 INFO: archiving workspace using pattern(s): 04:14:47 Archives upload complete. 04:14:48 INFO: archiving logs to Nexus 04:14:48 ---> uname -a: 04:14:48 Linux prd-ubuntu1804-builder-2c-2g-2154 5.4.0-146-generic #163-Ubuntu SMP Fri Mar 17 18:26:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux 04:14:48 04:14:48 04:14:48 ---> lscpu: 04:14:48 Architecture: x86_64 04:14:48 CPU op-mode(s): 32-bit, 64-bit 04:14:48 Byte Order: Little Endian 04:14:48 Address sizes: 40 bits physical, 48 bits virtual 04:14:48 CPU(s): 2 04:14:48 On-line CPU(s) list: 0,1 04:14:48 Thread(s) per core: 1 04:14:48 Core(s) per socket: 1 04:14:48 Socket(s): 2 04:14:48 NUMA node(s): 1 04:14:48 Vendor ID: AuthenticAMD 04:14:48 CPU family: 23 04:14:48 Model: 49 04:14:48 Model name: AMD EPYC-Rome Processor 04:14:48 Stepping: 0 04:14:48 CPU MHz: 2800.000 04:14:48 BogoMIPS: 5600.00 04:14:48 Virtualization: AMD-V 04:14:48 Hypervisor vendor: KVM 04:14:48 Virtualization type: full 04:14:48 L1d cache: 64 KiB 04:14:48 L1i cache: 64 KiB 04:14:48 L2 cache: 1 MiB 04:14:48 L3 cache: 32 MiB 04:14:48 NUMA node0 CPU(s): 0,1 04:14:48 Vulnerability Itlb multihit: Not affected 04:14:48 Vulnerability L1tf: Not affected 04:14:48 Vulnerability Mds: Not affected 04:14:48 Vulnerability Meltdown: Not affected 04:14:48 Vulnerability Mmio stale data: Not affected 04:14:48 Vulnerability Retbleed: Vulnerable 04:14:48 Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp 04:14:48 Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization 04:14:48 Vulnerability Spectre v2: Mitigation; Retpolines, IBPB conditional, IBRS_FW, STIBP disabled, RSB filling, PBRSB-eIBRS Not affected 04:14:48 Vulnerability Srbds: Not affected 04:14:48 Vulnerability Tsx async abort: Not affected 04:14:48 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibrs ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr wbnoinvd arat npt nrip_save umip rdpid arch_capabilities 04:14:48 04:14:48 04:14:48 ---> nproc: 04:14:48 2 04:14:48 04:14:48 04:14:48 ---> df -h: 04:14:48 Filesystem Size Used Avail Use% Mounted on 04:14:48 udev 975M 0 975M 0% /dev 04:14:48 tmpfs 199M 1012K 198M 1% /run 04:14:48 /dev/vda1 20G 8.5G 11G 45% / 04:14:48 tmpfs 992M 0 992M 0% /dev/shm 04:14:48 tmpfs 5.0M 0 5.0M 0% /run/lock 04:14:48 tmpfs 992M 0 992M 0% /sys/fs/cgroup 04:14:48 /dev/loop1 62M 62M 0 100% /snap/core20/1405 04:14:48 /dev/loop2 68M 68M 0 100% /snap/lxd/22753 04:14:48 /dev/vda15 105M 6.1M 99M 6% /boot/efi 04:14:48 tmpfs 199M 0 199M 0% /run/user/1001 04:14:48 /dev/loop3 41M 41M 0 100% /snap/snapd/20290 04:14:48 /dev/loop4 92M 92M 0 100% /snap/lxd/24061 04:14:48 04:14:48 04:14:48 ---> free -m: 04:14:48 total used free shared buff/cache available 04:14:48 Mem: 1983 426 134 2 1421 1361 04:14:48 Swap: 1023 1 1022 04:14:48 04:14:48 04:14:49 ---> ip addr: 04:14:49 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 04:14:49 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 04:14:49 inet 127.0.0.1/8 scope host lo 04:14:49 valid_lft forever preferred_lft forever 04:14:49 inet6 ::1/128 scope host 04:14:49 valid_lft forever preferred_lft forever 04:14:49 2: ens3: mtu 1450 qdisc fq_codel state UP group default qlen 1000 04:14:49 link/ether fa:16:3e:7f:8a:03 brd ff:ff:ff:ff:ff:ff 04:14:49 inet 10.32.6.201/23 brd 10.32.7.255 scope global dynamic ens3 04:14:49 valid_lft 85405sec preferred_lft 85405sec 04:14:49 inet6 fe80::f816:3eff:fe7f:8a03/64 scope link 04:14:49 valid_lft forever preferred_lft forever 04:14:49 04:14:49 04:14:49 ---> sar -b -r -n DEV: 04:14:49 Linux 5.4.0-146-generic (prd-ubuntu1804-builder-2c-2g-2154) 12/28/23 _x86_64_ (2 CPU) 04:14:49 04:14:49 03:58:15 LINUX RESTART (2 CPU) 04:14:49 04:14:49 03:59:02 tps rtps wtps dtps bread/s bwrtn/s bdscd/s 04:14:49 04:00:01 162.76 66.57 96.19 0.00 1764.96 13464.86 0.00 04:14:49 04:01:01 90.07 29.96 60.11 0.00 1060.62 8901.45 0.00 04:14:49 04:02:01 7.37 0.08 7.28 0.00 3.07 1722.65 0.00 04:14:49 04:03:01 1.42 0.00 1.42 0.00 0.00 17.46 0.00 04:14:49 04:04:01 74.52 35.66 38.86 0.00 5959.81 9112.08 0.00 04:14:49 04:05:01 5.68 0.07 5.62 0.00 1.60 112.91 0.00 04:14:49 04:06:01 1.73 0.00 1.73 0.00 0.00 22.27 0.00 04:14:49 04:07:01 1.70 0.00 1.70 0.00 0.00 22.26 0.00 04:14:49 04:08:01 1.18 0.00 1.18 0.00 0.00 14.40 0.00 04:14:49 04:09:01 2.13 0.00 2.13 0.00 0.00 26.93 0.00 04:14:49 04:10:01 1.35 0.13 1.22 0.00 18.00 19.46 0.00 04:14:49 04:11:01 2.10 0.00 2.10 0.00 0.00 117.58 0.00 04:14:49 04:12:01 0.88 0.00 0.88 0.00 0.00 9.73 0.00 04:14:49 04:13:01 1.17 0.00 1.17 0.00 0.00 14.00 0.00 04:14:49 04:14:01 10.95 5.22 5.73 0.00 312.61 299.68 0.00 04:14:49 Average: 24.18 9.12 15.07 0.00 606.77 2246.18 0.00 04:14:49 04:14:49 03:59:02 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 04:14:49 04:00:01 78340 1365348 435828 21.46 58168 1308172 884952 28.74 518640 1240172 3520 04:14:49 04:01:01 99768 1379564 415116 20.44 69188 1272848 1019652 33.11 525012 1187708 49964 04:14:49 04:02:01 92744 1372596 422004 20.78 69252 1272936 1090364 35.41 532840 1187520 136 04:14:49 04:03:01 92796 1372696 421960 20.78 69292 1272932 1090364 35.41 533332 1187524 96 04:14:49 04:04:01 135316 1359236 414424 20.41 93204 1206384 1102096 35.79 724224 943848 1112 04:14:49 04:05:01 131740 1354044 419556 20.66 91780 1206432 1372576 44.57 730812 942028 316 04:14:49 04:06:01 131016 1353376 420196 20.69 91816 1206424 1422188 46.19 732052 942044 212 04:14:49 04:07:01 129424 1351860 421648 20.76 91872 1206424 1472860 47.83 733444 942044 168 04:14:49 04:08:01 129652 1352128 421328 20.75 91900 1206432 1520468 49.38 732784 942044 120 04:14:49 04:09:01 127376 1349904 423512 20.86 91956 1206432 1545288 50.18 735212 942020 120 04:14:49 04:10:01 123724 1349608 423400 20.85 92036 1209668 1554888 50.50 735052 944616 2852 04:14:49 04:11:01 123228 1349148 423820 20.87 92056 1209676 1554888 50.50 735072 944624 96 04:14:49 04:12:01 123472 1349416 423632 20.86 92080 1209676 1554888 50.50 735096 944624 92 04:14:49 04:13:01 123252 1349224 423788 20.87 92100 1209680 1554888 50.50 735196 944628 156 04:14:49 04:14:01 80404 1350292 423388 20.85 94188 1250920 848004 27.54 751332 974532 44416 04:14:49 Average: 114817 1357229 422240 20.79 85393 1230336 1305891 42.41 679340 1013998 6892 04:14:49 04:14:49 03:59:02 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 04:14:49 04:00:01 lo 0.81 0.81 0.07 0.07 0.00 0.00 0.00 0.00 04:14:49 04:00:01 ens3 75.47 63.15 960.80 12.53 0.00 0.00 0.00 0.00 04:14:49 04:01:01 lo 2.47 2.47 0.28 0.28 0.00 0.00 0.00 0.00 04:14:49 04:01:01 ens3 33.43 35.53 93.18 12.71 0.00 0.00 0.00 0.00 04:14:49 04:02:01 lo 1.07 1.07 0.10 0.10 0.00 0.00 0.00 0.00 04:14:49 04:02:01 ens3 1.15 1.18 0.13 0.13 0.00 0.00 0.00 0.00 04:14:49 04:03:01 lo 1.67 1.67 0.15 0.15 0.00 0.00 0.00 0.00 04:14:49 04:03:01 ens3 1.62 1.65 0.17 0.17 0.00 0.00 0.00 0.00 04:14:49 04:04:01 lo 2.07 2.07 0.19 0.19 0.00 0.00 0.00 0.00 04:14:49 04:04:01 ens3 282.90 144.03 2086.01 10.00 0.00 0.00 0.00 0.00 04:14:49 04:05:01 lo 4.70 4.70 0.63 0.63 0.00 0.00 0.00 0.00 04:14:49 04:05:01 ens3 3.33 3.18 1.19 0.66 0.00 0.00 0.00 0.00 04:14:49 04:06:01 lo 1.60 1.60 0.15 0.15 0.00 0.00 0.00 0.00 04:14:49 04:06:01 ens3 1.72 1.70 0.18 0.18 0.00 0.00 0.00 0.00 04:14:49 04:07:01 lo 1.67 1.67 0.15 0.15 0.00 0.00 0.00 0.00 04:14:49 04:07:01 ens3 1.67 1.68 0.18 0.18 0.00 0.00 0.00 0.00 04:14:49 04:08:01 lo 1.60 1.60 0.15 0.15 0.00 0.00 0.00 0.00 04:14:49 04:08:01 ens3 1.72 1.70 0.18 0.18 0.00 0.00 0.00 0.00 04:14:49 04:09:01 lo 1.80 1.80 0.17 0.17 0.00 0.00 0.00 0.00 04:14:49 04:09:01 ens3 1.88 1.85 0.26 0.25 0.00 0.00 0.00 0.00 04:14:49 04:10:01 lo 1.20 1.20 0.11 0.11 0.00 0.00 0.00 0.00 04:14:49 04:10:01 ens3 22.73 18.68 4.57 14.17 0.00 0.00 0.00 0.00 04:14:49 04:11:01 lo 0.20 0.20 0.01 0.01 0.00 0.00 0.00 0.00 04:14:49 04:11:01 ens3 0.12 0.12 0.01 0.01 0.00 0.00 0.00 0.00 04:14:49 04:12:01 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:14:49 04:12:01 ens3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:14:49 04:13:01 lo 0.20 0.20 0.01 0.01 0.00 0.00 0.00 0.00 04:14:49 04:13:01 ens3 0.12 0.10 0.01 0.01 0.00 0.00 0.00 0.00 04:14:49 04:14:01 lo 0.43 0.43 0.03 0.03 0.00 0.00 0.00 0.00 04:14:49 04:14:01 ens3 6.70 6.02 4.93 3.06 0.00 0.00 0.00 0.00 04:14:49 Average: lo 1.43 1.43 0.15 0.15 0.00 0.00 0.00 0.00 04:14:49 Average: ens3 28.92 18.66 209.29 3.61 0.00 0.00 0.00 0.00 04:14:49 04:14:49 04:14:49 ---> sar -P ALL: 04:14:49 Linux 5.4.0-146-generic (prd-ubuntu1804-builder-2c-2g-2154) 12/28/23 _x86_64_ (2 CPU) 04:14:49 04:14:49 03:58:15 LINUX RESTART (2 CPU) 04:14:49 04:14:49 03:59:02 CPU %user %nice %system %iowait %steal %idle 04:14:49 04:00:01 all 35.31 13.48 11.49 8.13 0.13 31.47 04:14:49 04:00:01 0 31.98 12.74 10.87 6.53 0.12 37.75 04:14:49 04:00:01 1 38.65 14.22 12.10 9.73 0.14 25.16 04:14:49 04:01:01 all 30.78 0.00 3.41 5.83 0.10 59.89 04:14:49 04:01:01 0 38.82 0.00 3.48 3.68 0.12 53.90 04:14:49 04:01:01 1 22.76 0.00 3.34 7.97 0.08 65.86 04:14:49 04:02:01 all 1.08 0.00 0.28 0.16 0.05 98.43 04:14:49 04:02:01 0 0.57 0.00 0.32 0.23 0.05 98.83 04:14:49 04:02:01 1 1.59 0.00 0.25 0.08 0.05 98.03 04:14:49 04:03:01 all 1.63 0.00 0.24 0.02 0.05 98.06 04:14:49 04:03:01 0 2.17 0.00 0.18 0.00 0.05 97.60 04:14:49 04:03:01 1 1.09 0.00 0.30 0.03 0.05 98.53 04:14:49 04:04:01 all 8.75 0.00 4.78 3.56 0.08 82.82 04:14:49 04:04:01 0 9.87 0.00 4.31 3.01 0.08 82.72 04:14:49 04:04:01 1 7.62 0.00 5.26 4.10 0.08 82.93 04:14:49 04:05:01 all 2.27 0.00 0.45 0.27 0.06 96.94 04:14:49 04:05:01 0 1.47 0.00 0.37 0.27 0.07 97.82 04:14:49 04:05:01 1 3.06 0.00 0.53 0.28 0.05 96.08 04:14:49 04:06:01 all 1.11 0.00 0.30 0.02 0.08 98.50 04:14:49 04:06:01 0 0.33 0.00 0.37 0.00 0.07 99.23 04:14:49 04:06:01 1 1.88 0.00 0.24 0.03 0.08 97.77 04:14:49 04:07:01 all 1.08 0.00 0.29 0.05 0.06 98.52 04:14:49 04:07:01 0 1.87 0.00 0.27 0.03 0.07 97.76 04:14:49 04:07:01 1 0.30 0.00 0.30 0.07 0.05 99.28 04:14:49 04:08:01 all 1.49 0.00 0.32 0.02 0.06 98.12 04:14:49 04:08:01 0 1.20 0.00 0.40 0.03 0.07 98.30 04:14:49 04:08:01 1 1.77 0.00 0.23 0.00 0.05 97.94 04:14:49 04:09:01 all 2.06 0.00 0.36 0.03 0.07 97.48 04:14:49 04:09:01 0 3.03 0.00 0.35 0.07 0.07 96.49 04:14:49 04:09:01 1 1.07 0.00 0.37 0.00 0.07 98.49 04:14:49 04:10:01 all 1.59 0.00 0.48 0.03 0.07 97.83 04:14:49 04:10:01 0 1.32 0.00 0.50 0.05 0.08 98.04 04:14:49 04:10:01 1 1.86 0.00 0.45 0.02 0.05 97.62 04:14:49 04:14:49 04:10:01 CPU %user %nice %system %iowait %steal %idle 04:14:49 04:11:01 all 0.29 0.00 0.30 0.02 0.07 99.33 04:14:49 04:11:01 0 0.30 0.00 0.34 0.03 0.07 99.26 04:14:49 04:11:01 1 0.27 0.00 0.27 0.00 0.07 99.40 04:14:49 04:12:01 all 0.86 0.00 0.34 0.02 0.07 98.71 04:14:49 04:12:01 0 1.41 0.00 0.42 0.03 0.08 98.05 04:14:49 04:12:01 1 0.30 0.00 0.27 0.00 0.05 99.38 04:14:49 04:13:01 all 0.34 0.00 0.31 0.02 0.07 99.26 04:14:49 04:13:01 0 0.37 0.00 0.27 0.03 0.05 99.28 04:14:49 04:13:01 1 0.32 0.00 0.35 0.00 0.08 99.25 04:14:49 04:14:01 all 12.94 0.00 3.32 0.53 0.08 83.13 04:14:49 04:14:01 0 6.02 0.00 2.63 0.72 0.07 90.56 04:14:49 04:14:01 1 19.85 0.00 4.02 0.34 0.08 75.72 04:14:49 Average: all 6.74 0.88 1.77 1.24 0.07 89.30 04:14:49 Average: 0 6.70 0.84 1.66 0.98 0.07 89.76 04:14:49 Average: 1 6.79 0.93 1.87 1.50 0.07 88.84 04:14:49 04:14:49 04:14:49