Revision 5d996aea snf-quotaholder-app/quotaholder_django/quotaholder_app/callpoint.py
b/snf-quotaholder-app/quotaholder_django/quotaholder_app/callpoint.py | ||
---|---|---|
45 | 45 |
from django.db.models import Q |
46 | 46 |
from django.db import transaction, IntegrityError |
47 | 47 |
from .models import (Holder, Entity, Policy, Holding, |
48 |
Commission, Provision, ProvisionLog, now) |
|
48 |
Commission, Provision, ProvisionLog, now, |
|
49 |
db_get_entity, db_get_holding, db_get_policy, |
|
50 |
db_get_commission, db_filter_provision) |
|
49 | 51 |
|
50 | 52 |
|
51 | 53 |
class QuotaholderDjangoDBCallpoint(Callpoint): |
... | ... | |
107 | 109 |
|
108 | 110 |
for entity, key, newkey in set_entity_key: |
109 | 111 |
try: |
110 |
e = Entity.objects.get(entity=entity, key=key)
|
|
112 |
e = db_get_entity(entity=entity, key=key, for_update=True)
|
|
111 | 113 |
except Entity.DoesNotExist: |
112 | 114 |
append(entity) |
113 | 115 |
continue |
... | ... | |
163 | 165 |
import_limit, export_limit ) in set_limits: |
164 | 166 |
|
165 | 167 |
try: |
166 |
policy = Policy.objects.get(policy=policy)
|
|
168 |
policy = db_get_policy(policy=policy, for_update=True)
|
|
167 | 169 |
except Policy.DoesNotExist: |
168 | 170 |
Policy.objects.create( policy=policy, |
169 | 171 |
quantity=quantity, |
... | ... | |
200 | 202 |
|
201 | 203 |
def _set_holding(self, entity, resource, policy, flags): |
202 | 204 |
try: |
203 |
h = Holding.objects.get(entity=entity, resource=resource) |
|
205 |
h = db_get_holding(entity=entity, resource=resource, |
|
206 |
for_update=True) |
|
204 | 207 |
h.policy = p |
205 | 208 |
h.flags = flags |
206 | 209 |
h.save() |
... | ... | |
231 | 234 |
continue |
232 | 235 |
|
233 | 236 |
try: |
234 |
h = Holding.objects.get(entity=entity, resource=resource) |
|
237 |
h = db_get_holding(entity=entity, resource=resource, |
|
238 |
for_update=True) |
|
235 | 239 |
h.policy = p |
236 | 240 |
h.flags = flags |
237 | 241 |
h.save() |
... | ... | |
245 | 249 |
imported, exported, returned, released, |
246 | 250 |
flags): |
247 | 251 |
try: |
248 |
h = Holding.objects.get(entity=entity, resource=resource) |
|
252 |
h = db_get_holding(entity=entity, resource=resource, |
|
253 |
for_update=True) |
|
249 | 254 |
except Holding.DoesNotExist: |
250 | 255 |
h = Holding(entity=entity, resource=resource) |
251 | 256 |
|
... | ... | |
305 | 310 |
continue |
306 | 311 |
|
307 | 312 |
try: |
308 |
h = Holding.objects.get(entity=entity, resource=resource) |
|
313 |
h = db_get_holding(entity=entity, resource=resource, |
|
314 |
for_update=True) |
|
309 | 315 |
h.imported=imported |
310 | 316 |
h.importing=imported |
311 | 317 |
h.exported=exported |
... | ... | |
341 | 347 |
|
342 | 348 |
def _increase_resource(self, entity, resource, amount): |
343 | 349 |
try: |
344 |
h = Holding.objects.get(entity=entity, resource=resource) |
|
350 |
h = db_get_holding(entity=entity, resource=resource, |
|
351 |
for_update=True) |
|
345 | 352 |
except Holding.DoesNotExist: |
346 | 353 |
h = Holding(entity=entity, resource=resource) |
347 | 354 |
p = Policy.objects.create(policy=self._new_policy_name(), |
... | ... | |
356 | 363 |
|
357 | 364 |
for idx, (entity, resource, key) in enumerate(release_holding): |
358 | 365 |
try: |
359 |
h = Holding.objects.get(entity=entity, resource=resource) |
|
366 |
h = db_get_holding(entity=entity, resource=resource, |
|
367 |
for_update=True) |
|
360 | 368 |
except Holding.DoesNotExist: |
361 | 369 |
append(idx) |
362 | 370 |
continue |
... | ... | |
462 | 470 |
) |
463 | 471 |
|
464 | 472 |
try: |
465 |
h = Holding.objects.get(entity=entity, resource=resource) |
|
473 |
h = db_get_holding(entity=entity, resource=resource, |
|
474 |
for_update=True) |
|
466 | 475 |
p = h.policy |
467 | 476 |
h.policy = newp |
468 | 477 |
h.flags = flags |
... | ... | |
528 | 537 |
release = 1 |
529 | 538 |
|
530 | 539 |
try: |
531 |
h = Holding.objects.get(entity=entity, resource=resource) |
|
540 |
h = db_get_holding(entity=entity, resource=resource, |
|
541 |
for_update=True) |
|
532 | 542 |
except Holding.DoesNotExist: |
533 | 543 |
m = ("There is not enough quantity " |
534 | 544 |
"to allocate from in %s.%s" % (entity, resource)) |
... | ... | |
551 | 561 |
raise NoQuantityError(m) |
552 | 562 |
|
553 | 563 |
try: |
554 |
th = Holding.objects.get(entity=target, resource=resource) |
|
564 |
th = db_get_holding(entity=target, resource=resource, |
|
565 |
for_update=True) |
|
555 | 566 |
except Holding.DoesNotExist: |
556 | 567 |
m = ("There is not enough capacity " |
557 | 568 |
"to allocate into in %s.%s" % (target, resource)) |
... | ... | |
630 | 641 |
|
631 | 642 |
for serial in serials: |
632 | 643 |
try: |
633 |
c = Commission.objects.get(clientkey=clientkey, serial=serial) |
|
644 |
c = db_get_commission(clientkey=clientkey, serial=serial, |
|
645 |
for_update=True) |
|
634 | 646 |
except Commission.DoesNotExist: |
635 | 647 |
return |
636 | 648 |
|
637 | 649 |
t = c.entity |
638 | 650 |
|
639 |
provisions = Provision.objects.filter(serial=serial)
|
|
651 |
provisions = db_filter_provision(serial=serial, for_update=True)
|
|
640 | 652 |
for pv in provisions: |
641 | 653 |
try: |
642 |
h = Holding.objects.get(entity=pv.entity.entity, |
|
643 |
resource=pv.resource ) |
|
644 |
th = Holding.objects.get(entity=t, resource=pv.resource) |
|
654 |
h = db_get_holding(entity=pv.entity.entity, |
|
655 |
resource=pv.resource, for_update=True) |
|
656 |
th = db_get_holding(entity=t, resource=pv.resource, |
|
657 |
for_update=True) |
|
645 | 658 |
except Holding.DoesNotExist: |
646 | 659 |
m = "Corrupted provision" |
647 | 660 |
raise CorruptedError(m) |
... | ... | |
673 | 686 |
|
674 | 687 |
for serial in serials: |
675 | 688 |
try: |
676 |
c = Commission.objects.get(clientkey=clientkey, serial=serial) |
|
689 |
c = db_get_commission(clientkey=clientkey, serial=serial, |
|
690 |
for_update=True) |
|
677 | 691 |
except Commission.DoesNotExist: |
678 | 692 |
return |
679 | 693 |
|
680 | 694 |
t = c.entity |
681 | 695 |
|
682 |
provisions = Provision.objects.filter(serial=serial)
|
|
696 |
provisions = db_filter_provision(serial=serial, for_update=True)
|
|
683 | 697 |
for pv in provisions: |
684 | 698 |
try: |
685 |
h = Holding.objects.get(entity=pv.entity.entity, |
|
686 |
resource=pv.resource) |
|
687 |
th = Holding.objects.get(entity=t, resource=pv.resource) |
|
699 |
h = db_get_holding(entity=pv.entity.entity, |
|
700 |
resource=pv.resource, for_update=True) |
|
701 |
th = db_get_holding(entity=t, resource=pv.resource, |
|
702 |
for_update=True) |
|
688 | 703 |
except Holding.DoesNotExist: |
689 | 704 |
m = "Corrupted provision" |
690 | 705 |
raise CorruptedError(m) |
... | ... | |
740 | 755 |
append = rejected.append |
741 | 756 |
for entity, key in release_entity: |
742 | 757 |
try: |
743 |
e = Entity.objects.get(entity=entity, key=key)
|
|
758 |
e = db_get_entity(entity=entity, key=key, for_update=True)
|
|
744 | 759 |
except Entity.DoesNotExist: |
745 | 760 |
append(entity) |
746 | 761 |
continue |
Also available in: Unified diff