Show More
@@ -84,6 +84,7 EXTRA ATTRIBUTES AND METHODS | |||||
84 |
|
84 | |||
85 | from __future__ import absolute_import, print_function |
|
85 | from __future__ import absolute_import, print_function | |
86 |
|
86 | |||
|
87 | import collections | |||
87 | import errno |
|
88 | import errno | |
88 | import hashlib |
|
89 | import hashlib | |
89 | import socket |
|
90 | import socket | |
@@ -114,15 +115,13 class ConnectionManager(object): | |||||
114 | """ |
|
115 | """ | |
115 | def __init__(self): |
|
116 | def __init__(self): | |
116 | self._lock = threading.Lock() |
|
117 | self._lock = threading.Lock() | |
117 |
self._hostmap = |
|
118 | self._hostmap = collections.defaultdict(list) # host -> [connection] | |
118 | self._connmap = {} # map connections to host |
|
119 | self._connmap = {} # map connections to host | |
119 | self._readymap = {} # map connection to ready state |
|
120 | self._readymap = {} # map connection to ready state | |
120 |
|
121 | |||
121 | def add(self, host, connection, ready): |
|
122 | def add(self, host, connection, ready): | |
122 | self._lock.acquire() |
|
123 | self._lock.acquire() | |
123 | try: |
|
124 | try: | |
124 | if host not in self._hostmap: |
|
|||
125 | self._hostmap[host] = [] |
|
|||
126 | self._hostmap[host].append(connection) |
|
125 | self._hostmap[host].append(connection) | |
127 | self._connmap[connection] = host |
|
126 | self._connmap[connection] = host | |
128 | self._readymap[connection] = ready |
|
127 | self._readymap[connection] = ready | |
@@ -155,19 +154,18 class ConnectionManager(object): | |||||
155 | conn = None |
|
154 | conn = None | |
156 | self._lock.acquire() |
|
155 | self._lock.acquire() | |
157 | try: |
|
156 | try: | |
158 |
|
|
157 | for c in self._hostmap[host]: | |
159 |
|
|
158 | if self._readymap[c]: | |
160 |
|
|
159 | self._readymap[c] = 0 | |
161 |
|
|
160 | conn = c | |
162 |
|
|
161 | break | |
163 | break |
|
|||
164 | finally: |
|
162 | finally: | |
165 | self._lock.release() |
|
163 | self._lock.release() | |
166 | return conn |
|
164 | return conn | |
167 |
|
165 | |||
168 | def get_all(self, host=None): |
|
166 | def get_all(self, host=None): | |
169 | if host: |
|
167 | if host: | |
170 |
return list(self._hostmap |
|
168 | return list(self._hostmap[host]) | |
171 | else: |
|
169 | else: | |
172 | return dict(self._hostmap) |
|
170 | return dict(self._hostmap) | |
173 |
|
171 |
General Comments 0
You need to be logged in to leave comments.
Login now