Revision ea1e5d9f snf-astakos-app/astakos/im/models.py

b/snf-astakos-app/astakos/im/models.py
1656 1656

  
1657 1657
    def _get_project_for_update(self):
1658 1658
        try:
1659
            objects = Project.objects.select_for_update()
1660
            project = objects.get(id=self.chain)
1659
            objects = Project.objects
1660
            project = objects.get_for_update(id=self.chain)
1661 1661
            return project
1662 1662
        except Project.DoesNotExist:
1663 1663
            return None
......
2459 2459
    pass
2460 2460

  
2461 2461
def reset_serials(serials):
2462
    sfu = ProjectMembership.objects.select_for_update()
2463
    memberships = list(sfu.filter(pending_serial__in=serials))
2462
    objs = ProjectMembership.objects
2463
    q = objs.filter(pending_serial__in=serials).select_for_update()
2464
    memberships = list(q)
2464 2465

  
2465 2466
    if memberships:
2466 2467
        for membership in memberships:
......
2473 2474
        serials_to_ack = qh_query_serials([])
2474 2475

  
2475 2476
    serials_to_ack = set(serials_to_ack)
2476
    sfu = ProjectMembership.objects.select_for_update()
2477
    memberships = list(sfu.filter(pending_serial__isnull=False))
2477
    objs = ProjectMembership.objects
2478
    q = objs.filter(pending_serial__isnull=False).select_for_update()
2479
    memberships = list(q)
2478 2480

  
2479 2481
    if memberships:
2480 2482
        for membership in memberships:
......
2493 2495
    ACCEPTED = ProjectMembership.ACCEPTED
2494 2496
    LEAVE_REQUESTED = ProjectMembership.LEAVE_REQUESTED
2495 2497
    PROJECT_DEACTIVATED = ProjectMembership.PROJECT_DEACTIVATED
2496
    psfu = Project.objects.select_for_update()
2498
    objs = Project.objects
2497 2499

  
2498
    modified = list(psfu.modified_projects())
2500
    modified = list(objs.modified_projects().select_for_update())
2499 2501
    if sync:
2500 2502
        for project in modified:
2501
            objects = project.projectmembership_set.select_for_update()
2503
            objects = project.projectmembership_set
2502 2504

  
2503
            memberships = objects.actually_accepted()
2505
            memberships = objects.actually_accepted().select_for_update()
2504 2506
            for membership in memberships:
2505 2507
                membership.is_pending = True
2506 2508
                membership.save()
2507 2509

  
2508
    reactivating = list(psfu.reactivating_projects())
2510
    reactivating = list(objs.reactivating_projects().select_for_update())
2509 2511
    if sync:
2510 2512
        for project in reactivating:
2511
            objects = project.projectmembership_set.select_for_update()
2513
            objects = project.projectmembership_set
2512 2514

  
2513
            memberships = objects.filter(state=PROJECT_DEACTIVATED)
2515
            q = objects.filter(state=PROJECT_DEACTIVATED)
2516
            memberships = q.select_for_update()
2514 2517
            for membership in memberships:
2515 2518
                membership.is_pending = True
2516 2519
                if membership.leave_request_date is None:
......
2519 2522
                    membership.state = LEAVE_REQUESTED
2520 2523
                membership.save()
2521 2524

  
2522
    deactivating = list(psfu.deactivating_projects())
2525
    deactivating = list(objs.deactivating_projects().select_for_update())
2523 2526
    if sync:
2524 2527
        for project in deactivating:
2525
            objects = project.projectmembership_set.select_for_update()
2528
            objects = project.projectmembership_set
2526 2529

  
2527 2530
            # Note: we keep a user-level deactivation
2528 2531
            # (e.g. USER_SUSPENDED) intact
2529
            memberships = objects.actually_accepted()
2532
            memberships = objects.actually_accepted().select_for_update()
2530 2533
            for membership in memberships:
2531 2534
                membership.is_pending = True
2532 2535
                membership.state = PROJECT_DEACTIVATED
2533 2536
                membership.save()
2534 2537

  
2538
#    transaction.commit()
2535 2539
    return (modified, reactivating, deactivating)
2536 2540

  
2537 2541
def set_sync_projects(exclude=None):
2538 2542

  
2539 2543
    ACTUALLY_ACCEPTED = ProjectMembership.ACTUALLY_ACCEPTED
2540
    objects = ProjectMembership.objects.select_for_update()
2544
    objects = ProjectMembership.objects
2541 2545

  
2542 2546
    sub_quota, add_quota = [], []
2543 2547

  
2544 2548
    serial = new_serial()
2545 2549

  
2546
    pending = objects.filter(is_pending=True)
2550
    pending = objects.filter(is_pending=True).select_for_update()
2547 2551
    for membership in pending:
2548 2552

  
2549 2553
        if membership.pending_application:
......
2596 2600
def post_sync_projects():
2597 2601
    PROJECT_DEACTIVATED = ProjectMembership.PROJECT_DEACTIVATED
2598 2602
    Q_ACTUALLY_ACCEPTED = ProjectMembership.Q_ACTUALLY_ACCEPTED
2599
    psfu = Project.objects.select_for_update()
2603
    objs = Project.objects
2600 2604

  
2601
    modified = psfu.modified_projects()
2605
    modified = objs.modified_projects().select_for_update()
2602 2606
    for project in modified:
2603
        objects = project.projectmembership_set.select_for_update()
2604

  
2605
        memberships = list(objects.filter(Q_ACTUALLY_ACCEPTED &
2606
                                          Q(is_pending=True)))
2607
        objects = project.projectmembership_set
2608
        q = objects.filter(Q_ACTUALLY_ACCEPTED & Q(is_pending=True))
2609
        memberships = list(q.select_for_update())
2607 2610
        if not memberships:
2608 2611
            project.is_modified = False
2609 2612
            project.save()
2610 2613

  
2611
    reactivating = psfu.reactivating_projects()
2614
    reactivating = objs.reactivating_projects().select_for_update()
2612 2615
    for project in reactivating:
2613
        objects = project.projectmembership_set.select_for_update()
2614
        memberships = list(objects.filter(Q(state=PROJECT_DEACTIVATED) |
2615
                                          Q(is_pending=True)))
2616
        objects = project.projectmembership_set
2617
        q = objects.filter(Q(state=PROJECT_DEACTIVATED) | Q(is_pending=True))
2618
        memberships = list(q.select_for_update())
2616 2619
        if not memberships:
2617 2620
            project.reactivate()
2618 2621
            project.save()
2619 2622

  
2620
    deactivating = psfu.deactivating_projects()
2623
    deactivating = objs.deactivating_projects().select_for_update()
2621 2624
    for project in deactivating:
2622
        objects = project.projectmembership_set.select_for_update()
2623

  
2624
        memberships = list(objects.filter(Q_ACTUALLY_ACCEPTED |
2625
                                          Q(is_pending=True)))
2625
        objects = project.projectmembership_set
2626
        q = objects.filter(Q_ACTUALLY_ACCEPTED | Q(is_pending=True))
2627
        memberships = list(q.select_for_update())
2626 2628
        if not memberships:
2627 2629
            project.deactivate()
2628 2630
            project.save()

Also available in: Unified diff