1. 23 Oct, 2018 1 commit
    • Vincent Pelletier's avatar
      CMFCategory: Do not use __getitem__ to access a subobject. · 97480b84
      Vincent Pelletier authored
      It is extremely slow for some reason on large BTreeFolders inside
      BTreeFolder2's has_key (even on warm caches). Using get instead is
      significantly faster.
      Found by chance, calling getAcquiredCategoryList on a random Person when
      person_module contains of the order of magnitude of a million documents.
      97480b84
  2. 22 Oct, 2018 4 commits
  3. 20 Oct, 2018 2 commits
  4. 19 Oct, 2018 1 commit
    • Jérome Perrin's avatar
      ProcessingNodeTestCase: respect isSubscribed state of activity tool · 70be8872
      Jérome Perrin authored
      This is needed when running livetests in a runUnitTest instance, in the
      following scenario:
       - `runUnitTest --save test_bt:testXXX`
       - `runUnitTest --save --load`
       - run the live test from the browser
      
      because livetest way of processing activities is to unsubscribe at the
      beginning of the test and subscribe at the end to have control of
      activities when running .tic, if ProcessingNodeTestCase also process the
      activities automatically, they interfere and test often fail with errors like:
      
      ```
      File "ERP5Type/tests/ProcessingNodeTestCase.py", line 249, in tic
        raise RuntimeError(error_message)
      RuntimeError: tic is looping forever. These messages are pending: [('/erp5/portal_components/test.erp5.testSupportRequest', 'immediateReindexObject', 1, 0), ('/erp5/support_request_module/2617', 'immediateReindexObject', -1, 0)]
      ```
      
      /reviewed-on nexedi/erp5!779
      70be8872
  5. 17 Oct, 2018 2 commits
    • Jérome Perrin's avatar
      ui_test: simplify assertion · f1a85400
      Jérome Perrin authored
      This step just checks that multi relation field listbox shows a list of
      related document and that clicking on any item of the list leads to the
      related document.
      The order of related documents in the list has always been unspecified,
      but the first one was always 1 until recently.
      Because this test does not really care which one of the two related
      document was clicked, just assert that it's a document from foo_module.
      
      /reviewed-on nexedi/erp5!774
      f1a85400
    • Jérome Perrin's avatar
      Zelenium: do not include (HTML) link in case of expected failure · a636336a
      Jérome Perrin authored
      89115b88 is great, but with "testFunctionalAnonymousSelection" the
      result HTML is more than 40Mo.
      
      /reviewed-on !772
      a636336a
  6. 16 Oct, 2018 8 commits
  7. 15 Oct, 2018 1 commit
    • Vincent Pelletier's avatar
      CMFActivity: Do not use offset for scanning messages to validate. · a42da4de
      Vincent Pelletier authored
      This was inefficient for two reasons:
      - any message we could validate during current iteration means a message we
        did not consider is now in the range we just scanned. And it will not be
        considered until validation node starts over and scan this same range
        again.
      - "LIMIT x,1000" pattern on >1000 messages causes a quick-growing number of
        extra rows scanned by the SQL database just to skip the "x" first rows:
        at 2000 rows present it must scan 1000 + 2000 = 3000 rows for a complete
        loop over all pending activities. At 3k rows it must scan 6k rows.
        At 4k, 10k.
        While this is an overestimation (some rows should be possible to
        validate, so these would be scanned once only), this overhead grows so
        large that this overestimation can become negligible.
      
      Instead, use a range condition consistent with query's "SORT ON", which is
      already efficiently materialised by an index: SQL database just has to
      dive into the existing index to start just above the last message from
      previous iteration, and resume scanning from there, solving both issues
      listed above.
      a42da4de
  8. 12 Oct, 2018 2 commits
    • Vincent Pelletier's avatar
      ERP5Type: Patch AccessControl.owner.Owned.getWrappedOwner . · ea56fe72
      Vincent Pelletier authored
      This method is called on every __getattr__ (guarded_getattr, actually) of
      every restricted python scripts. Which means each "." in the code triggers:
      - traversal to relevant acl_user folder
      - a user lookup
      just to get the same value throughout the execution of a script (as its
      owner does not change during execution).
      Also, in practice we have extremely few possible owners: very few users are
      allowed to edit code in an ERP5 instance, and if such instance is managed
      using the upgrader alarms, they will even further reduce this owner set to
      System Processes only.
      On a real-world web page rendering, this reduces the total number of
      traversal calls from 1500 to 1100, getting rid of the two hottest spots:
      /acl_users and /$site_id/acl_users .
      ea56fe72
    • Tristan Cavelier's avatar
  9. 11 Oct, 2018 19 commits