[ 
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)

Reply via email to