def allowed_volumes(context, requested_volumes, size): """Check volume quotas and return breached if any.""" project_id = context.project_id context = context.elevated() size = int(size) allowed = {} overs = [] used_volumes, used_gigabytes = db.volume_data_get_for_project(context, project_id) usages = dict(volumes=used_volumes, gigabytes=used_gigabytes) quotas = get_project_quotas(context, project_id) def _check_allowed(resource, requested): allow = _get_request_allotment(requested, usages[resource], quotas[resource]) if requested and allow < requested: overs.append(resource) allowed[resource] = allow _check_allowed('volumes', requested_volumes) _check_allowed('gigabytes', requested_volumes * size) if size != 0: allowed['volumes'] = min(allowed['volumes'], int(allowed['gigabytes'] // size)) return dict(overs=overs, usages=usages, quotas=quotas, allowed=allowed)
def allowed_volumes(context, num_volumes, size): """Check quota and return min(num_volumes, allowed_volumes).""" project_id = context.project_id context = context.elevated() used_volumes, used_gigabytes = db.volume_data_get_for_project( context, project_id) quota = get_quota(context, project_id) allowed_volumes = quota['volumes'] - used_volumes allowed_gigabytes = quota['gigabytes'] - used_gigabytes size = int(size) num_gigabytes = num_volumes * size allowed_volumes = min(allowed_volumes, int(allowed_gigabytes // size)) return min(num_volumes, allowed_volumes)
def allowed_volumes(context, requested_volumes, size): """Check quota and return min(requested_volumes, allowed_volumes).""" project_id = context.project_id context = context.elevated() size = int(size) requested_gigabytes = requested_volumes * size used_volumes, used_gigabytes = db.volume_data_get_for_project(context, project_id) quota = get_project_quotas(context, project_id) allowed_volumes = _get_request_allotment(requested_volumes, used_volumes, quota["volumes"]) allowed_gigabytes = _get_request_allotment(requested_gigabytes, used_gigabytes, quota["gigabytes"]) if size != 0: allowed_volumes = min(allowed_volumes, int(allowed_gigabytes // size)) return min(requested_volumes, allowed_volumes)
def allowed_volumes(context, num_volumes, size): """Check quota and return min(num_volumes, allowed_volumes).""" project_id = context.project_id context = context.elevated() used_volumes, used_gigabytes = db.volume_data_get_for_project(context, project_id) quota = get_quota(context, project_id) allowed_volumes = quota['volumes'] - used_volumes allowed_gigabytes = quota['gigabytes'] - used_gigabytes size = int(size) num_gigabytes = num_volumes * size allowed_volumes = min(allowed_volumes, int(allowed_gigabytes // size)) return min(num_volumes, allowed_volumes)
def allowed_volumes(context, requested_volumes, size): """Check quota and return min(requested_volumes, allowed_volumes).""" project_id = context.project_id context = context.elevated() size = int(size) requested_gigabytes = requested_volumes * size used_volumes, used_gigabytes = db.volume_data_get_for_project( context, project_id) quota = get_project_quotas(context, project_id) allowed_volumes = _get_request_allotment(requested_volumes, used_volumes, quota['volumes']) allowed_gigabytes = _get_request_allotment(requested_gigabytes, used_gigabytes, quota['gigabytes']) allowed_volumes = min(allowed_volumes, int(allowed_gigabytes // size)) return min(requested_volumes, allowed_volumes)
def _sync_volumes(context, project_id, session): return dict(zip(('volumes', 'gigabytes'), db.volume_data_get_for_project( context, project_id, session=session)))