Skip to content
Snippets Groups Projects
Commit 17a38a0e authored by Ivan Yelizariev's avatar Ivan Yelizariev
Browse files

[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: default avatarIvan Yelizariev // IEL <yelizariev@users.noreply.github.com>
parent e3eb5bf4
Branches
Tags
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment