Skip to content
Snippets Groups Projects
  1. Jun 21, 2019
  2. Jun 20, 2019
  3. Jun 19, 2019
    • Xavier Morel's avatar
      [FIX] core: work around ir_logging deadlock · c5c955db
      Xavier Morel authored
      
      DROP CONSTRAINT (even with IF EXISTS is specified) acquires an ACCESS
      EXCLUSIVE lock on the table, preventing e.g. inserts in an other
      transaction, so ir_logging would systematically deadlock if configured
      to the same database and a warning would be triggered during install
      or update (if that ran ir.logging's init).
      
      1. hand-roll the "IF EXISTS" bit, to avoid taking an ACCESS EXCLUSIVE
      lock on the table if the problematic constraint does not exist and
      thus doesn't need to be dropped (which by now should be the vast
      majority of cases).
      
      Replacing DROP CONSTRAINT with DISABLE TRIGGER does not fix the
      issue as *that* acquires SHARE ROW EXCLUSIVE. While that's less
      constraitning than ACCESS EXCLUSIVE, it still conflicts with an
      insert's ROW_EXCLUSIVE.
      
      2. add a timeout to the logging INSERT anyway, the deadlock is still
      an issue if we're updating a database which does have the
      problematic constraint, and we want to preclude the possible
      eventual introduction of new deadlocks in the future.
      
      closes odoo/odoo#34243
      
      Signed-off-by: default avatarXavier Morel (xmo) <xmo@odoo.com>
      c5c955db
    • Басхүү's avatar
      [CLA] Add CLA for Baskhuu · f7f58b10
      Басхүү authored
      f7f58b10
  4. Jun 20, 2019
  5. Jun 19, 2019
  6. Jun 18, 2019
  7. Jun 17, 2019
  8. Jun 14, 2019
    • Nicolas Martinelli's avatar
      [FIX] event_sale: no company on SO · 0c302e30
      Nicolas Martinelli authored
      
      Do not crash at currency conversion when no company is set.
      
      closes odoo/odoo#34155
      
      Signed-off-by: default avatarNicolas Martinelli (nim) <nim@odoo.com>
      0c302e30
    • Laurent Smet's avatar
      [FIX] account: Fix matching rules with empty communication · 94dc2fe5
      Laurent Smet authored
      
      The way to find a matching about structured communication is done by:
      1 - making a filter to keep only numerical values.
      2 - splitting the result into array.
      3 - finding an intersect between the sets.
      
      For example,
      "Payment about +++123/456789+++ and +++987/654321+++" is matching "123456789 blablabla"?
      1 - "123456789 987654321" is matching "123456789" ?
      2 - ["123456789", "987654321"] is matching ["123456789"]
      3 - YES because "123456789" intersects both sets.
      
      This commit is about the check is always TRUE when both sets are empty.
      In this specific case, the result must be FALSE.
      
      -opw: 2008299
      
      closes odoo/odoo#34115
      
      Signed-off-by: default avatarNicolas Martinelli (nim) <nim@odoo.com>
      94dc2fe5
  9. Jun 13, 2019
  10. Jun 12, 2019
    • Christophe Simonis's avatar
      efc64edf
    • Julien Castiaux's avatar
      [FIX] mail: send same attachment multiple times · 306abd01
      Julien Castiaux authored
      
      In the Discuss app, using Chrome or IE11, try to send the same
      attachment to different channels. The first attachment is correctly
      detected but not the next ones.
      
      The problem is due to a browser inconsistency, on firefox selecting the
      same file in an `<input type=file>` triggers the `change` event. This is
      not the case on Chrome/IE, selecting the same file doesn't triggers an
      `onchange`.
      
      opw-2006647
      
      closes odoo/odoo#34076
      
      Signed-off-by: default avatarAlexandre Kühn (aku) <aku@odoo.com>
      306abd01
    • Denis Ledoux's avatar
      [FIX] http: Unreachable server when db_maxconn reached during registry loading · 242e485b
      Denis Ledoux authored
      On `WebRequest` `__exit__`, when an exception occured,
      (in `self.registry.signal_changes` or `self.registry.reset_changes`)
      cursor were left unclosed as `self._cr.close` was not called
      in such cases.
      
      Having exceptions in the above mentioned method do not happen
      often, but when it does it left unclosed and unusable cursors
      in the connection pool, and in the extreme case explained below,
      it left the connection pool with only unclosed and unusable cursors.
      The entire server was then unusable as it no longer had working cursors.
      
      Case:
      - Start a multi-thread server with db_maxconn set to 5
      - Ensure you do not send any request to the server,
      not even with a left open tab on `http://localhost:8069` in your browser
      - Send 6 parallel HTTP requests to `/web/login`
      thanks to an external thread python script
      (See below, at the end of this long commit message)
      
      According to your registry state (if you have a lot of modules installed or not),
      and the native Python Garbage Collecting state,
      you might end with
      - either warnings telling some unclosed cursor were garbage collected,
      and therefore closed (by a kind of luck thanks to the Python garbage collecting),
      - either, a server completely blocked not accepting any other request
      (you can try for instance `curl http://localhost:8069`
      and you end up with a `500 Internal Server Error`
      
      This observed issue looks to appear only in 11.0. Not 10.0 or 12.0.
      This is because only 11.0 clear the cache during registry loading:
      `https://github.com/odoo/odoo/blob/f1706c848d41c47646dabca771996e9b9f788241/odoo/modules/loading.py#L236`
      This cache clearing doesn't happen in 10.0 nor 12.0
      (in 12.0, thanks to e181f592)
      
      When sending the 6 parallel requests,
      it uses instantly all the 5 available cursors of the connection pool to handle these requests,
      and when each request exits, in `__exit__`, it calls `self.registry.signal_changes()`
      which tries to open a new cursor because of
      - `self.cache_invalidated` which is True, for all the 6 requests, thanks to the call to `clear_caches`
      explained above during the registry loading and the fact all requests have been treated in parallel,
      - `with closing(self.cursor()) as cr:`, `self.cursor()` attempting to use a new cursor
      (the `closing(...)` does not have any incidence on this issue, despite it could look like guilty)
      
      The attempt to use a new cursor fails, as there is no more available (`db_maxconn` is reached),
      raising a `PoolError('The Connection Pool Is Full')` exception.
      
      In the request `__exit__` method, because of this exception raised when calling `signal_changes`,
      `self._cr.close` is never reached, and the parallel request therefore left only unclosed
      cursors in the connection pool,
      therefore leaving the server in a state where it only has unusable cursors
      and therefore can't do anything more.
      
      This might look like really bad luck to land in such a state,
      but we observed multiple actual case on Odoo.sh,
      the one referenced in this commit (opw-2008340) was because of an Outlook client
      which launched 18 parallel requests to fetch the email images,
      and the server wasn't spawned, therefore neither was the registry.
      The server registry was therefore just loaded when it received the 18 parallel requests,
      and it therefore triggered this extreme use case.
      The server was left unusable for several minutes, until a forced restart.
      
      For reference, here is the script that has been used to trigger the 6 parallel requests:
      ```
      import requests
      import threading
      
      threads = []
      for i in range(6):
      threads.append(threading.Thread(target=lambda: requests.get('http://localhost:8069/web/login'))
      
      )
      for thread in threads:
      thread.start()
      
      ```
      
      opw-2008340
      
      closes odoo/odoo#34071
      
      Signed-off-by: default avatarDenis Ledoux <beledouxdenis@users.noreply.github.com>
      242e485b
    • Christophe Simonis's avatar
    • Christophe Simonis's avatar
    • Christophe Simonis's avatar
      348f3d8b
    • Nicolas Martinelli's avatar
      [FIX] stock: incorrect field · b5dddce5
      Nicolas Martinelli authored
      
      The field is now `quantity`. This wasn't spotted before because the
      method is not used anywhere.
      
      opw-2008491
      
      closes odoo/odoo#34067
      
      Signed-off-by: default avatarNicolas Martinelli (nim) <nim@odoo.com>
      b5dddce5
    • Xavier-Do's avatar
      [FIX] test_new_api: move demo_data.xml in demo category · 271f1ec6
      Xavier-Do authored
      
      Installing test_new_api without demo will fail since demo_user
      does not exists. This is a problem if we want to test migration
      with all modules installed. This simple fix solve the problem.
      
      closes odoo/odoo#34065
      
      Signed-off-by: default avatarChristophe Simonis <chs@odoo.com>
      271f1ec6
    • Nans Lefebvre's avatar
      [FIX] stock: put stored related field product_code in compute_sudo · f1706c84
      Nans Lefebvre authored
      
      Have a multi-company setup, with shared products.
      Write the default code of a product; an access error is raised on inventory.line
      
      On inventory.line, the field product_code is defined as related to
      'product_id.default_code', and stored.
      So when writing on the default_code of a product, we get the inventory lines of
      other companies. For obvious reasons their access is protected by the record
      rule "Inventory Line multi-company", therefore the access error is raised.
      
      To avoid that situation stored related fields should be in compute_sudo.
      
      Note that similarly this is necessary for product_name.
      There is one more subtlety: directly writing on the product.product does trigger
      the access error, but writing it on the product.template does not.
      
      opw 2007167
      
      closes odoo/odoo#34019
      
      Signed-off-by: default avatarNans Lefebvre (len) <len@odoo.com>
      f1706c84
  11. Jun 11, 2019
Loading