Skip to content

v0.20.1

Choose a tag to compare

@heliocosta-dev heliocosta-dev released this 21 Oct 02:47
· 180 commits to main since this release
3e54d4f

MillionSend v0.20.1 stops the API's memory from growing with each MCP request and turns Postgres JIT off in the compose files. In the console, changing a team's warm-up trust now asks to confirm first. No database migrations. (#175, #174)

API and MCP

  • The API's memory no longer grows with each MCP request. Every MCP request rebuilt some tool inputs from the REST API's OpenAPI schemas, and the OpenAPI library (zod-to-openapi) keeps each schema built that way for the life of the process, so an API that served MCP grew until it restarted. Those inputs are now built once and reused. The tools and their inputs are unchanged. (#175)

Postgres

  • JIT is off in both compose files. deploy/docker-compose.yml and docker-compose.yml now start Postgres with -c jit=off. On MillionSend's short queries, JIT compiling costs more CPU than it saves, and each connection that compiles once keeps LLVM loaded for as long as it lives. The Helm chart's README lists jit = off with the other Postgres settings. (#175)

Console

  • Changing a team's warm-up trust asks to confirm first. On a team's Trust & safety page, the Domain warm-up card's Trust, Remove trust, Trust team and Remove team trust each open a dialog instead of acting on one click. Trust says how many emails the daily limit is holding, that they start going out right away, and that new mail sends at full volume from then on. Remove trust says new mail goes back under the daily limit for new domains, or that the team's own trust still covers the domain; Remove team trust says how many domains stay trusted on their own. A change that fails now shows an error and keeps the dialog open; it used to fail silently. (#174)

Upgrading a self-hosted instance

  • No database migrations and no new environment variables. docker compose pull and docker compose up -d bring the memory fix. On Kubernetes, upgrade with --version 0.20.1.
  • Turn Postgres JIT off. docker compose pull updates the images, not the compose file. Pick one:
    • Download the standalone compose file again: curl -O https://raw.githubusercontent.com/MillionSend/millionsend/main/deploy/docker-compose.yml. If you edited your copy, add "-c", "jit=off" to the end of the postgres service's command instead. The next docker compose up -d recreates the postgres container, which restarts the database briefly.
    • Or, with no restart: docker compose exec postgres psql -U millionsend -c "ALTER SYSTEM SET jit = off" -c "SELECT pg_reload_conf()". Connections that already compiled something keep that memory until they close, so restarting MillionSend's containers frees it sooner.
    • From a clone, git pull brings the same change to the root docker-compose.yml. With the Helm chart or any Postgres you run yourself, set jit = off in its configuration.
  • Rolling back to v0.20.0 needs no extra step. JIT off works with any version.
  • Rolling back further, to v0.19.0: remove ?sslmode=require from DATABASE_URL first if you added it for v0.20.0. v0.19.0's queue verifies the server certificate under require and does not start against a certificate it cannot verify.