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))
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()
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
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)
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
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
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()
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()
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
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()
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
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()
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
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
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
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
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
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
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)
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
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
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
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
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
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)
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)
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
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()
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
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
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
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
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
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)
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()
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)
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)
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
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
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
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
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
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
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