[FIX] membership: prevent excessive field recomputations
Membership tree may include many partners and having excessive field
recomputation (i.e. more than ~n computations) could seriously slows
system down. The excessive recomputations comes from unneeded fields
in api.depends, which looks like a copy paste from compute method for
state field.
STEPS:
* add logs printing
* create a tree of associated members
* create membership invoice
* validate the invoice
Below is printing for the following tree
```
45
\---- 51
\
\--- 50
\
\-- 46 -- 49
\ -- 48
\-- 47
```
BEFORE
Create invoice:
_compute_membership_state: res.partner(45,)
_compute_membership_cancel: res.partner(45,)
_compute_membership_stop: res.partner(45,)
_compute_membership_state: res.partner(46, 50, 51)
_compute_membership_cancel: res.partner(45, 46, 50, 51)
_compute_membership_stop: res.partner(45, 46, 50, 51)
_compute_membership_state: res.partner(47, 48, 49)
_compute_membership_cancel: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_stop: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_cancel: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_start: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_stop: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_state: res.partner(45,)
_compute_membership_cancel: res.partner(45,)
_compute_membership_stop: res.partner(45,)
_compute_membership_state: res.partner(46, 50, 51)
_compute_membership_cancel: res.partner(45, 46, 50, 51)
_compute_membership_stop: res.partner(45, 46, 50, 51)
_compute_membership_state: res.partner(47, 48, 49)
_compute_membership_cancel: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_stop: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_cancel: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_start: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_stop: res.partner(45, 46, 50, 51, 47, 48, 49)
Validate invoice:
_compute_membership_state: res.partner(45,)
_compute_membership_state: res.partner(46, 50, 51)
_compute_membership_cancel: res.partner(46, 50, 51, 45)
_compute_membership_stop: res.partner(46, 50, 51, 45)
_compute_membership_state: res.partner(47, 48, 49)
_compute_membership_cancel: res.partner(46, 50, 51, 45, 47, 48, 49)
_compute_membership_stop: res.partner(46, 50, 51, 45, 47, 48, 49)
_compute_membership_cancel: res.partner(46, 50, 51, 45, 47, 48, 49)
_compute_membership_start: res.partner(46, 50, 51, 45, 47, 48, 49)
_compute_membership_stop: res.partner(46, 50, 51, 45, 47, 48, 49)
_compute_membership_state: res.partner(45,)
_compute_membership_cancel: res.partner(45,)
_compute_membership_stop: res.partner(45,)
_compute_membership_state: res.partner(46, 50, 51)
_compute_membership_cancel: res.partner(45, 46, 50, 51)
_compute_membership_stop: res.partner(45, 46, 50, 51)
_compute_membership_state: res.partner(47, 48, 49)
_compute_membership_cancel: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_stop: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_cancel: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_start: res.partner(45, 46, 50, 51, 47, 48, 49)
_compute_membership_stop: res.partner(45, 46, 50, 51, 47, 48, 49)
AFTER
Create invoice:
_compute_membership_cancel: res.partner(45,)
_compute_membership_stop: res.partner(45,)
_compute_membership_start: res.partner(45,)
_compute_membership_state: res.partner(45,)
_compute_membership_state: res.partner(46, 50, 51)
_compute_membership_state: res.partner(47, 48, 49)
_compute_membership_state: res.partner(45,)
_compute_membership_state: res.partner(46, 50, 51)
_compute_membership_state: res.partner(47, 48, 49)
Validate invoice:
_compute_membership_state: res.partner(45,)
_compute_membership_state: res.partner(46, 50, 51)
_compute_membership_state: res.partner(47, 48, 49)
_compute_membership_state: res.partner(45,)
_compute_membership_state: res.partner(46, 50, 51)
_compute_membership_state: res.partner(47, 48, 49)
---
opw-2390394
closes odoo/odoo#65980
Signed-off-by:
Ivan Yelizariev // IEL <yelizariev@users.noreply.github.com>
Please register or sign in to comment