def connect(vtgate_addrs, timeout, user=None, password=None): """Return opened connection to vtgate.""" db_params_list = get_params_for_vtgate_conn(vtgate_addrs, timeout, user=user, password=password) if not db_params_list: raise dbexceptions.OperationalError( 'empty db params list - no db instance available for vtgate_addrs %s' % vtgate_addrs) db_exception = None host_addr = None for params in db_params_list: try: db_params = params.copy() host_addr = db_params['addr'] conn = VTGateConnection(**db_params) conn.dial() return conn except Exception as e: db_exception = e logging.warning('db connection failed: %s, %s', host_addr, e) raise dbexceptions.OperationalError('unable to create vt connection', host_addr, db_exception) vtgate_client.register_conn_class('gorpc', VTGateConnection)
return dbexceptions.TransientError(details, new_args) elif code == grpc.StatusCode.ALREADY_EXISTS: new_exc = _prune_integrity_error(details, new_args) elif code == grpc.StatusCode.FAILED_PRECONDITION: return dbexceptions.QueryNotServed(details, new_args) elif code == grpc.StatusCode.INVALID_ARGUMENT: return dbexceptions.ProgrammingError(details, new_args) else: # Other RPC error that we don't specifically handle. new_exc = dbexceptions.DatabaseError(new_args + (code, details)) else: # RPC error that doesn't provide code and details. # Don't let gRPC-specific errors leak beyond this package. new_exc = dbexceptions.DatabaseError(new_args + (exc,)) else: new_exc = exc vtgate_utils.log_exception( new_exc, keyspace=kwargs.get('keyspace'), tablet_type=kwargs.get('tablet_type')) return new_exc def _prune_integrity_error(msg, exc_args): """Prunes an integrity error message and returns an IntegrityError.""" parts = _errno_pattern.split(msg) pruned_msg = msg[:msg.find(parts[2])] exc_args = (pruned_msg,) + tuple(exc_args[1:]) return dbexceptions.IntegrityError(exc_args) vtgate_client.register_conn_class('grpc', GRPCVTGateConnection)
return db_params_list def connect(vtgate_addrs, timeout, user=None, password=None): """Return opened connection to vtgate.""" db_params_list = get_params_for_vtgate_conn(vtgate_addrs, timeout, user=user, password=password) if not db_params_list: raise dbexceptions.OperationalError( 'empty db params list - no db instance available for vtgate_addrs %s' % vtgate_addrs) db_exception = None host_addr = None for params in db_params_list: try: db_params = params.copy() host_addr = db_params['addr'] conn = VTGateConnection(**db_params) conn.dial() return conn except Exception as e: db_exception = e logging.warning('db connection failed: %s, %s', host_addr, e) raise dbexceptions.OperationalError( 'unable to create vt connection', host_addr, db_exception) vtgate_client.register_conn_class('gorpc', VTGateConnection)