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)