You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by "Serge Huber (Jira)" <ji...@apache.org> on 2021/07/01 07:45:00 UTC
[jira] [Updated] (UNOMI-493) Fix missing profileID on segment
condition validation
[ https://issues.apache.org/jira/browse/UNOMI-493?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Serge Huber updated UNOMI-493:
------------------------------
Description:
When saving a segment, we first validate the condition using a call to:
{code}
if (!persistenceService.isValidCondition(segment.getCondition(), new Profile())) {
{code}
The problem is that this fails in the backend because a lot of conditions expect a profile to have an ID.
This generates the following logs when the integration tests run:
{code}
2021-06-28T16:11:20,890 | INFO | RMI TCP Connection(3)-127.0.0.1 | ContainerTestRunner | 236 - org.ops4j.pax.exam.invoker.junit - 4.13.1 | running testSegmentWithPastEventCondition in reactor
2021-06-28T16:11:22,316 | ERROR | RMI TCP Connection(3)-127.0.0.1 | ConditionEvaluatorDispatcher | 164 - org.apache.unomi.persistence-elasticsearch-core - 1.5.7.SNAPSHOT | Error executing condition evaluator with key=pastEventConditionEvaluat
or
java.lang.IllegalArgumentException: Impossible to build ES filter, missing value for condition using comparisonOperator: equals, and propertyName: profileId
at org.apache.unomi.plugins.baseplugin.conditions.PropertyConditionESQueryBuilder.checkRequiredValue(PropertyConditionESQueryBuilder.java:163) ~[?:?]
at org.apache.unomi.plugins.baseplugin.conditions.PropertyConditionESQueryBuilder.buildQuery(PropertyConditionESQueryBuilder.java:72) ~[?:?]
at org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher.buildFilter(ConditionESQueryBuilderDispatcher.java:84) ~[?:?]
at org.apache.unomi.plugins.baseplugin.conditions.BooleanConditionESQueryBuilder.buildQuery(BooleanConditionESQueryBuilder.java:55) ~[?:?]
at org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher.buildFilter(ConditionESQueryBuilderDispatcher.java:84) ~[?:?]
at org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher.buildFilter(ConditionESQueryBuilderDispatcher.java:62) ~[?:?]
at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.queryCount(ElasticSearchPersistenceServiceImpl.java:1581) ~[?:?]
at Proxyd9162e86_2995_4037_bd2c_dd7d33e8d3e7.queryCount(Unknown Source) ~[?:?]
at org.apache.unomi.plugins.baseplugin.conditions.PastEventConditionEvaluator.eval(PastEventConditionEvaluator.java:123) ~[?:?]
at org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher$1.execute(ConditionEvaluatorDispatcher.java:83) ~[?:?]
at org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher$1.execute(ConditionEvaluatorDispatcher.java:78) ~[?:?]
at org.apache.unomi.metrics.MetricAdapter.runWithTimer(MetricAdapter.java:38) ~[?:?]
at org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher.eval(ConditionEvaluatorDispatcher.java:88) ~[?:?]
at org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher.eval(ConditionEvaluatorDispatcher.java:60) ~[?:?]
at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.isValidCondition(ElasticSearchPersistenceServiceImpl.java:1478) ~[?:?]
at Proxy57ca1a8c_b947_40ed_a4e1_73097b805260.isValidCondition(Unknown Source) ~[?:?]
at org.apache.unomi.services.impl.segments.SegmentServiceImpl.setSegmentDefinition(SegmentServiceImpl.java:271) ~[?:?]
at org.apache.unomi.itests.SegmentIT.testSegmentWithPastEventCondition(SegmentIT.java:164) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) ~[?:?]
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) ~[?:?]
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) ~[?:?]
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) ~[?:?]
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) ~[?:?]
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) ~[?:?]
at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runLeafWithRetry(ContainerTestRunner.java:97) ~[?:?]
at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChildWithRetry(ContainerTestRunner.java:84) ~[?:?]
at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:75) ~[?:?]
at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:43) ~[?:?]
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) ~[?:?]
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) ~[?:?]
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) ~[?:?]
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) ~[?:?]
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) ~[?:?]
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) ~[?:?]
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) ~[?:?]
at org.junit.runner.JUnitCore.run(JUnitCore.java:115) ~[?:?]
at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.invokeViaJUnit(JUnitProbeInvoker.java:124) ~[?:?]
at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.findAndInvoke(JUnitProbeInvoker.java:97) ~[?:?]
at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.call(JUnitProbeInvoker.java:73) ~[?:?]
at sun.reflect.GeneratedMethodAccessor167.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
at org.ops4j.pax.exam.rbc.internal.RemoteBundleContextImpl.remoteCall(RemoteBundleContextImpl.java:85) ~[!/:?]
{code}
was:
When saving a segment, we first validate the condition using a call to:
{code}
if (!persistenceService.isValidCondition(segment.getCondition(), new Profile())) {
{code}
The problem is that this fails in the backend because a lot of conditions expect a profile to have an ID.
> Fix missing profileID on segment condition validation
> -----------------------------------------------------
>
> Key: UNOMI-493
> URL: https://issues.apache.org/jira/browse/UNOMI-493
> Project: Apache Unomi
> Issue Type: Bug
> Components: core
> Affects Versions: 1.5.6
> Reporter: Serge Huber
> Assignee: Serge Huber
> Priority: Major
> Fix For: 1.6.0
>
>
> When saving a segment, we first validate the condition using a call to:
> {code}
> if (!persistenceService.isValidCondition(segment.getCondition(), new Profile())) {
> {code}
> The problem is that this fails in the backend because a lot of conditions expect a profile to have an ID.
> This generates the following logs when the integration tests run:
> {code}
> 2021-06-28T16:11:20,890 | INFO | RMI TCP Connection(3)-127.0.0.1 | ContainerTestRunner | 236 - org.ops4j.pax.exam.invoker.junit - 4.13.1 | running testSegmentWithPastEventCondition in reactor
> 2021-06-28T16:11:22,316 | ERROR | RMI TCP Connection(3)-127.0.0.1 | ConditionEvaluatorDispatcher | 164 - org.apache.unomi.persistence-elasticsearch-core - 1.5.7.SNAPSHOT | Error executing condition evaluator with key=pastEventConditionEvaluat
> or
> java.lang.IllegalArgumentException: Impossible to build ES filter, missing value for condition using comparisonOperator: equals, and propertyName: profileId
> at org.apache.unomi.plugins.baseplugin.conditions.PropertyConditionESQueryBuilder.checkRequiredValue(PropertyConditionESQueryBuilder.java:163) ~[?:?]
> at org.apache.unomi.plugins.baseplugin.conditions.PropertyConditionESQueryBuilder.buildQuery(PropertyConditionESQueryBuilder.java:72) ~[?:?]
> at org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher.buildFilter(ConditionESQueryBuilderDispatcher.java:84) ~[?:?]
> at org.apache.unomi.plugins.baseplugin.conditions.BooleanConditionESQueryBuilder.buildQuery(BooleanConditionESQueryBuilder.java:55) ~[?:?]
> at org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher.buildFilter(ConditionESQueryBuilderDispatcher.java:84) ~[?:?]
> at org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher.buildFilter(ConditionESQueryBuilderDispatcher.java:62) ~[?:?]
> at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.queryCount(ElasticSearchPersistenceServiceImpl.java:1581) ~[?:?]
> at Proxyd9162e86_2995_4037_bd2c_dd7d33e8d3e7.queryCount(Unknown Source) ~[?:?]
> at org.apache.unomi.plugins.baseplugin.conditions.PastEventConditionEvaluator.eval(PastEventConditionEvaluator.java:123) ~[?:?]
> at org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher$1.execute(ConditionEvaluatorDispatcher.java:83) ~[?:?]
> at org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher$1.execute(ConditionEvaluatorDispatcher.java:78) ~[?:?]
> at org.apache.unomi.metrics.MetricAdapter.runWithTimer(MetricAdapter.java:38) ~[?:?]
> at org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher.eval(ConditionEvaluatorDispatcher.java:88) ~[?:?]
> at org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher.eval(ConditionEvaluatorDispatcher.java:60) ~[?:?]
> at org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl.isValidCondition(ElasticSearchPersistenceServiceImpl.java:1478) ~[?:?]
> at Proxy57ca1a8c_b947_40ed_a4e1_73097b805260.isValidCondition(Unknown Source) ~[?:?]
> at org.apache.unomi.services.impl.segments.SegmentServiceImpl.setSegmentDefinition(SegmentServiceImpl.java:271) ~[?:?]
> at org.apache.unomi.itests.SegmentIT.testSegmentWithPastEventCondition(SegmentIT.java:164) ~[?:?]
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181]
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
> at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) ~[?:?]
> at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) ~[?:?]
> at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) ~[?:?]
> at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) ~[?:?]
> at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) ~[?:?]
> at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) ~[?:?]
> at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runLeafWithRetry(ContainerTestRunner.java:97) ~[?:?]
> at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChildWithRetry(ContainerTestRunner.java:84) ~[?:?]
> at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:75) ~[?:?]
> at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:43) ~[?:?]
> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) ~[?:?]
> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) ~[?:?]
> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) ~[?:?]
> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) ~[?:?]
> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) ~[?:?]
> at org.junit.runners.ParentRunner.run(ParentRunner.java:363) ~[?:?]
> at org.junit.runner.JUnitCore.run(JUnitCore.java:137) ~[?:?]
> at org.junit.runner.JUnitCore.run(JUnitCore.java:115) ~[?:?]
> at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.invokeViaJUnit(JUnitProbeInvoker.java:124) ~[?:?]
> at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.findAndInvoke(JUnitProbeInvoker.java:97) ~[?:?]
> at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.call(JUnitProbeInvoker.java:73) ~[?:?]
> at sun.reflect.GeneratedMethodAccessor167.invoke(Unknown Source) ~[?:?]
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
> at org.ops4j.pax.exam.rbc.internal.RemoteBundleContextImpl.remoteCall(RemoteBundleContextImpl.java:85) ~[!/:?]
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)