1. 22 Oct, 2021 2 commits
    • Vincent Pelletier's avatar
      ERP5Type/patches/WSGIPublisher: Ensure transaction abort. · abf2ac13
      Vincent Pelletier authored
      Transaction must be aborted even if the state is getting so bad that the
      exception is being re-raised. Leaving an open-ended transaction is never
      acceptable.
      abf2ac13
    • Vincent Pelletier's avatar
      CMFActivity.Activity.SQLBase: Reduce the number of deadlocks · 18b5e4ed
      Vincent Pelletier authored
      MariaDB seems to be using inconsistent lock acquisition order when
      executing the activity reservation queries. As a consequence, it produces
      internal deadlocks, which it detects. Upon detection, it kills one of the
      involved query, which causes message reservation to fail, despite the
      presence of executable activities.
      To avoid depending on MariaDB internal lock acquisition order, acquire an
      explicit table-scoped lock before running the activity reservation queries.
      
      On an otherwise-idle 31 processing node cluster with the following
      activities spawned, designed to stress activity reservation queries
      (many ultra-short activities being executed one at a time):
        active_getTitle = context.getPortalObject().portal_catalog.activate(
          activity='SQLQueue',
          priority=5,
          tag='foo',
        ).getTitle
        for _ in xrange(40000):
          active_getTitle()
      the results are:
      - a 26% shorter activity execution time: from 206s with the original code
        to 152s
      - a 100% reduction in reported deadlocks from 300 with the original code
        to 0
      
      There is room for further improvements at a later time:
      - tweaking the amount of time spent waiting for this new lock to be
        available, set for now at 1s.
      - possibly bypassing this lock altogether when there are too few processing
        nodes simultaneously enabled, or even in an adaptive reaction to
        deadlock errors actually happening.
      - cover more write accesses to these tables with the same lock
      
      From a production environment, it appears that the getReservedMessageList
      method alone is involved in 95% of these deadlocks, so for now this change
      only targets this method.
      18b5e4ed
  2. 18 Oct, 2021 2 commits
  3. 15 Oct, 2021 3 commits
  4. 14 Oct, 2021 1 commit
    • Julien Muchembled's avatar
      fixup! New portal type: External Method · fd4880ce
      Julien Muchembled authored
      This fixes commit ea53f23e:
      
        ERROR Application Couldn't install ERP5Type
        Traceback (most recent call last):
          File "OFS/Application.py", line 691, in install_product
            initmethod(context)
          File "Products/ERP5Type/__init__.py", line 141, in initialize
            initializeProductDocumentRegistry()
          File "Products/ERP5Type/InitGenerator.py", line 62, in initializeProductDocumentRegistry
            importLocalDocument(class_id, class_path=class_path)
          File "Products/ERP5Type/Utils.py", line 994, in importLocalDocument
            module = __import__(module_path, {}, {}, (module_path,))
          File "Products/ERP5/Document/ExternalMethod.py", line 38, in <module>
            class ExternalMethod(XMLObject, ZopeExternalMethod, ExpressionMixin):
        TypeError: Error when calling the metaclass bases
            metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
      
      What happened is that the API of ExpressionMixin changed in commit
      df85ef46 and the backward compatibility
      code (product/ERP5/mixin/expression.py) was broken.
      
      Also fix 'filter' tab on in the catalog.
      See also commit 6ad56d89.
      fd4880ce
  5. 12 Oct, 2021 2 commits
  6. 11 Oct, 2021 2 commits
  7. 07 Oct, 2021 1 commit
    • Jérome Perrin's avatar
      pdm: expose quantity unit in default supply · 7e54bbcb
      Jérome Perrin authored
      Quantity unit was not defined in default supply property sheet, so the
      fields were created local properties, because the accessors were not
      existant. This change make the accessors for quantity unit on default
      supply lines generated.
      
      The implementation details is that it replaces priced_quantity, which was
      defined twice
      7e54bbcb
  8. 05 Oct, 2021 1 commit
  9. 04 Oct, 2021 2 commits
  10. 01 Oct, 2021 2 commits
  11. 30 Sep, 2021 3 commits
  12. 27 Sep, 2021 2 commits
  13. 23 Sep, 2021 6 commits
  14. 22 Sep, 2021 1 commit
  15. 21 Sep, 2021 8 commits
  16. 20 Sep, 2021 2 commits