Skip to content
Browse files

Move ssh and local connection plugins from using raw select to selectors

At the moment, this change will use EPoll on Linux, KQueue on *BSDs,
etc, so it should alleviate problems with too many open file

* Bundle a copy of selectors2 so that we have the selectors API everywhere.
* Add licensing information to selectors2 file so it's clear what the
  licensing terms and conditions are.
* Exclude the bundled copy of selectors2 from our boilerplate code-smell test
* Rewrite ssh_run tests to attempt to work around problem with mocking
  select on shippable

Fixes #14143
  • Loading branch information...
abadger committed Feb 1, 2017
1 parent 2c70450 commit d1a6b07fe1ceb8099abf763ac7e4bb4ebfaf1d3f
@@ -0,0 +1,47 @@
# (c) 2014, 2017 Toshio Kuratomi <>
# This file is part of Ansible
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <>.

# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

Compat selectors library. Python-3.5 has this builtin. The selectors2
package exists on pypi to backport the functionality as far as python-2.6.
# The following makes it easier for us to script updates of the bundled code
_BUNDLED_METADATA = { "pypi_name": "selectors2", "version": "1.1.0" }

import os.path
import sys

# Python 3.4+
import selectors as _system_selectors
except ImportError:
# backport package installed in the system
import selectors2 as _system_selectors
except ImportError:
_system_selectors = None

if _system_selectors:
selectors = _system_selectors
# Our bundled copy
from . import _selectors2 as selectors
sys.modules['ansible.compat.selectors'] = selectors

0 comments on commit d1a6b07

Please sign in to comment.
You can’t perform that action at this time.