cache: add grpc read-only response caching

This commit is contained in:
a.tolmachev
2026-05-04 09:34:34 +00:00
parent b2c5e28cba
commit a61064ba3a
13 changed files with 306 additions and 91 deletions
+4 -3
View File
@@ -139,10 +139,11 @@
- `REST`
- `security_level = standard`
- `execution_config.response_cache` допускается только для:
- `REST`
- `GET`
- или `GraphQL query`
- `REST GET`
- `GraphQL query`
- `gRPC unary`, если `GrpcTarget.read_only = true`
- операций без `auth_profile_ref`
- операций без `streaming`
- `execution_config.response_cache` не означает глобальный shared cache на все вызовы системы:
- response cache должен быть изолирован минимум по `workspace + agent + operation + operation version + request fingerprint`
- попытка создать, обновить или импортировать операцию с неподдерживаемым `protocol` или `security_level` должна завершаться `validation_error` еще на стороне `admin-api`, а не только скрываться в UI.
+8 -4
View File
@@ -463,6 +463,7 @@
- `package`
- `service`
- `method`
- `read_only`
- `descriptor_ref`
- `descriptor_set_b64`
@@ -534,14 +535,17 @@
- policy задается явно на операции;
- response cache допускается только для read-only вызовов;
- в открытой редакции первый поддержанный путь:
- `REST`
- `GET`
- без `auth_profile_ref`
- текущие поддержанные пути:
- `REST GET`
- `GraphQL query`
- `gRPC unary` только при `GrpcTarget.read_only = true`
- все варианты только без `auth_profile_ref`
- операции со `streaming` не допускают response cache даже при наличии policy;
- cache key должен строиться не глобально, а минимум в контексте:
- `workspace`
- `agent`
- `operation`
- `operation version`
- `request fingerprint`
Это позволяет избежать неявного кэширования ответов, зависящих от upstream credentials.
+2 -1
View File
@@ -201,7 +201,8 @@
- response cache уже покрывает:
- `REST GET` как Community baseline;
- `GraphQL query` как первый коммерчески ценный read-only protocol path.
- дальнейшее расширение response cache идет только по явно обоснованным read-only сценариям, начиная с `gRPC unary`, а не как общий cache для всех протоколов подряд.
- `gRPC unary` для явно read-only операций через `GrpcTarget.read_only`.
- дальнейшее расширение response cache идет только по отдельно обоснованным read-only сценариям, а не как общий cache для всех протоколов подряд.
## 14. Этап 11. Live staging and demo readiness
+2
View File
@@ -240,7 +240,9 @@ Crank должен корректно работать, если MCP client де
- если операция явно включает `execution_config.response_cache`, текущий поддержанный runtime path ограничен:
- `REST GET`
- `GraphQL query`
- `gRPC unary` только при `GrpcTarget.read_only = true`
- без `auth_profile_ref`
- без `streaming`
- cache keys изолируются минимум по `workspace + agent + operation + operation version + request fingerprint`
- streaming operations публикуются как bounded tools или tool families;
- reload published tools без пересборки сервиса;
+2 -1
View File
@@ -187,9 +187,10 @@ Demo/deployment:
- `REST GET`;
- `GraphQL query`.
- `gRPC unary` только при `GrpcTarget.read_only = true`.
Это не означает автоматическое кэширование всех protocol families. Следующим кандидатом на расширение
может быть только явно read-only `gRPC unary`.
может быть только следующий отдельно обоснованный protocol path, а не "cache everything".
Эти контуры не должны смешивать ключи друг с другом.