Exemple #1
0
def lock_tables(session, tables):
    """Write-lock tables for supported backends: MySQL and PostgreSQL"""
    session.begin(subtransactions=True)
    if is_mysql():  # Explicitly LOCK TABLES for MySQL
        session.execute('SET autocommit=0')
        session.execute('LOCK TABLES {}'.format(
            ','.join([table + ' WRITE' for table in tables])))
    elif is_postgres():  # Explicitly LOCK TABLE for Postgres
        session.execute('BEGIN TRANSACTION')
        for table in tables:
            session.execute('LOCK TABLE {} IN EXCLUSIVE MODE'.format(table))
Exemple #2
0
def lock_tables(session, tables):
    """Write-lock tables for supported backends: MySQL and PostgreSQL"""
    session.begin(subtransactions=True)
    if is_mysql():  # Explicitly LOCK TABLES for MySQL
        session.execute('SET autocommit=0')
        session.execute('LOCK TABLES {}'.format(
            ','.join([table + ' WRITE' for table in tables])))
    elif is_postgres():  # Explicitly LOCK TABLE for Postgres
        session.execute('BEGIN TRANSACTION')
        for table in tables:
            session.execute('LOCK TABLE {} IN EXCLUSIVE MODE'.format(table))
Exemple #3
0
def projects_delete(context, project_id):
    """Delete an existing project given by its id."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Project, session=session)
        query = query.filter_by(id=project_id)
        query.delete()
Exemple #4
0
def revision_tag_create(revision_id, tag, data=None, session=None):
    """Create a revision tag.

    If a tag already exists by name ``tag``, the request is ignored.

    :param revision_id: ID corresponding to ``Revision`` DB object.
    :param tag: Name of the revision tag.
    :param data: Dictionary of data to be associated with tag.
    :param session: Database session object.
    :returns: The tag that was created if not already present in the database,
        else None.
    :raises RevisionTagBadFormat: If data is neither None nor dictionary.
    """
    session = session or get_session()
    tag_model = models.RevisionTag()

    if data and not isinstance(data, dict):
        raise errors.RevisionTagBadFormat(data=data)

    try:
        with session.begin():
            tag_model.update({
                'tag': tag,
                'data': data,
                'revision_id': revision_id
            })
            tag_model.save(session=session)
        resp = tag_model.to_dict()
    except db_exception.DBDuplicateEntry:
        resp = None

    return resp
Exemple #5
0
def service_update(context, service_id, values):
    session = get_session()

    with session.begin():
        service_ref = service_get(context, service_id, session=session)
        service_ref.update(values)
        service_ref.save(session=session)
Exemple #6
0
def projects_delete(context, project_id):
    """Delete an existing project given by its id."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Project, session=session)
        query = query.filter_by(id=project_id)
        query.delete()
Exemple #7
0
def backend_info_create(context, host, value):
    session = get_session()
    with session.begin():
        info_ref = models.BackendInfo()
        info_ref.update({"host": host, "info_hash": value})
        info_ref.save(session)
        return info_ref
Exemple #8
0
def storage_update(context, storage_id, values):
    """Update a storage device with the values dictionary."""
    session = get_session()
    with session.begin():
        query = _storage_get_query(context, session)
        result = query.filter_by(id=storage_id).update(values)
    return result
Exemple #9
0
def storage_get_all(context,
                    marker=None,
                    limit=None,
                    sort_keys=None,
                    sort_dirs=None,
                    filters=None,
                    offset=None):
    session = get_session()
    with session.begin():
        # Generate the query
        query = _generate_paginate_query(
            context,
            session,
            models.Storage,
            marker,
            limit,
            sort_keys,
            sort_dirs,
            filters,
            offset,
        )
        # No storages   match, return empty list
        if query is None:
            return []
        return query.all()
Exemple #10
0
def pool_get_all(context,
                 marker=None,
                 limit=None,
                 sort_keys=None,
                 sort_dirs=None,
                 filters=None,
                 offset=None):
    """Retrieves all storage pools."""
    session = get_session()
    with session.begin():
        # Generate the query
        query = _generate_paginate_query(
            context,
            session,
            models.Pool,
            marker,
            limit,
            sort_keys,
            sort_dirs,
            filters,
            offset,
        )
        # No pool would match, return empty list
        if query is None:
            return []
        return query.all()
Exemple #11
0
def regions_create(context, values):
    """Create a new region."""
    session = get_session()
    region = models.Region()
    with session.begin():
        region.update(values)
        region.save(session)
    return region
Exemple #12
0
def net_interfaces_delete(context, interface_id):
    """Delete existing network interface."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.NetInterface, session=session,
                            project_only=True)
        query = query.filter_by(id=interface_id)
        query.delete()
Exemple #13
0
def cells_create(context, values):
    """Create a new cell."""
    session = get_session()
    cell = models.Cell()
    with session.begin():
        cell.update(values)
        cell.save(session)
    return cell
Exemple #14
0
def cells_delete(context, cell_id):
    """Delete an existing cell."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Cell, session=session,
                            project_only=True)
        query = query.filter_by(id=cell_id)
        query.delete()
Exemple #15
0
def net_interfaces_create(context, values):
    """Create a new network interface."""
    session = get_session()
    interface = models.NetInterface()
    with session.begin():
        interface.update(values)
        interface.save(session)
    return interface
Exemple #16
0
def projects_create(context, values):
    """Create a new project with given values."""
    session = get_session()
    project = models.Project()
    with session.begin():
        project.update(values)
        project.save(session)
    return project
Exemple #17
0
def netdevices_create(context, values):
    """Create a new network device."""
    session = get_session()
    device = models.NetDevice()
    with session.begin():
        device.update(values)
        device.save(session)
    return device
Exemple #18
0
def users_create(context, values):
    """Create a new user with given values."""
    session = get_session()
    user = models.User()
    with session.begin():
        user.update(values)
        user.save(session)
    return user
Exemple #19
0
def save_blob_data(context, blob_data_id, data, session):
    """Save blob data to database."""
    with session.begin():
        blob_data = models.ArtifactBlobData()
        blob_data.id = blob_data_id
        blob_data.data = data.read()
        blob_data.save(session=session)
        return "sql://" + blob_data.id
Exemple #20
0
def hosts_create(context, values):
    """Create a new host."""
    session = get_session()
    host = models.Host()
    with session.begin():
        host.update(values)
        host.save(session)
    return host
Exemple #21
0
def net_interfaces_delete(context, interface_id):
    """Delete existing network interface."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.NetInterface, session=session,
                            project_only=True)
        query = query.filter_by(id=interface_id)
        query.delete()
Exemple #22
0
def cells_delete(context, cell_id):
    """Delete an existing cell."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Cell, session=session,
                            project_only=True)
        query = query.filter_by(id=cell_id)
        query.delete()
Exemple #23
0
def cells_create(context, values):
    """Create a new cell."""
    session = get_session()
    cell = models.Cell()
    with session.begin():
        cell.update(values)
        cell.save(session)
    return cell
Exemple #24
0
def model_evaluation_delete(context, model_evaluation_id):
    session = get_session()

    with session.begin():
        model_evaluation_ref = model_evaluation_get(context,
                                                    model_evaluation_id,
                                                    session)
        model_evaluation_ref.soft_delete(session=session)
Exemple #25
0
def hosts_create(context, values):
    """Create a new host."""
    session = get_session()
    host = models.Host()
    with session.begin():
        host.update(values)
        host.save(session)
    return host
Exemple #26
0
def net_interfaces_create(context, values):
    """Create a new network interface."""
    session = get_session()
    interface = models.NetInterface()
    with session.begin():
        interface.update(values)
        interface.save(session)
    return interface
Exemple #27
0
def regions_create(context, values):
    """Create a new region."""
    session = get_session()
    region = models.Region()
    with session.begin():
        region.update(values)
        region.save(session)
    return region
Exemple #28
0
def netdevices_create(context, values):
    """Create a new network device."""
    session = get_session()
    device = models.NetDevice()
    with session.begin():
        device.update(values)
        device.save(session)
    return device
Exemple #29
0
def networks_create(context, values):
    """Create a new network."""
    session = get_session()
    network = models.Network()
    with session.begin():
        network.update(values)
        network.save(session)
    return network
Exemple #30
0
def users_create(context, values):
    """Create a new user with given values."""
    session = get_session()
    user = models.User()
    with session.begin():
        user.update(values)
        user.save(session)
    return user
Exemple #31
0
def regions_delete(context, region_id):
    """Delete an existing region."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Region, session=session,
                            project_only=True)
        query = query.filter_by(id=region_id)
        query.delete()
    return
Exemple #32
0
def clouds_delete(context, cloud_id):
    """Delete an existing cloud."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Cloud, session=session,
                            project_only=True)
        query = query.filter_by(id=cloud_id)
        query.delete()
    return
Exemple #33
0
def networks_delete(context, network_id):
    """Delete existing network."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Network, session=session,
                            project_only=True)
        query = query.filter_by(id=network_id)
        query.delete()
    return
Exemple #34
0
def networks_delete(context, network_id):
    """Delete existing network."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Network, session=session,
                            project_only=True)
        query = query.filter_by(id=network_id)
        query.delete()
    return
Exemple #35
0
def regions_delete(context, region_id):
    """Delete an existing region."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Region, session=session,
                            project_only=True)
        query = query.filter_by(id=region_id)
        query.delete()
    return
Exemple #36
0
def users_delete(context, user_id):
    """Delete an existing user given by its id."""
    LOG.info("Deleting user with id %s" % user_id)
    session = get_session()
    with session.begin():
        query = model_query(context, models.User, session=session)
        query = query.filter_by(id=user_id)
        query.delete()
    return
Exemple #37
0
def users_delete(context, user_id):
    """Delete an existing user given by its id."""
    LOG.info("Deleting user with id %s" % user_id)
    session = get_session()
    with session.begin():
        query = model_query(context, models.User, session=session)
        query = query.filter_by(id=user_id)
        query.delete()
    return
Exemple #38
0
def add_cpu_sample(sample):
    session = get_session()
    with session.begin():
        value = models.Cpu(
           instance_uuid=sample['instance_uuid'],
            tenant_id=sample['tenant_id'],
            cpu_load=sample['cpu_load'],
        )

        value.save(session=session)
Exemple #39
0
def add_mem_sample(sample):
    session = get_session()
    with session.begin():
        value = models.Mem(
           instance_uuid=sample['instance_uuid'],
            tenant_id=sample['tenant_id'],
            mem_used=sample['mem_used'],
        )

        value.save(session=session)
Exemple #40
0
def projects_create(context, values):
    """Create a new project with given values."""
    session = get_session()
    project = models.Project()
    if not values.get('id'):
        values['id'] = uuidutils.generate_uuid()
    with session.begin():
        project.update(values)
        project.save(session)
    return project
Exemple #41
0
def netdevices_delete(context, netdevice_id):
    """Delete existing network device."""
    session = get_session()
    with session.begin():
        device = with_polymorphic(models.Device, '*')
        query = model_query(context, device, session=session,
                            project_only=True)
        query = query.filter_by(type='net_devices')
        query = query.filter_by(id=netdevice_id)
        query.delete()
Exemple #42
0
def dataset_update(context, dataset_id, update_values):
    session = get_session()
    values = copy.deepcopy(update_values)

    with session.begin():
        dataset_ref = dataset_get(context, dataset_id, session=session)

        dataset_ref.update(values)
        dataset_ref.save(session=session)
        return dataset_ref
Exemple #43
0
def model_update(context, model_id, update_values):
    session = get_session()
    values = copy.deepcopy(update_values)

    with session.begin():
        model_ref = model_get(context, model_id, session=session)

        model_ref.update(values)
        model_ref.save(session=session)
        return model_ref
Exemple #44
0
def learning_update(context, learning_id, update_values):
    session = get_session()
    values = copy.deepcopy(update_values)

    with session.begin():
        learning_ref = learning_get(context, learning_id, session=session)

        learning_ref.update(values)
        learning_ref.save(session=session)
        return learning_ref
Exemple #45
0
def hosts_delete(context, host_id):
    """Delete an existing host."""
    session = get_session()
    with session.begin():
        host_devices = with_polymorphic(models.Device, '*')
        query = model_query(context, host_devices, session=session,
                            project_only=True)
        query = query.filter_by(id=host_id)
        query.delete()
    return
Exemple #46
0
def projects_create(context, values):
    """Create a new project with given values."""
    session = get_session()
    project = models.Project()
    if not values.get('id'):
        values['id'] = uuidutils.generate_uuid()
    with session.begin():
        project.update(values)
        project.save(session)
    return project
Exemple #47
0
def netdevices_delete(context, netdevice_id):
    """Delete existing network device."""
    session = get_session()
    with session.begin():
        device = with_polymorphic(models.Device, '*')
        query = model_query(context, device, session=session,
                            project_only=True)
        query = query.filter_by(type='net_devices')
        query = query.filter_by(id=netdevice_id)
        query.delete()
Exemple #48
0
def networks_create(context, values):
    """Create a new network."""
    session = get_session()
    network = models.Network()
    with session.begin():
        try:
            network.update(values)
            network.save(session)
        except db_exc.DBDuplicateEntry:
            raise exceptions.DuplicateNetwork()
    return network
Exemple #49
0
 def delete_resource(self, resource_id):
     session = self.engine_facade.get_session()
     with session.begin():
         # We are going to delete the resource; the on delete will set the
         # resource_id of the attached metrics to NULL, we just have to mark
         # their status as 'delete'
         session.query(Metric).filter(
             Metric.resource_id == resource_id).update(
                 {"status": "delete"})
         if session.query(Resource).filter(
                 Resource.id == resource_id).delete() == 0:
             raise indexer.NoSuchResource(resource_id)
Exemple #50
0
 def delete_resource(self, resource_id, delete_metrics=None):
     session = self.engine_facade.get_session()
     with session.begin():
         q = session.query(Resource).filter(
             Resource.id == resource_id).options(
                 sqlalchemy.orm.joinedload(Resource.metrics))
         r = q.first()
         if r is None:
             raise indexer.NoSuchResource(resource_id)
         if delete_metrics is not None:
             delete_metrics(self.get_metrics([m.id for m in r.metrics]))
         q.delete()
Exemple #51
0
def add_disk_sample(sample):
    session = get_session()
    with session.begin():
        value = models.Disk(
           instance_uuid=sample['instance_uuid'],
            tenant_id=sample['tenant_id'],
            rd_req_rate=sample['rd_req_rate'],
            rd_bytes_rate=sample['rd_bytes_rate'],
            wr_req_rate=sample['wr_req_rate'],
            wr_bytes_rate=sample['wr_bytes_rate']
        )

        value.save(session=session)
Exemple #52
0
def add_net_sample(sample):
    session = get_session()
    with session.begin():
        value = models.Net(
           instance_uuid=sample['instance_uuid'],
            tenant_id=sample['tenant_id'],
            tx_bytes_rate=sample['tx_bytes_rate'],
            tx_packets_rate=sample['tx_packets_rate'],
            rx_bytes_rate=sample['rx_bytes_rate'],
            rx_packets_rate=sample['tx_packets_rate']
        )

        value.save(session=session)
Exemple #53
0
def cells_update(context, cell_id, values):
    """Update an existing cell."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Cell, session=session,
                            project_only=True)
        query = query.filter_by(id=cell_id)
        try:
            cell_ref = query.with_lockmode('update').one()
        except Exception:
            raise

        cell_ref.update(values)
        cell_ref.save(session)
    return cell_ref
Exemple #54
0
def networks_data_update(context, network_id, data):
    """Update/create networks variables data."""
    session = get_session()
    with session.begin():
        query = model_query(context, models.Network, session=session,
                            project_only=True)
        query = query.filter_by(id=network_id)

        try:
            ref = query.with_lockmode('update').one()
        except sa_exc.NoResultFound:
            raise exceptions.NetworkNotFound(id=network_id)

        for key in data:
            ref.variables[key] = data[key]

        return ref
Exemple #55
0
def _device_labels_update(context, device_type, device_id, labels):
    """Update labels for the given device. Add the label if it is not present
    in host labels list, otherwise do nothing."""
    session = get_session()
    with session.begin():
        devices = with_polymorphic(models.Device, '*')
        query = model_query(context, devices, session=session,
                            project_only=True)
        query = query.filter_by(type=device_type)
        query = query.filter_by(id=device_id)
        try:
            device = query.one()
        except sa_exc.NoResultFound:
            raise exceptions.NotFound()

        device.labels.update(labels["labels"])
        device.save(session)
        return device
Exemple #56
0
def _device_labels_delete(context, device_type, device_id, labels):
    """Delete labels from the device labels list if it matches
    the given label in the query, otherwise do nothing."""
    session = get_session()
    with session.begin():
        devices = with_polymorphic(models.Device, '*')
        query = model_query(context, devices, session=session,
                            project_only=True)
        query = query.filter_by(type=device_type)
        query = query.filter_by(id=device_id)
        try:
            device = query.one()
        except sa_exc.NoResultFound:
            raise exceptions.NotFound()

        for label in labels["labels"]:
            device.labels.discard(label)
        device.save(session)
        return device
Exemple #57
0
def cells_data_update(context, cell_id, data):
    """Update existing cells variables or create when
    its not present.
    """
    session = get_session()
    with session.begin():
        query = model_query(context, models.Cell, session=session,
                            project_only=True)
        query = query.filter_by(id=cell_id)

        try:
            cell_ref = query.with_lockmode('update').one()
        except NoResultFound:
            # cell does not exist so cant do this
            raise

        for key in data:
            cell_ref.variables[key] = data[key]

    return cell_ref
Exemple #58
0
def _device_data_update(context, device_type, device_id, data):
    """Update existing device variables or create when its not present."""
    session = get_session()
    with session.begin():
        _devices = with_polymorphic(models.Device, '*')
        query = model_query(context, _devices, session=session,
                            project_only=True)
        query = query.filter_by(type=device_type)
        query = query.filter_by(id=device_id)

        try:
            ref = query.with_lockmode('update').one()
        except sa_exc.NoResultFound:
            raise exceptions.DeviceNotFound(device_type=device_type,
                                            id=device_id)

        for key in data:
            ref.variables[key] = data[key]

        return ref
Exemple #59
0
def regions_data_update(context, region_id, data):
    """
    Update existing region variables or create when its not present.
    """
    session = get_session()
    with session.begin():
        query = model_query(context, models.Region, session=session,
                            project_only=True)
        query = query.filter_by(id=region_id)

        try:
            region_ref = query.with_lockmode('update').one()
        except sa_exc.NoResultFound:
            # region does not exist so can't do this
            raise

        for key in data:
            region_ref.variables[key] = data[key]

    return region_ref