Skip to content
Snippets Groups Projects
  1. Mar 11, 2024
    • Georges Racinet's avatar
      rust-filepatterns: export glob_to_re function · 406b413e3cf2
      Georges Racinet authored
      Making this function public should not risk freezing the internal API,
      and it can be useful for all downstream code that needs to perform
      glob matching against byte strings, such as RHGitaly where it will
      be useful to match on branches and tags.
      406b413e3cf2
  2. Mar 05, 2024
  3. Feb 29, 2024
  4. Mar 04, 2024
  5. Feb 23, 2024
  6. Jan 17, 2024
    • Georges Racinet's avatar
      chainsaw-update: log actual locks breaking · fe68a2dc0bf2
      Georges Racinet authored
      Previously, the command would simply state that it was about
      to break locks, not if there was actually some to break.
      
      This version is race-free. It would be also possible to display
      the content of the lock before hand (not race-free but informative
      in almost all cases).
      fe68a2dc0bf2
    • Georges Racinet's avatar
      vfs: have tryunlink tell what it did · 187c5769a629
      Georges Racinet authored
      It is useful in certain circumstances to know whether vfs.tryunlink()
      actually removed something or not, be it for logging purposes.
      187c5769a629
  7. Nov 26, 2022
    • Georges Racinet's avatar
      chainsaw: new extension for dangerous operations · bc88aa7472de
      Georges Racinet authored
      The first provided command is `chainsaw-update`, whose one and single job is
      to make sure that it will pull, update and purge the target repository,
      no matter what may be in the way (locks, notably), see docstring for rationale.
      bc88aa7472de
  8. Feb 23, 2024
  9. Feb 22, 2024
    • Raphaël Gomès's avatar
      rust-index: remove one collect when converting back · 3099f1c68afd
      Raphaël Gomès authored
      Turns out this is slightly faster. Sending the results back to Python is still
      the most costly (like 75% of the time) of the whole method, but it's about
      as fast as it can be now.
      
      hg perf::phases on mozilla-try-2023-03-22
      before: 0.267114
      after:  0.247101
      3099f1c68afd
    • Raphaël Gomès's avatar
      rust-index: improve phase computation speed · 7c6d0b9dde37
      Raphaël Gomès authored
      While less memory efficient, using an array is *much* faster than using a
      HashMap, especially with the default hasher. It even makes the code simpler,
      so I'm not really sure what I was thinking in the first place, maybe it's more
      obvious now.
      
      This fix a significant performance regression when using the rust version of the
      code. (however, the C code still outperform rust on this operation)
      
      hg perf::phases on mozilla-try-2023-03-22
      - 6.6.3:  0.451239 seconds
      - before: 0.982495 seconds
      - after:  0.265347 seconds
      - C code: 0.183241 second
      7c6d0b9dde37
  10. Feb 23, 2024
    • Pierre-Yves David's avatar
      phases: directly update the phase sets in advanceboundary · 3cee8706f53b
      Pierre-Yves David authored
      This is similar to what we do in retractboundary. There is no need to invalidate
      the cache if we have everything at hand to update it.
      3cee8706f53b
    • Pierre-Yves David's avatar
      phases: large rework of advance boundary · 23950e39281f
      Pierre-Yves David authored
      In a similar spirit as the rework of retractboundary, the new algorithm is doing
      an amount of work in the order of magnitude of the amount of changeset that
      changes phases. (except to find new roots in impacted higher phases if any may
      exists).
      
      This result in a very significant speedup for repository with many old draft
      like mozilla try.
      
      runtime of perf:unbundle for a bundle constaining a single changeset (C code):
      
      before 6.7 phase work: 14.497 seconds
      before this change:     6.311 seconds (-55%)
      with this change:       2.240 seconds (-85%)
      
      Combined with the other patches that fixes the phases computation in the Rust
      index, the rust code with a persistent nodemap get back to quite interresting
      performances with 2.026 seconds for the same operation, about 10% faster than
      the C code.
      23950e39281f
  11. Feb 22, 2024
  12. Feb 21, 2024
    • Pierre-Yves David's avatar
      phases: filter revision that are already in the right phase · 2eb93812d2a5
      Pierre-Yves David authored
      No need to compute new roots if everything is already in order.
      2eb93812d2a5
    • Pierre-Yves David's avatar
      phases: invalidate the phases set less often on retract boundary · ac1c75188440
      Pierre-Yves David authored
      We already have the information to update the phase set, so we do so directly
      instead of invalidating the cache.
      
      This show a sizeable speedup in our `perf::unbundle` benchmark on the
      many-draft mozilla-try repository.
      
      ### data-env-vars.name            = mozilla-try-2023-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.perf-unbundle
        # bin-env-vars.hg.flavor        = no-rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = disabled
      
        # benchmark.variants.revs = last-10
      before: 2.055259 seconds
      after:  1.887064 seconds (-8.18%)
        # benchmark.variants.revs = last-100
      before: 2.409239 seconds
      after:  2.222429 seconds (-7.75%)
        # benchmark.variants.revs = last-1000
      before: 3.945648 seconds
      after:  3.762480 seconds (-4.64%)
      ac1c75188440
    • Pierre-Yves David's avatar
      phases: incrementally update the phase sets when reasonable · e57d4b868a3e
      Pierre-Yves David authored
      When the amount of manual walking is small, we update the phases set manually
      instead of computing them from scratch. This should help small update. The next
      changesets will make this used more often by reducing the amount of full
      invalidation we do on roots upgrade.
      
      The criteria for using an incremental upgrade are arbitrary, however, it "should
      never hurt".
      e57d4b868a3e
  13. Feb 22, 2024
  14. Feb 21, 2024
  15. Feb 22, 2024
  16. Feb 21, 2024
  17. Feb 20, 2024
    • Pierre-Yves David's avatar
      phases: leverage the collected information to record phase update · eababb7b4a82
      Pierre-Yves David authored
      Since the lower level function already gather this information, we can directly
      use it.
      
      This comes with a small change to the test that are actually fixing them. The
      previous version over-reported some phase change that did not exists. In both
      case, we are force revision `1` to be secret and `0` remains draft`, the
      previous code wrongly reported `0` as moving to secret while it properly
      remained draft in the repository.
      eababb7b4a82
  18. Feb 21, 2024
    • Pierre-Yves David's avatar
      phases: large rewrite on retract boundary · 2f39c7aeb549
      Pierre-Yves David authored
      The new code is still pure Python, so we still have room to going significantly
      faster. However its complexity of the complex part is `O(|[min_new_draft, tip]|)` instead of
      `O(|[min_draft, tip]|` which should help tremendously one repository with old
      draft (like mercurial-devel or mozilla-try).
      
      This is especially useful as the most common "retract boundary" operation
      happens when we commit/rewrite new drafts or when we push new draft to a
      non-publishing server. In this case, the smallest new_revs is very close to the
      tip and there is very few work to do.
      
      A few smaller optimisation could be done for these cases and will be introduced in
      later changesets.
      
      We still have iterate over large sets of roots, but this is already a great
      improvement for a very small amount of work. We gather information on the
      affected changeset as we go as we can put it to use in the next changesets.
      This extra data collection might slowdown the `register_new` case a bit, however
      for register_new, it should not really matters. The set of new nodes is either
      small, so the impact is negligible, or the set of new nodes is large, and the
      amount of work to do to had them will dominate the overhead the collecting
      information in `changed_revs`.
      
      As this new code compute the changes on the fly, it unlock other interesting
      improvement to be done in later changeset.
      2f39c7aeb549
Loading