MCPcopy Create free account
hub / github.com/apache/cassandra-python-driver / SniEndPoint

Class SniEndPoint

cassandra/connection.py:246–304  ·  view source on GitHub ↗

SNI Proxy EndPoint implementation.

Source from the content-addressed store, hash-verified

244
245@total_ordering
246class SniEndPoint(EndPoint):
247 """SNI Proxy EndPoint implementation."""
248
249 def __init__(self, proxy_address, server_name, port=9042, init_index=0):
250 self._proxy_address = proxy_address
251 self._index = init_index
252 self._resolved_address = None # resolved address
253 self._port = port
254 self._server_name = server_name
255 self._ssl_options = {'server_hostname': server_name}
256
257 @property
258 def address(self):
259 return self._proxy_address
260
261 @property
262 def port(self):
263 return self._port
264
265 @property
266 def ssl_options(self):
267 return self._ssl_options
268
269 def resolve(self):
270 try:
271 resolved_addresses = self._resolve_proxy_addresses()
272 except socket.gaierror:
273 log.debug('Could not resolve sni proxy hostname "%s" '
274 'with port %d' % (self._proxy_address, self._port))
275 raise
276
277 # round-robin pick
278 self._resolved_address = sorted(addr[4][0] for addr in resolved_addresses)[self._index % len(resolved_addresses)]
279 self._index += 1
280
281 return self._resolved_address, self._port
282
283 def _resolve_proxy_addresses(self):
284 return socket.getaddrinfo(self._proxy_address, self._port,
285 socket.AF_UNSPEC, socket.SOCK_STREAM)
286
287 def __eq__(self, other):
288 return (isinstance(other, SniEndPoint) and
289 self.address == other.address and self.port == other.port and
290 self._server_name == other._server_name)
291
292 def __hash__(self):
293 return hash((self.address, self.port, self._server_name))
294
295 def __lt__(self, other):
296 return ((self.address, self.port, self._server_name) <
297 (other.address, other.port, self._server_name))
298
299 def __str__(self):
300 return str("%s:%d:%s" % (self.address, self.port, self._server_name))
301
302 def __repr__(self):
303 return "<%s: %s:%d:%s>" % (self.__class__.__name__,

Callers 2

createMethod · 0.85
create_from_sniMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected