[ 
https://issues.apache.org/jira/browse/UNOMI-1002?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18125742#comment-18125742
 ] 

Serge Huber commented on UNOMI-1002:
------------------------------------

Pull request: https://github.com/apache/unomi/pull/915

{{getOrCreateTenant}} now caches the tenant after the first load/create, takes 
a lock only on a cache miss (so concurrent first requests still create exactly 
once), and invalidates on save/delete/API-key updates. Compatibility mode 
public requests no longer serialize on every hit.

> In compatibility mode, all public requests wait on each other
> -------------------------------------------------------------
>
>                 Key: UNOMI-1002
>                 URL: https://issues.apache.org/jira/browse/UNOMI-1002
>             Project: Apache Unomi
>          Issue Type: Bug
>    Affects Versions: unomi-4.0.0
>            Reporter: Serge Huber
>            Assignee: Serge Huber
>            Priority: Critical
>             Fix For: unomi-4.0.0
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> h3. Summary
> In single-tenant compatibility mode, every public request, such as 
> context.json or the event collector, checks that the default tenant exists. 
> This check runs one request at a time across the whole server, and it reads 
> the tenant from the database each time. Under load, public requests queue 
> behind each other.
> This came with UNOMI-980, which made the mode create its tenant on its own. 
> Jonathan Sinovassin-Naïk has offered to propose a fix.
> The goal of this ticket is that public requests in compatibility mode do not 
> wait on each other.
> h3. Ways to explore
> * Create the default tenant once, when the mode starts or on the first 
> request, then read it from a cache.
> * Only take the lock when the tenant does not exist yet.
> * The tenant id stays fixed by the mode and is never taken from the request.
> * Refresh the cached tenant when it is updated or deleted.
> h3. How to test
> Manual check: run many parallel context.json requests in compatibility mode. 
> They should not be slower than in normal mode.
> Automated tests to add:
> * A unit test that sends many public requests in compatibility mode and 
> checks that the tenant is read from the database once, not once per request.
> * A concurrency test where many first requests arrive at the same time on an 
> empty system: exactly one tenant is created, and every request succeeds.
> * A test that an update or deletion of the tenant is seen by the next request.
> * A test that no request header or parameter can change which tenant is 
> created or used.
> * The existing compatibility mode tests for UNOMI-980 still pass.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to