Beispiel #1
0
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)
Beispiel #2
0
          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)
Beispiel #3
0
  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)