Revision b2d0830b snf-cyclades-app/synnefo/db/models.py

b/snf-cyclades-app/synnefo/db/models.py
517 517
                              default=None)
518 518
    drained = models.BooleanField("Drained", default=False, null=False)
519 519
    floating_ip_pool = models.BooleanField('Floating IP Pool', null=False,
520
                                          default=False)
520
                                           default=False)
521 521
    pool = models.OneToOneField('IPPoolTable', related_name='network',
522
                default=lambda: IPPoolTable.objects.create(available_map='',
523
                                                           reserved_map='',
524
                                                           size=0),
525
                null=True)
522
                                default=lambda: IPPoolTable.objects.create(
523
                                                            available_map='',
524
                                                            reserved_map='',
525
                                                            size=0),
526
                                null=True)
526 527
    serial = models.ForeignKey(QuotaHolderSerial, related_name='network',
527 528
                               null=True)
528 529

  
......
551 552
    def create_backend_network(self, backend=None):
552 553
        """Create corresponding BackendNetwork entries."""
553 554

  
554
        backends = [backend] if backend\
555
                             else Backend.objects.filter(offline=False)
555
        backends = [backend] if backend else\
556
            Backend.objects.filter(offline=False)
556 557
        for backend in backends:
557 558
            backend_exists =\
558 559
                BackendNetwork.objects.filter(backend=backend, network=self)\
......
560 561
            if not backend_exists:
561 562
                BackendNetwork.objects.create(backend=backend, network=self)
562 563

  
563
    def get_pool(self):
564
    def get_pool(self, with_lock=True):
564 565
        if not self.pool_id:
565 566
            self.pool = IPPoolTable.objects.create(available_map='',
566 567
                                                   reserved_map='',
567 568
                                                   size=0)
568 569
            self.save()
569
        return IPPoolTable.objects.select_for_update().get(id=self.pool_id)\
570
                                                      .pool
570
        objects = IPPoolTable.objects
571
        if with_lock:
572
            objects = objects.select_for_update()
573
        return objects.get(id=self.pool_id).pool
571 574

  
572 575
    def reserve_address(self, address):
573 576
        pool = self.get_pool()

Also available in: Unified diff