[ https://issues.apache.org/jira/browse/UNOMI-764?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17713080#comment-17713080 ]
Kevan Jahanshahi commented on UNOMI-764: ---------------------------------------- Here is an other Query of the merge action that is doing faulty scroll: {code:java} java.lang.Exception: Error loading itemType=org.apache.unomi.api.Session query={ "term" : { "profileId" : { "value" : "d41f31a5-7881-459c-81a2-e0f8837fd69c", "boost" : 1.0 } } } sortBy=null at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$24.execute(ElasticSearchPersistenceServiceImpl.java:1757) ~[?:?] at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$24.execute(ElasticSearchPersistenceServiceImpl.java:1650) ~[?:?] at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$InClassLoaderExecute.executeInClassLoader(ElasticSearchPersistenceServiceImpl.java:2233) ~[?:?] at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$InClassLoaderExecute.catchingExecuteInClassLoader(ElasticSearchPersistenceServiceImpl.java:2244) ~[?:?] at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.query(ElasticSearchPersistenceServiceImpl.java:1767) ~[?:?] at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.query(ElasticSearchPersistenceServiceImpl.java:1595) ~[?:?] at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.query(ElasticSearchPersistenceServiceImpl.java:1585) ~[?:?] at Proxy3682d3e9_3fe5_4d6d_84f2_efb9e488c5df.query(Unknown Source) ~[?:?] at org.apache.unomi.plugins.baseplugin.actions.MergeProfilesOnPropertyAction$1.execute(MergeProfilesOnPropertyAction.java:201) ~[?:?] at org.apache.unomi.services.impl.events.EventServiceImpl.send(EventServiceImpl.java:175) ~[?:?] at org.apache.unomi.services.impl.events.EventServiceImpl.send(EventServiceImpl.java:144) ~[?:?] at org.apache.unomi.rest.service.impl.RestServiceUtilsImpl.handleEvents(RestServiceUtilsImpl.java:112) ~[?:?] at org.apache.unomi.rest.endpoints.ContextJsonEndpoint.handleRequest(ContextJsonEndpoint.java:364) ~[?:?] at org.apache.unomi.rest.endpoints.ContextJsonEndpoint.contextJSONAsPost(ContextJsonEndpoint.java:311) ~[?:?] at sun.reflect.GeneratedMethodAccessor142.invoke(Unknown Source) ~[?:?] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_342] ... Caused by: org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed] at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:177) ~[?:?] at org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:1727) ~[?:?] at org.elasticsearch.client.RestHighLevelClient.parseResponseException(RestHighLevelClient.java:1704) ~[?:?] at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1467) ~[?:?] at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1424) ~[?:?] at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1394) ~[?:?] at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:930) ~[?:?] at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$24.execute(ElasticSearchPersistenceServiceImpl.java:1712) ~[?:?] ... 100 more Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [****], URI [/context-session-date-*/_search?typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&ignore_throttled=true&scroll=1h&search_type=query_then_fetch&batched_reduce_size=512&ccs_minimize_roundtrips=true], status line [HTTP/1.1 500 Internal Server Error] Warnings: [[ignore_throttled] parameter is deprecated because frozen indices have been deprecated. Consider cold or frozen tiers in place of frozen indices.] {"error":{"root_cause":[{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."},{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."},{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."},{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."},{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."},{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."},{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."},{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"context-session-date-2022-09","node":"V1jYgTB_RNGQshakH0-SaQ","reason":{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."}},{"shard":0,"index":"context-session-date-2022-10","node":"A9M5wVb-QRKjvsRRASi4qA","reason":{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."}},{"shard":0,"index":"context-session-date-2022-11","node":"A9M5wVb-QRKjvsRRASi4qA","reason":{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."}},{"shard":0,"index":"context-session-date-2022-12","node":"A9M5wVb-QRKjvsRRASi4qA","reason":{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."}},{"shard":0,"index":"context-session-date-2023-01","node":"V1jYgTB_RNGQshakH0-SaQ","reason":{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."}},{"shard":0,"index":"context-session-date-2023-02","node":"A9M5wVb-QRKjvsRRASi4qA","reason":{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."}},{"shard":0,"index":"context-session-date-2023-03","node":"A9M5wVb-QRKjvsRRASi4qA","reason":{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."}},{"shard":0,"index":"context-session-date-2023-04","node":"A9M5wVb-QRKjvsRRASi4qA","reason":{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [2500]. This limit can be set by changing the [search.max_open_scroll_context] setting."}}]},"status":500} {code} > Profile merge system is doing a lot of scroll queries > ----------------------------------------------------- > > Key: UNOMI-764 > URL: https://issues.apache.org/jira/browse/UNOMI-764 > Project: Apache Unomi > Issue Type: Bug > Affects Versions: unomi-2.2.0, unomi-1.8.0 > Reporter: Kevan Jahanshahi > Priority: Major > Fix For: unomi-2.3.0, unomi-1.9.0 > > > We experienced issues with profile merge action with errors like: > {code:java} > java.lang.Exception: Error loading itemType=org.apache.unomi.api.Profile > itemId=a9abefb6-8e21-4a0b-9a38-92c8e2fcf512 > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$6.execute(ElasticSearchPersistenceServiceImpl.java:772) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$6.execute(ElasticSearchPersistenceServiceImpl.java:740) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$InClassLoaderExecute.executeInClassLoader(ElasticSearchPersistenceServiceImpl.java:2233) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$InClassLoaderExecute.catchingExecuteInClassLoader(ElasticSearchPersistenceServiceImpl.java:2244) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.load(ElasticSearchPersistenceServiceImpl.java:780) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.load(ElasticSearchPersistenceServiceImpl.java:735) > ~[?:?] > at Proxy6d4b2959_6bef_4c34_bb5a_88734cd23613.load(Unknown Source) ~[?:?] > at > org.apache.unomi.plugins.baseplugin.actions.MergeProfilesOnPropertyAction$1.execute(MergeProfilesOnPropertyAction.java:226) > ~[?:?] > at > org.apache.unomi.services.impl.events.EventServiceImpl.send(EventServiceImpl.java:175) > ~[?:?] > at > org.apache.unomi.services.impl.events.EventServiceImpl.send(EventServiceImpl.java:144) > ~[?:?] > at > org.apache.unomi.rest.service.impl.RestServiceUtilsImpl.handleEvents(RestServiceUtilsImpl.java:112) > ~[?:?] > at > org.apache.unomi.rest.endpoints.ContextJsonEndpoint.handleRequest(ContextJsonEndpoint.java:364) > ~[?:?] > at > org.apache.unomi.rest.endpoints.ContextJsonEndpoint.contextJSONAsPost(ContextJsonEndpoint.java:311) > ~[?:?]{code} > {code:java} > Caused by: org.elasticsearch.ElasticsearchStatusException: Elasticsearch > exception [type=circuit_breaking_exception, reason=[parent] Data too large, > data for [indices:data/read/get[s]] would be [8308883688/7.7gb], which is > larger than the limit of [8160437862/7.5gb], real usage: [8308883456/7.7gb], > new bytes reserved: [232/232b], usages [request=0/0b, fielddata=36816/35.9kb, > in_flight_requests=232/232b, model_inference=0/0b, eql_sequence=0/0b, > accounting=106608640/101.6mb]] at > org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:177) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:1727) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.parseResponseException(RestHighLevelClient.java:1704) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1467) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1424) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1394) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.get(RestHighLevelClient.java:714) > ~[?:?] at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$6.execute(ElasticSearchPersistenceServiceImpl.java:757) > ~[?:?] ... 99 more Suppressed: org.elasticsearch.client.ResponseException: > method [GET], host [https://********:9220], URI > [/context-profile/_doc/a9abefb6-8e21-4a0b-9a38-92c8e2fcf512], status line > [HTTP/1.1 429 Too Many Requests] > {"error":{"root_cause":[{"type":"circuit_breaking_exception","reason":"[parent] > Data too large, data for [indices:data/read/get[s]] would be > [8308883688/7.7gb], which is larger than the limit of [8160437862/7.5gb], > real usage: [8308883456/7.7gb], new bytes reserved: [232/232b], usages > [request=0/0b, fielddata=36816/35.9kb, in_flight_requests=232/232b, > model_inference=0/0b, eql_sequence=0/0b, > accounting=106608640/101.6mb]","bytes_wanted":8308883688,"bytes_limit":8160437862,"durability":"PERMANENT"}],"type":"circuit_breaking_exception","reason":"[parent] > Data too large, data for [indices:data/read/get[s]] would be > [8308883688/7.7gb], which is larger than the limit of [8160437862/7.5gb], > real usage: [8308883456/7.7gb], new bytes reserved: [232/232b], usages > [request=0/0b, fielddata=36816/35.9kb, in_flight_requests=232/232b, > model_inference=0/0b, eql_sequence=0/0b, > accounting=106608640/101.6mb]","bytes_wanted":8308883688,"bytes_limit":8160437862,"durability":"PERMANENT"},"status":429} > at org.elasticsearch.client.RestClient.convertResponse(RestClient.java:253) > ~[?:?] at > org.elasticsearch.client.RestClient.performRequest(RestClient.java:231) > ~[?:?] at > org.elasticsearch.client.RestClient.performRequest(RestClient.java:205) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1454) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1424) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1394) > ~[?:?] at > org.elasticsearch.client.RestHighLevelClient.get(RestHighLevelClient.java:714) > ~[?:?] at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$6.execute(ElasticSearchPersistenceServiceImpl.java:757) > ~[?:?] at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$6.execute(ElasticSearchPersistenceServiceImpl.java:740) > ~[?:?] at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$InClassLoaderExecute.executeInClassLoader(ElasticSearchPersistenceServiceImpl.java:2233) > ~[?:?] at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$InClassLoaderExecute.catchingExecuteInClassLoader(ElasticSearchPersistenceServiceImpl.java:2244) > ~[?:?] at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.load(ElasticSearchPersistenceServiceImpl.java:780) > ~[?:?] at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.load(ElasticSearchPersistenceServiceImpl.java:735) > ~[?:?] at Proxy6d4b2959_6bef_4c34_bb5a_88734cd23613.load(Unknown Source) > ~[?:?] at > org.apache.unomi.plugins.baseplugin.actions.MergeProfilesOnPropertyAction$1.execute(MergeProfilesOnPropertyAction.java:226) > ~[?:?] at > org.apache.unomi.services.impl.events.EventServiceImpl.send(EventServiceImpl.java:175) > ~[?:?] at > org.apache.unomi.services.impl.events.EventServiceImpl.send(EventServiceImpl.java:144) > ~[?:?] at > org.apache.unomi.rest.service.impl.RestServiceUtilsImpl.handleEvents(RestServiceUtilsImpl.java:112) > ~[?:?] at > org.apache.unomi.rest.endpoints.ContextJsonEndpoint.handleRequest(ContextJsonEndpoint.java:364) > ~[?:?] at > org.apache.unomi.rest.endpoints.ContextJsonEndpoint.contextJSONAsPost(ContextJsonEndpoint.java:311) > ~[?:?] > {code} > Or: > {code:java} > Error while executing in class loader > java.lang.Exception: Error loading itemType=org.apache.unomi.api.Profile > query={ > "bool" : { > "must" : [ > { > "match_all" : { > "boost" : 1.0 > } > } > ], > "filter" : [ > { > "bool" : { > "must" : [ > { > "term" : { > "systemProperties.mergeIdentifier" : { > "value" : "**********************", > "boost" : 1.0 > } > } > }, > { > "bool" : { > "must_not" : [ > { > "exists" : { > "field" : "mergedWith", > "boost" : 1.0 > } > } > ], > "adjust_pure_negative" : true, > "boost" : 1.0 > } > } > ], > "adjust_pure_negative" : true, > "boost" : 1.0 > } > } > ], > "adjust_pure_negative" : true, > "boost" : 1.0 > } > } sortBy=properties.firstVisit > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$24.execute(ElasticSearchPersistenceServiceImpl.java:1757) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$24.execute(ElasticSearchPersistenceServiceImpl.java:1650) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$InClassLoaderExecute.executeInClassLoader(ElasticSearchPersistenceServiceImpl.java:2233) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl$InClassLoaderExecute.catchingExecuteInClassLoader(ElasticSearchPersistenceServiceImpl.java:2244) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.query(ElasticSearchPersistenceServiceImpl.java:1767) > ~[?:?] > at > org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.query(ElasticSearchPersistenceServiceImpl.java:1570) > ~[?:?] > at Proxy6d4b2959_6bef_4c34_bb5a_88734cd23613.query(Unknown Source) > ~[?:?] > at > org.apache.unomi.plugins.baseplugin.actions.MergeProfilesOnPropertyAction.execute(MergeProfilesOnPropertyAction.java:94) > ~[?:?] > at > org.apache.unomi.services.actions.impl.ActionExecutorDispatcherImpl$8.execute(ActionExecutorDispatcherImpl.java:227) > ~[?:?] > at > org.apache.unomi.services.actions.impl.ActionExecutorDispatcherImpl$8.execute(ActionExecutorDispatcherImpl.java:224) > ~[?:?] > at > org.apache.unomi.metrics.MetricAdapter.runWithTimer(MetricAdapter.java:38) > ~[?:?] > at > org.apache.unomi.services.actions.impl.ActionExecutorDispatcherImpl.execute(ActionExecutorDispatcherImpl.java:229) > ~[?:?] > at > org.apache.unomi.services.impl.rules.RulesServiceImpl.onEvent(RulesServiceImpl.java:327) > ~[?:?] > at > org.apache.unomi.services.impl.events.EventServiceImpl.send(EventServiceImpl.java:170) > ~[?:?] > at > org.apache.unomi.services.impl.events.EventServiceImpl.send(EventServiceImpl.java:144) > ~[?:?] > at > org.apache.unomi.rest.service.impl.RestServiceUtilsImpl.handleEvents(RestServiceUtilsImpl.java:112) > ~[?:?] > at > org.apache.unomi.rest.endpoints.ContextJsonEndpoint.handleRequest(ContextJsonEndpoint.java:364) > ~[?:?] > at > org.apache.unomi.rest.endpoints.ContextJsonEndpoint.contextJSONAsPost(ContextJsonEndpoint.java:311) > ~[?:?] {code} > The merge is doing scroll queries from code: > {code:java} > List<Profile> profiles = persistenceService.query(c, "properties.firstVisit", > Profile.class, 0, maxProfilesInOneMerge).getList(); {code} > Where *maxProfilesInOneMerge* is by default set to {*}-1{*}, in persistence > service when doing a query using size {*}-1{*}: > {code:java} > if (size == Integer.MIN_VALUE) { > searchSourceBuilder.size(defaultQueryLimit); > } else if (size != -1) { > searchSourceBuilder.size(size); > } else { > // size == -1, use scroll query to retrieve all the results > searchRequest.scroll(keepAlive); > } {code} > With a *keepAlive* of 1hour by default. So that can be a lot, in case of lot > merge requests happen in a short period of time, the scroll will accumulate > in RAM. > > The workaround is to set the *maxProfilesInOneMerge* to something else than > *-1* to avoid scroll queries. > For that we can use this configuration: > * Unomi config: *org.apache.unomi.plugins.base.maxProfilesInOneMerge* > * Env config: *UNOMI_MAX_PROFILES_IN_ONE_MERGE* > A value of *10* seem's good as we never expect a lot of profiles to be merged > together. > *But for the current ticket we should fix the default value and we should > never do scroll queries at all at that place. Creating a new scroll on every > request is a bad idea.* -- This message was sent by Atlassian Jira (v8.20.10#820010)