~vishvananda/nova/lp776825

« back to all changes in this revision

Viewing changes to nova/db/sqlalchemy/api.py

  • Committer: Tarmac
  • Author(s): Mark Washenberger
  • Date: 2011-05-16 20:51:08 UTC
  • mfrom: (1054.6.13 quota-key-value)
  • Revision ID: tarmac-20110516205108-5l1lmir6lxiy1kur
Migrate quota schema from hardcoded columns to a key-value approach. The hope is that this change would make it easier to change the quota system without future schema changes. It also adds the concept of quotas that are unlimited.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1498
1498
 
1499
1499
 
1500
1500
@require_admin_context
1501
 
def quota_get(context, project_id, session=None):
 
1501
def quota_get(context, project_id, resource, session=None):
1502
1502
    if not session:
1503
1503
        session = get_session()
1504
 
 
1505
1504
    result = session.query(models.Quota).\
1506
1505
                     filter_by(project_id=project_id).\
1507
 
                     filter_by(deleted=can_read_deleted(context)).\
 
1506
                     filter_by(resource=resource).\
 
1507
                     filter_by(deleted=False).\
1508
1508
                     first()
1509
1509
    if not result:
1510
1510
        raise exception.ProjectQuotaNotFound(project_id=project_id)
1511
 
 
1512
 
    return result
1513
 
 
1514
 
 
1515
 
@require_admin_context
1516
 
def quota_create(context, values):
 
1511
    return result
 
1512
 
 
1513
 
 
1514
@require_admin_context
 
1515
def quota_get_all_by_project(context, project_id):
 
1516
    session = get_session()
 
1517
    result = {'project_id': project_id}
 
1518
    rows = session.query(models.Quota).\
 
1519
                   filter_by(project_id=project_id).\
 
1520
                   filter_by(deleted=False).\
 
1521
                   all()
 
1522
    for row in rows:
 
1523
        result[row.resource] = row.hard_limit
 
1524
    return result
 
1525
 
 
1526
 
 
1527
@require_admin_context
 
1528
def quota_create(context, project_id, resource, limit):
1517
1529
    quota_ref = models.Quota()
1518
 
    quota_ref.update(values)
 
1530
    quota_ref.project_id = project_id
 
1531
    quota_ref.resource = resource
 
1532
    quota_ref.hard_limit = limit
1519
1533
    quota_ref.save()
1520
1534
    return quota_ref
1521
1535
 
1522
1536
 
1523
1537
@require_admin_context
1524
 
def quota_update(context, project_id, values):
 
1538
def quota_update(context, project_id, resource, limit):
1525
1539
    session = get_session()
1526
1540
    with session.begin():
1527
 
        quota_ref = quota_get(context, project_id, session=session)
1528
 
        quota_ref.update(values)
 
1541
        quota_ref = quota_get(context, project_id, resource, session=session)
 
1542
        quota_ref.hard_limit = limit
1529
1543
        quota_ref.save(session=session)
1530
1544
 
1531
1545
 
1532
1546
@require_admin_context
1533
 
def quota_destroy(context, project_id):
 
1547
def quota_destroy(context, project_id, resource):
1534
1548
    session = get_session()
1535
1549
    with session.begin():
1536
 
        quota_ref = quota_get(context, project_id, session=session)
 
1550
        quota_ref = quota_get(context, project_id, resource, session=session)
1537
1551
        quota_ref.delete(session=session)
1538
1552
 
1539
1553
 
 
1554
@require_admin_context
 
1555
def quota_destroy_all_by_project(context, project_id):
 
1556
    session = get_session()
 
1557
    with session.begin():
 
1558
        quotas = session.query(models.Quota).\
 
1559
                         filter_by(project_id=project_id).\
 
1560
                         filter_by(deleted=False).\
 
1561
                         all()
 
1562
        for quota_ref in quotas:
 
1563
            quota_ref.delete(session=session)
 
1564
 
 
1565
 
1540
1566
###################
1541
1567
 
1542
1568