From 37ca60dd0fe845bc7c4fd9ce881a30b94bbc8e7f Mon Sep 17 00:00:00 2001 From: Edgar Sipki Date: Sun, 25 Oct 2026 18:06:48 +0300 Subject: [PATCH] =?UTF-8?q?api-service:=20v1.2.0=20=E2=86=92=20v1.2.1=20up?= =?UTF-8?q?grade=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Markerless cache copies are fetched once, relative plugins_dir resolves at start, the plugin limit holds under concurrency, plain addresses go to the system resolver, and the rate limit says how long to wait. Quickstart pins the v1.2.1 image. Co-Authored-By: Claude Opus 5.5 --- content/docs/api-service/operator-cli.mdx | 2 +- content/docs/api-service/operator-cli.ru.mdx | 2 +- content/docs/api-service/quickstart.mdx | 2 +- content/docs/api-service/quickstart.ru.mdx | 2 +- content/docs/api-service/upgrading.mdx | 40 +++++++++++++++++++- content/docs/api-service/upgrading.ru.mdx | 40 +++++++++++++++++++- 6 files changed, 82 insertions(+), 6 deletions(-) diff --git a/content/docs/api-service/operator-cli.mdx b/content/docs/api-service/operator-cli.mdx index e3fefac..665315f 100644 --- a/content/docs/api-service/operator-cli.mdx +++ b/content/docs/api-service/operator-cli.mdx @@ -110,7 +110,7 @@ service accepts the token, and which versions the service already has. | `--region` | — | Region. | | `--prefix` | — | Key prefix. | | `--force-path-style` | false | Path-style addressing (MinIO, RustFS). | -| `--addr` | `localhost:23410` | Service gRPC address. | +| `--addr` | `localhost:23410` | Service gRPC address; `host:port` is resolved by the system resolver, `dns:///…` by grpc-go's. | | `--token` | `$EASYP_TOKEN` | Write token. | | `--tls-ca` | system store | CA that signed the server certificate. | | `--tls-cert`, `--tls-key` | — | Client certificate and key, for mutual TLS. | diff --git a/content/docs/api-service/operator-cli.ru.mdx b/content/docs/api-service/operator-cli.ru.mdx index f2a802c..60772cc 100644 --- a/content/docs/api-service/operator-cli.ru.mdx +++ b/content/docs/api-service/operator-cli.ru.mdx @@ -110,7 +110,7 @@ Docker. Каждая версия из `plugin.yaml` собирается с `-- | `--region` | — | Регион. | | `--prefix` | — | Префикс ключей. | | `--force-path-style` | false | Path-style адресация (MinIO, RustFS). | -| `--addr` | `localhost:23410` | gRPC-адрес сервиса. | +| `--addr` | `localhost:23410` | gRPC-адрес сервиса; `host:port` разрешает системный резолвер, `dns:///…` — резолвер grpc-go. | | `--token` | `$EASYP_TOKEN` | Токен записи. | | `--tls-ca` | системное хранилище | CA, подписавший сертификат сервера. | | `--tls-cert`, `--tls-key` | — | Клиентский сертификат и ключ для взаимного TLS. | diff --git a/content/docs/api-service/quickstart.mdx b/content/docs/api-service/quickstart.mdx index 20a4b3b..128513b 100644 --- a/content/docs/api-service/quickstart.mdx +++ b/content/docs/api-service/quickstart.mdx @@ -63,7 +63,7 @@ services: retries: 30 service: - image: ghcr.io/easyp-tech/service:v1.2.0 + image: ghcr.io/easyp-tech/service:v1.2.1 command: ["service", "start"] depends_on: postgres: diff --git a/content/docs/api-service/quickstart.ru.mdx b/content/docs/api-service/quickstart.ru.mdx index 1a512a8..3a5d2e9 100644 --- a/content/docs/api-service/quickstart.ru.mdx +++ b/content/docs/api-service/quickstart.ru.mdx @@ -63,7 +63,7 @@ services: retries: 30 service: - image: ghcr.io/easyp-tech/service:v1.2.0 + image: ghcr.io/easyp-tech/service:v1.2.1 command: ["service", "start"] depends_on: postgres: diff --git a/content/docs/api-service/upgrading.mdx b/content/docs/api-service/upgrading.mdx index ca58edc..d8266da 100644 --- a/content/docs/api-service/upgrading.mdx +++ b/content/docs/api-service/upgrading.mdx @@ -34,6 +34,43 @@ A rename is handled without breaking anyone: the old configuration key keeps working for one release while warning, naming both spellings and the line to change, and only then stops. +## v1.2.0 → v1.2.1 + +### Unpacked copies without a checksum marker are fetched once + +A version directory with no `.sha256` marker beside it — unpacked before +v1.2.0, or bind-mounted from a `plugins build` tree — used to count as current. +It is now fetched again the first time it is used, once per replica, and gets a +marker. Plan for the disk: each replica downloads every version it serves once +more, within `registry.cache_max_bytes`. Versions registered without a checksum +(`plugins publish --plugins-dir`) are unaffected. + +### A relative `plugins_dir` is resolved at start + +`plugins_dir: ./plugins` now resolves to an absolute path before commands are +derived. Versions registered with a relative command under v1.2.0 still fail +with `no such file or directory`; repair them with +`easyp-svc plugins publish --plugins-dir --force`. + +### The plugin limit holds under concurrent registrations + +The licence plugin limit is now counted and enforced in the same transaction as +the insert. Before, parallel `CreatePlugin` calls could pass the check together +and land more versions than the limit allows; such extra rows stay, but no new +version is accepted until the count is below the limit. + +### Clients resolve plain addresses with the system resolver + +The SDK, `easyp-svc` and `easyp generate` dial a plain `host:port` through +`passthrough:///`, so the operating system resolves the name when connecting. A +host without a port gets 443, as before. Prefix `dns:///` to use grpc-go's own +resolver. + +### The rate limit says how long to wait + +A refused request reads `rate limit exceeded for , retry after s`. The +`x-ratelimit-reset` trailer still carries the unix time the bucket refills by. + ## v1.1.x → v1.2.0 ### `plugins publish` replaces `push`, `register` and `pack` @@ -74,7 +111,8 @@ republish, not to retry. A client matching on reasons gains one; one matching on `plugins publish --force` replaces a version's config with the new checksum, and each replica refetches its unpacked copy on next use — it keeps a `.sha256` marker beside it. Copies unpacked by an older service have no marker and count -as current; republish a version once to bring its copies in line. +as current; republish a version once to bring its copies in line. From v1.2.1 a +copy without a marker is fetched once on its own. ## v1.0.0 → v1.0.2 diff --git a/content/docs/api-service/upgrading.ru.mdx b/content/docs/api-service/upgrading.ru.mdx index 99721c5..0971d6a 100644 --- a/content/docs/api-service/upgrading.ru.mdx +++ b/content/docs/api-service/upgrading.ru.mdx @@ -34,6 +34,44 @@ description: "Заметки по обновлению API Service от рели работать один релиз, предупреждая и называя оба написания и строку, которую надо поправить, и только после этого перестаёт. +## v1.2.0 → v1.2.1 + +### Копии без маркера контрольной суммы перекачиваются один раз + +Каталог версии без маркера `.sha256` — распакованный до v1.2.0 или +смонтированный из дерева `plugins build` — раньше считался актуальным. Теперь +при первом использовании он скачивается заново, по разу на реплику, и получает +маркер. Учтите диск: каждая реплика ещё раз скачает каждую версию, которую +обслуживает, в пределах `registry.cache_max_bytes`. Версии, зарегистрированные +без контрольной суммы (`plugins publish --plugins-dir`), это не затрагивает. + +### Относительный `plugins_dir` разрешается при старте + +`plugins_dir: ./plugins` теперь приводится к абсолютному пути до вывода команды. +Версии, зарегистрированные в v1.2.0 с относительной командой, по-прежнему падают +с `no such file or directory`; почините их через +`easyp-svc plugins publish --plugins-dir --force`. + +### Лимит плагинов выдерживает параллельные регистрации + +Лимит плагинов лицензии теперь считается и проверяется в одной транзакции со +вставкой. Раньше параллельные `CreatePlugin` могли пройти проверку вместе и +записать больше версий, чем позволяет лимит; такие лишние строки остаются, но +новые версии не принимаются, пока их число не опустится ниже лимита. + +### Клиенты разрешают обычные адреса системным резолвером + +SDK, `easyp-svc` и `easyp generate` подключаются к обычному `host:port` через +`passthrough:///`, и имя разрешает операционная система в момент соединения. +Хост без порта, как и раньше, получает 443. Чтобы использовать собственный +резолвер grpc-go, укажите префикс `dns:///`. + +### Rate limit говорит, сколько ждать + +Отклонённый запрос получает `rate limit exceeded for , retry after s`. +Трейлер `x-ratelimit-reset` по-прежнему содержит unix-время, к которому корзина +наполнится. + ## v1.1.x → v1.2.0 ### `plugins publish` вместо `push`, `register` и `pack` @@ -75,7 +113,7 @@ description: "Заметки по обновлению API Service от рели и каждая реплика перекачивает свою распакованную копию при следующем использовании — рядом с ней лежит маркер `.sha256`. Копии, распакованные старым сервисом, маркера не имеют и считаются актуальными; перепубликуйте версию один -раз, чтобы выровнять их. +раз, чтобы выровнять их. С v1.2.1 копия без маркера перекачивается один раз сама. ## v1.0.0 → v1.0.2