Michał Wójcik
11/28/2025, 11:03 AM2025-11-28 08:48:12.202Z fga-api fail: Sea.Fga.Api.Services.SeedDataGenerationService[0]
2025-11-28 08:48:12.202Z fga-api Failed during test data generation
2025-11-28 08:48:12.202Z fga-api HTTP Response:
2025-11-28 08:48:12.202Z fga-api
2025-11-28 08:48:12.202Z fga-api {
2025-11-28 08:48:12.202Z fga-api "id": "8d98906253db42908260fb8696cb9781",
2025-11-28 08:48:12.202Z fga-api "title": "You have exceeded the rate limit",
2025-11-28 08:48:12.202Z fga-api "support_link": "<https://permit-io.slack.com/ssb/redirect>",
2025-11-28 08:48:12.202Z fga-api "error_code": "RATE_LIMITED",
2025-11-28 08:48:12.202Z fga-api "message": "We are sorry for the inconvenience, You have exceeded the rate limit for this resource.
Please try again later.
If the issue keeps happening, contact our support on Slack for further guidance.",
2025-11-28 08:48:12.202Z fga-api "additional_info": null
2025-11-28 08:48:12.202Z fga-api }
2025-11-28 08:48:12.202Z fga-api
2025-11-28 08:48:12.202Z fga-api PermitSDK.OpenAPI.Models.PermitApiException: The HTTP status code of the response was not expected (429).
2025-11-28 08:48:12.202Z fga-api
2025-11-28 08:48:12.202Z fga-api Status: 429
2025-11-28 08:48:12.202Z fga-api Response:
2025-11-28 08:48:12.202Z fga-api {
2025-11-28 08:48:12.202Z fga-api "id": "8d98906253db42908260fb8696cb9781",
2025-11-28 08:48:12.202Z fga-api "title": "You have exceeded the rate limit",
2025-11-28 08:48:12.202Z fga-api "support_link": "<https://permit-io.slack.com/ssb/redirect>",
2025-11-28 08:48:12.202Z fga-api "error_code": "RATE_LIMITED",
2025-11-28 08:48:12.202Z fga-api "message": "We are sorry for the inconvenience, You have exceeded the rate limit for this resource.
Please try again later.
If the issue keeps happening, contact our support on Slack for further guidance.",
2025-11-28 08:48:12.202Z fga-api "additional_info": null
2025-11-28 08:48:12.202Z fga-api }
2025-11-28 08:48:12.202Z fga-api
2025-11-28 08:48:12.202Z fga-api at PermitSDK.OpenAPI.PermitClient.Create_relationship_tupleAsync(
String proj_id,
String env_id,
RelationshipTupleCreate body,
CancellationToken cancellationToken)
2025-11-28 08:48:12.202Z fga-api at PermitSDK.Api.CreateRelationshipTuple(RelationshipTupleCreate relationshipTuple)
2025-11-28 08:48:12.202Z fga-api at Sea.Fga.Permit.Services.PdpService.<>c__DisplayClass20_0.<<AddRelationship>b__0>d.MoveNext()
in /app/src/BE/Sea.Fga.Permit/Services/PdpService.cs:line 402
Pdp logs:
2025-11-28 09:21:50.791Z pdp 2025-11-28T09:21:50.790972+0000 | opal_client.data.fetcher |ERROR | Timeout while fetching url: <https://opal-relay.api.permit.io/v2/pdp/callback?retry=0>
2025-11-28 09:21:50.791Z pdp Traceback (most recent call last):
2025-11-28 09:21:50.791Z pdp File "/usr/local/lib/python3.10/asyncio/locks.py", line 214, in wait
2025-11-28 09:21:50.791Z pdp await fut
2025-11-28 09:21:50.791Z pdp asyncio.exceptions.CancelledError
2025-11-28 09:21:50.791Z pdp
2025-11-28 09:21:50.791Z pdp During handling of the above exception, another exception occurred:
2025-11-28 09:21:50.791Z pdp
2025-11-28 09:21:50.791Z pdp Traceback (most recent call last):
2025-11-28 09:21:50.791Z pdp File "/usr/local/lib/python3.10/asyncio/tasks.py", line 456, in wait_for
2025-11-28 09:21:50.791Z pdp return fut.result()
2025-11-28 09:21:50.791Z pdp asyncio.exceptions.CancelledError
2025-11-28 09:21:50.791Z pdp
2025-11-28 09:21:50.791Z pdp The above exception was the direct cause of the following exception:
2025-11-28 09:21:50.791Z pdp
2025-11-28 09:21:50.791Z pdp Traceback (most recent call last):
2025-11-28 09:21:50.791Z pdp File "/usr/local/lib/python3.10/site-packages/opal_client/data/fetcher.py", line 75, in handle_url
2025-11-28 09:21:50.791Z pdp response = await self._engine.handle_url(url, config=config)
2025-11-28 09:21:50.791Z pdp File "/usr/local/lib/python3.10/site-packages/opal_common/fetcher/engine/fetching_engine.py", line 116, in handle_url
2025-11-28 09:21:50.791Z pdp await asyncio.wait_for(wait_event.wait(), timeout)
2025-11-28 09:21:50.791Z pdp File "/usr/local/lib/python3.10/asyncio/tasks.py", line 458, in wait_for
2025-11-28 09:21:50.791Z pdp raise exceptions.TimeoutError() from exc
2025-11-28 09:21:50.791Z pdp asyncio.exceptions.TimeoutError
2025-11-28 09:21:50.791Z pdp 2025-11-28T09:21:50.791548+0000 | opal_client.callbacks.reporter |ERROR | Failed to send report to <https://opal-relay.api.permit.io/v2/pdp/callback?retry=0>, info=TimeoutError()
1. What are the exact rate limits for the Pro plan and for the Enterprise plan?
2. Are the rate limits applied per endpoint, or are they global (e.g., shared across all API calls or per IP address)?
3. Is there an overload or a bulk-insert option for relationship tuples? We already use all available bulk operations in the API (batch size 1000), but relationship can't find bulk for relationship.
4. Is it possible to temporarily increase the rate limit for our project/environment?
Our mock data generation is fully synchronous (no concurrency), yet we still hit rate limits, making performance testing impossible at the moment.Or Weis
11/28/2025, 11:25 AMOr Weis
11/28/2025, 11:26 AMMichał Wójcik
11/28/2025, 12:20 PMMichał Wójcik
12/08/2025, 1:29 PMconst STAGES = [
{ target: 50, duration: '1m' },
{ target: 100, duration: '1m' },
{ target: 150, duration: '1m' },
{ target: 200, duration: '1m' },
{ target: 250, duration: '1m' } ];
export const options = {
discardResponseBodies: true,
scenarios: {
constant_load:
{ executor: 'ramping-arrival-rate',
startRate: 50,
timeUnit: '1s',
preAllocatedVUs: 100,
maxVUs: 3000,
stages: STAGES, } },
thresholds: Object.assign({}, THRESHOLDS, TAG_THRESHOLDS), summaryTrendStats: ['min', 'avg', 'med', 'max','p(50)','p(75)', 'p(90)', 'p(95)', 'p(99)']
When performing a load test for the bulk endpoint in k6s with the following settings (100 checks in a single request), memory consumption peaks at 18 GB(first grafana screenshot), metrics from 2 attempts on above test settings.. During the test, it restarts several times.
Therefore, the results are disappointing (second screenshot).
Before restart I'm having logs inside pdp like that:
2025-12-08 12:43:45.431info2025-12-08T12:43:45.431008+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.419info2025-12-08T12:43:45.418782+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.404info2025-12-08T12:43:45.403821+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.402error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.392error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.391info2025-12-08T12:43:45.390236+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.390info2025-12-08T12:43:45.389390+0000 | opal_client.engine.logger | INFO | Sent response. POST /v1/data/permit/bulk -> 500
2025-12-08 12:43:45.379info2025-12-08T12:43:45.379622+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.378error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.371info2025-12-08T12:43:45.370995+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.365error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.362info2025-12-08T12:43:45.362281+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.361error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.353info2025-12-08T12:43:45.352767+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.346error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.344info2025-12-08T12:43:45.344273+0000 | opal_client.engine.logger | INFO | Sent response. POST /v1/data/permit/bulk -> 500
2025-12-08 12:43:45.344error2025-12-08T12:43:45.343908+0000 | opal_client.engine.logger |ERROR | Log event masking failed: eval_cancel_error: context canceled. {"plugin": "decision_logs", "time": "2025-12-08T12:43:38Z"}
2025-12-08 12:43:45.336info2025-12-08T12:43:45.335303+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.329error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.321info2025-12-08T12:43:45.320948+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.321error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.320error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.317info2025-12-08T12:43:45.316112+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.311error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.300info2025-12-08T12:43:45.299852+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.299error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.291info2025-12-08T12:43:45.291294+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.276info2025-12-08T12:43:45.274419+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.276error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.254info2025-12-08T12:43:45.254273+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.247error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.236error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.235error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.232info2025-12-08T12:43:45.231673+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.211info2025-12-08T12:43:45.210955+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.199info2025-12-08T12:43:45.199029+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.195error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.177error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.174error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.173error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.168error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.167info2025-12-08T12:43:45.167181+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.156error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.146info2025-12-08T12:43:45.145708+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.145error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.137error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.135error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.134error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.117info2025-12-08T12:43:45.117324+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/bulk
2025-12-08 12:43:45.103error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
2025-12-08 12:43:45.100info[2025-12-08T12:43:45Z INFO pdp_server::api::health::handlers] Health check failed: opa: OPA health check timed out after 3 seconds
2025-12-08 12:43:45.097error[2025-12-08T12:43:45Z ERROR pdp_server::api::authz::allowed_bulk] Failed to send request to OPA: Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)Michał Wójcik
12/08/2025, 1:29 PMOr Weis
12/08/2025, 1:48 PMOmer Zuarets
12/08/2025, 6:59 PMMichał Wójcik
12/09/2025, 5:01 PM[2025-12-08T15:23:44Z ERROR pdp_server::api::authz::allowed_bulk]
Failed to send request to OPA: Failed to send request to OPA:
error sending request for url (<http://localhost:8181/v1/data/permit/bulk>)
At this stage, we’re not sure whether the issue is caused by:
• our configuration,
• our Kubernetes infrastructure setup, or
• inherent limits in the Bulk Check functionality that we’re simply hitting and cannot bypass.
Given this, we need more concrete guidance from your engineering team. Specifically:
1. Does the PDP cache have any eviction/TTL mechanism, or can it grow without limit with unique fact patterns?
2. Is there a recommended configuration to limit cache size or disable caching for performance tests?
My current cache setting:
- name: PDP_CACHE_STORE
value: "in-memory"
- name: PDP_CACHE_TTL
value: "300"
- name: PDP_CACHE_MEMORY_CAPACITY
value: "256"
PDP_CACHE_STORE :"none" decrease idle pdp memory state to 900 MB, but under load still fallingOr Weis
12/09/2025, 5:59 PMGene I.
12/10/2025, 11:45 AMMichał Wójcik
12/10/2025, 12:57 PMAlon Boshi
12/10/2025, 1:04 PMThomas
12/10/2025, 3:25 PMThomas
12/10/2025, 3:27 PMPDP_CACHE_STORE:in-memory or PDP_CACHE_STORE:redis (you'll have to point to a redis for it to work) is enabled. Also, it would probably be beneficial for PDP_DECISION_LOG_DEBUG_INFO:false.
Also, @Michał Wójcik what is the size of what you are running the PDP on?Michał Wójcik
12/10/2025, 5:11 PMenvironmentVariablesPDP:
- name: PDP_API_KEY
value: ""
- name: PDP_DEBUG
value: "False"
- name: PDP_OPA_CLIENT_QUERY_TIMEOUT
value: "30"
- name: PDP_CACHE_STORE
value: "in-memory"
- name: PDP_CACHE_TTL
value: "300"
- name: PDP_CACHE_MEMORY_CAPACITY
value: "256"
I will try to add now PDP_DECISION_LOG_DEBUG_INFO = false.
Resource setup for pdp process:
replica count: 3
pdpResourceLimitsCPU: "1250m"
pdpResourceLimitsMemory: "7Gi"
pdpResourceRequestsCPU: "500m"
pdpResourceRequestsMemory: "2Gi"
I scheduled meeting, see you tomorrow .Or Weis
12/10/2025, 5:19 PMMichał Wójcik
12/10/2025, 5:23 PMOr Weis
12/10/2025, 5:36 PMMichał Wójcik
12/10/2025, 6:21 PM### Bulk Check
POST {{url}}api/pdp/bulk-check
Authorization: Bearer {{auth.response.body.access_token}}
Content-Type: application/json
{
"Checks": [
{
"user": "<mailto:user5@company-20251126115414-1.com|user5@company-20251126115414-1.com>",
"action": "reply",
"resource": "market_order:order-20251126115414-0011"
},
{
"user": "<mailto:f3d81b93-506f-4cd1-a9f2-20b8496b7c12@company3.com|f3d81b93-506f-4cd1-a9f2-20b8496b7c12@company3.com>",
"action": "edit",
"resource": "negotiation:negotiation-order-20251128142333-0341-003"
}
]
}Or Weis
12/10/2025, 6:38 PMOr Weis
12/10/2025, 6:40 PMShyamalan Chemmery
12/10/2025, 7:06 PMOr Weis
12/10/2025, 7:36 PMShyamalan Chemmery
12/10/2025, 7:46 PMOr Weis
12/10/2025, 8:20 PMThomas
12/10/2025, 9:06 PMMichał Wójcik
12/15/2025, 8:58 PM/user-permissions endpoint and noticed the following behavior.
When calling POST /user-permissions and:
• filtering only by resource_types (2 types),
• where the total number of resource instances assigned to the user exceeds ~100,
the request consistently returns 500, and the PDP logs:
[ERROR pdp_server::api::authz::user_permissions]
Failed to send request to OPA: error sending request for url (<http://localhost:8181/v1/data/permit/user_permissions>)
However:
• narrowing resource_types to a single type works,
• passing explicit resource instances works and is fast.
So functionally everything behaves as expected — the failure appears only when the evaluation needs to expand a larger internal result set.
At this point, we’re not trying to push extreme workloads. We’re trying to understand what is considered supported and recommended usage.
Main question:
Are there any documented recommendations or known limitations regarding:
/user-permissions
result-set size per user
filtering byIf the expectation is thatvs explicit resource identifiers?resource_types
/user-permissions should be used only with narrow filters, that’s perfectly fine — we just need to design around it and set realistic performance expectations.
Thanks again for your time and support.permit support automation2
12/15/2025, 8:58 PMThomas
12/15/2025, 9:30 PM/user-permissions without any additional filtering? I am guessing that you are running into OPA timeout issues, which in turn points to memory constraints on the PDP. The number of concurrent /user-permissions is lower than /allowed. I'll also get @Dan to weigh in 🙂.Thomas
12/15/2025, 9:31 PMShyamalan Chemmery
12/15/2025, 10:02 PMpermit support automation2
12/15/2025, 10:02 PMMichał Wójcik
12/15/2025, 10:21 PM2025-12-15T22:06:17.219471+0000 | opal_client.engine.logger | INFO | Sent response. POST /v1/data/permit/user_permissions -> 200
[2025-12-15T22:06:17Z INFO pdp_server::opa_client::user_permissions] permit.user_permissions("<mailto:6e400f86-95bd-4062-b918-dc63b49b0fb5@company2.com|6e400f86-95bd-4062-b918-dc63b49b0fb5@company2.com>", tenants=Some(["default"]), resources=None, resource_types=Some(["market_order"])) -> 1262 permissions
but when I asked about resource_type=negotiation (there should be more permissions than 1262) it is failing with ( I increased a timeout for PDP_OPA_CLIENT_QUERY_TIMEOUT)
2025-12-15T22:15:17.395871+0000 | opal_client.engine.logger | INFO | Received request. POST /v1/data/permit/user_permissions
2025-12-15T22:15:17.796363+0000 | uvicorn.protocols.http.httptools_impl | INFO | 127.0.0.1:49856 - "GET /healthy HTTP/1.1" 200
2025-12-15T22:16:57.121001+0000 | opal_client.engine.logger | INFO | Sent response. POST /v1/data/permit/user_permissions -> 500
2025-12-15T22:16:58.619562+0000 | uvicorn.protocols.http.httptools_impl | INFO | 127.0.0.1:39686 - "GET /healthy HTTP/1.1" 200
2025-12-15T22:17:01.165040+0000 | opal_client.engine.logger | INFO | Logs uploaded successfully. {"plugin": "decision_logs", "time": "2025-12-15T22:17:01Z"}
Both of requests are for user "<mailto:6e400f86-95bd-4062-b918-dc63b49b0fb5@company2.com|6e400f86-95bd-4062-b918-dc63b49b0fb5@company2.com>"Alon Boshi
12/16/2025, 8:31 AMMichał Wójcik
12/16/2025, 11:50 AMcompany → market_order → negotiation.
When calling(without resource instances specify only resource type) /user-permissions:
• for market_order only, the endpoint returns data correctly,
• for negotiation, the request fails.
Our assumption is that, in the negotiation case, the result set is much larger, because access is inherited through multiple group-based relationships.
To validate this, we ran an additional test:
• we passed ~2000 explicit resource_instances directly to /user-permissions
• these resources were assigned directly to the user (not via groups)
In this scenario, the endpoint works without any issues and returns results.
This suggests that the problem is not the absolute number of resources, but rather the explosion caused by group-based and hierarchical expansion during evaluation.Dan
12/16/2025, 12:04 PMmarket_orders then performing query/s on explicit negotiation instances. This approach would allow you to split the work across your PDP cluster, and potentially increase your shared cache hit-rate.
Let me know how it goes! 🌟