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

Eugene Berman commented on CAMEL-20841:
---------------------------------------

Is there any workaround for this? We are running into this very often, not only 
with Springboot, but Quarkus too,

> DataSonnet expressions are removed under memory load
> ----------------------------------------------------
>
>                 Key: CAMEL-20841
>                 URL: https://issues.apache.org/jira/browse/CAMEL-20841
>             Project: Camel
>          Issue Type: Bug
>    Affects Versions: 4.0-M1, 4.6.0
>            Reporter: Rob Ratcliffe
>            Priority: Major
>             Fix For: 4.4.3, 4.7.0
>
>
> *Scenario:*
> When there is a Camel/Spring Boot API project where there are a large amount 
> of DataSonnet (DS) scripts
> And when the application is under memory load or runs for a long time, some 
> or ALL DS scripts are removed from the mapperCache
> And once they are removed from the mapperCache, then a call to an API 
> endpoint that contains that DS script will be unable to be evaluated and the 
> API call will continue to fail because the expression isn't re-added to the 
> mapperCache
> *What I expect to happen instead:*
> The API is able to recover and re-add missing DS scripts.
> *The error returned is:*
> {code:java}
> Caused by: java.lang.IllegalStateException: Datasonnet expression not 
> initialized at 
> org.apache.camel.language.datasonnet.DatasonnetExpression.lambda$doEvaluate$0(DatasonnetExpression.java:138)
>  at java.base/java.util.Optional.orElseThrow(Optional.java:403) at 
> org.apache.camel.language.datasonnet.DatasonnetExpression.doEvaluate(DatasonnetExpression.java:138)
>  at 
> org.apache.camel.language.datasonnet.DatasonnetExpression.evaluate(DatasonnetExpression.java:92){code}
>  
> From what I can tell, Camel 3.7 didn't have this issue. It looks like the DS 
> scripts have been stored in an LRUSoftCache for a long time and is designed 
> this way so that expressions are removed to prevent OutOfMemoryError. 
> However, in Camel 4 the mapper became pre-initialized and .lookup() was used 
> instead of .computeIfMiss().
> Camel 3.7: 
> [https://github.com/apache/camel/blob/camel-3.7.x/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetExpression.java#L143]
> Camel 4: 
> [https://github.com/apache/camel/blob/main/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/DatasonnetExpression.java#L137]
> *Project that replicates this error:* 
> [https://github.com/rlratcliffe/replicate-ds-error] 



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

Reply via email to