• v0.5.8 7021c50156

    pict-rs 0.5.8
    All checks were successful
    / check (aarch64-unknown-linux-musl) (push) Successful in 2m54s
    / check (armv7-unknown-linux-musleabihf) (push) Successful in 3m0s
    / check (x86_64-unknown-linux-musl) (push) Successful in 2m24s
    / tests (push) Successful in 1m52s
    / publish-docker (push) Successful in 16s
    / publish-crate (push) Successful in 2m57s
    / clippy (push) Successful in 2m5s
    / build (map[artifact:linux-arm32v7 platform:linux/arm/v7 target:armv7-unknown-linux-musleabihf]) (push) Successful in 6m10s
    / build (map[artifact:linux-amd64 platform:linux/amd64 target:x86_64-unknown-linux-musl]) (push) Successful in 5m52s
    / build (map[artifact:linux-arm64v8 platform:linux/arm64 target:aarch64-unknown-linux-musl]) (push) Successful in 5m4s
    / publish-forgejo (push) Successful in 13s
    Stable

    asonix released this 2024-03-11 04:10:06 +00:00 | 48 commits to main since this release

    pict-rs 0.5.8

    Overview

    pict-rs 0.5.8 improves reliability of deletions by allowing background tasks to be retried.
    Otherwise changes are fairly minor.

    Changes

    Upgrade Notes

    There is a small repo format migration between 0.5.7 and 0.5.8. For sled it's simply opening a new
    tree, for postgre it involves adding a new column to the job_queue table. These changes will
    automatically apply when launching pict-rs 0.5.8. Upgrading should be as simple as pulling a new
    version of pict-rs.

    Configuration Notes

    Check your configurations to make sure you haven't enabled the tokio-console integration unless
    you're using it. In my local testing, I've found the console subscriber to use a significant amount
    of CPU. While it is very useful for debugging, it shouldn't be used generally in production.

    The relevant configuration values are PICTRS__TRACING__CONSOLE__ADDRESS with environment variables
    or [tracing.console] address = "" in the toml.

    Packaging Notes

    While I have never recommended packaging pict-rs with non-default crate features enabled, and the
    binaries and containers I provide enable only the default features, there are two new crate features
    in this release that I would advise against enabling in downstream packaging environments.

    The new features are poll-timer-warnings and random-errors. These are each described below if
    you want to learn about them, but as a general recommendation, do not enable non-default features
    when packaging pict-rs (yes, i'm talking to you grawlinson from the AUR).

    The other optional feature, io-uring, is considered less stable. It's possible that folks will
    find it works alright, and maybe Arch can enable it since they can assume recent kernels, but I
    don't personally test much with io-uring. It exists mostly as a historical curiosity. Please
    consider carefully before enabling io-uring for pict-rs.

    Descriptions

    Improved Task Reliability

    pict-rs 0.5.8 adds the ability for tasks to be retried. pict-rs generally spawns background tasks to
    handle things like Image deletion or other cleanup operations. Until now, if a background task
    failed, the only indication would be a warning that appeared in the logs. These warnings are
    generally descriptive and help track the error source, but end users aren't notified, and the repo
    or store state can become inconsistant.

    With the newly added ability to retry tasks, operations should be completed more reliably. By
    default, a failed task will be retried after a 2 minute wait, and if it continues to fail, it will
    be retried up to five times. If a task fails after 5 retries, an additional warning will be output
    to the log.

    In order to test this, I've added a new optional crate feature called random-errors, which will
    inject errors into various pict-rs operations randomly. This feature should never be enabled in
    production scenarios, and two warnings will be printed when launching pict-rs if it was compiled
    with this feature enabled.

    Improved Latency

    pict-rs 0.5.8 implements a couple new techniques to improve system latency.

    1. The postgres connection pooling library has been swapped from deadpool to bb8. Not only does this
      (slightly) improve connection pool access times, but it also means pict-rs is no longer pinned
      to an outdated version of deadpool.
    2. Processes like ffmpeg, imagemagick, and exiftool are now spawned from background threads,
      rather than from within the webserver threads. This is notable, since the act of spawning a
      process ends up using a good amount of time, and prevents other requests from being handled
      until the spawning has completed.
    3. pict-rs now has the ability to monitor polling times for futures. By default, any task pict-rs
      spawns itself will be monitored to report polling times, and a trait has been added to enable
      easily tracking more polling times in the future. These polling times will appear in the
      prometheus metrics, as well as in logs at DEBUG or TRACE visibility. There's an optional crate
      feature called poll-timer-warnings that will upgrade some of these logs to WARN visibility.
    Downloads