Sergi,

As far as I understand you’re considering an example below:

IgniteCache partitioneCache = ...;
IgniteCache replicatedCache = …;

1. Valid scenario - *partitionedCache*.query(“SELECT * FROM partitionedCache … 
JOIN replicatedCache …”);
2. Error-prone scenario - *replicatedCache*.query(“SELECT * FROM 
partitionedCache … JOIN replicatedCache …”);

Do you mean 2. as the issue? If it’s so then can’t we just detect on our own 
that all the caches are replicated and execute a query more optimal? This 
should omit necessity to add isReplicatedOnly()?

—
Denis

> On Apr 12, 2017, at 7:07 AM, Andrey Mashenkov <andrey.mashen...@gmail.com> 
> wrote:
> 
> Yes, it's reasonable.
> 
> On Wed, Apr 12, 2017 at 3:23 PM, Sergi Vladykin <sergi.vlady...@gmail.com>
> wrote:
> 
>> Good point, but I'm not sure. The difference is that on client node you
>> should not be able to enable isLocal, while isReplicatedOnly is perfectly
>> valid. What do you think?
>> 
>> Sergi
>> 
>> 2017-04-12 15:18 GMT+03:00 Andrey Mashenkov <andrey.mashen...@gmail.com>:
>> 
>>> Sergi,
>>> 
>>> Got it.
>>> 
>>> Does query execution way and results will be same for isReplicatedOnly
>> flag
>>> and for isLocal flag turned on?
>>> If my understanding is correct, we will get same results and there is no
>>> need to introduce a new flag.
>>> 
>>> 
>>> 
>>> On Wed, Apr 12, 2017 at 2:54 PM, Sergi Vladykin <
>> sergi.vlady...@gmail.com>
>>> wrote:
>>> 
>>>> Ok, let it be an exception. I'm just saying that the thing does not
>> work
>>>> now.
>>>> 
>>>> Sergi
>>>> 
>>>> 2017-04-12 14:50 GMT+03:00 Andrey Mashenkov <
>> andrey.mashen...@gmail.com
>>>> :
>>>> 
>>>>> Sergi,
>>>>> 
>>>>> I wounder how it is possible?
>>>>> 
>>>>> Looks like it is impossible to run query on replicated cache, but
>>> select
>>>>> data from a
>>>>> partitioned table. It will result with IlleagalStateException on
>> stable
>>>>> topology or
>>>>> IgniteCacheException on unstable topology.
>>>>> See ReduceQueryExecutor.stableDataNodes() and
>>>>> replicatedUnstableDataNodes()
>>>>> methods.
>>>>> 
>>>>> BTW, IlleagalStateException with no message is confusing.
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> On Wed, Apr 12, 2017 at 2:36 PM, Sergi Vladykin <
>>>> sergi.vlady...@gmail.com>
>>>>> wrote:
>>>>> 
>>>>>> Andrey,
>>>>>> 
>>>>>> Because if you run query on replicated cache, but select data from
>> a
>>>>>> partitioned table, you will get only a part of the result.
>>>>>> 
>>>>>> Igor,
>>>>>> 
>>>>>> You are mostly right, but
>>>>>> 
>>>>>> 1. Performance characteristics may change.
>>>>>> 2. Ignite SQL processing pipeline may not support all the stuff in
>> H2
>>>> SQL
>>>>>> and fail in some case where it worked previously.
>>>>>> 
>>>>>> Because of this the change may affect existing applications and I
>>> want
>>>> to
>>>>>> have it in 2.0 to make it legal.
>>>>>> 
>>>>>> Sergi
>>>>>> 
>>>>>> 2017-04-12 14:10 GMT+03:00 Igor Sapego <isap...@gridgain.com>:
>>>>>> 
>>>>>>> Also, is it really a breaking change if the results are wrong?
>>>>>>> To me it looks more like a bugfix, i.e. you can't break something
>>>>>>> that does not work properly.
>>>>>>> 
>>>>>>> Best Regards,
>>>>>>> Igor
>>>>>>> 
>>>>>>> On Wed, Apr 12, 2017 at 2:04 PM, Andrey Mashenkov <
>>>>>>> andrey.mashen...@gmail.com> wrote:
>>>>>>> 
>>>>>>>> Sergi,
>>>>>>>> 
>>>>>>>> How can query to replicated cache leads to to wrong results?
>>>>>>>> Is it due to we can read backup entries?
>>>>>>>> 
>>>>>>>> On Wed, Apr 12, 2017 at 12:31 PM, Sergi Vladykin <
>>>>>>> sergi.vlady...@gmail.com
>>>>>>>>> 
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> Guys,
>>>>>>>>> 
>>>>>>>>> I want to introduce another breaking change for 2.0.
>>>>>>>>> 
>>>>>>>>> Currently SQL is being processed differently when we call
>>> method
>>>>>>> `query`
>>>>>>>> on
>>>>>>>>> partitioned cache and on replicated: on replicated cache we
>> do
>>>> not
>>>>> do
>>>>>>> any
>>>>>>>>> extra processing and execute the query as is on current node.
>>>>>>>>> 
>>>>>>>>> This behavior historically existed for performance reasons.
>> But
>>>> it
>>>>> is
>>>>>>> not
>>>>>>>>> obvious and leads to wrong query results. This issue becomes
>>> even
>>>>>> more
>>>>>>>>> creepy with JDBC and ODBC drivers.
>>>>>>>>> 
>>>>>>>>> In 2.0 I want to execute all the SQL queries the same way
>>> through
>>>>> the
>>>>>>>> whole
>>>>>>>>> processing pipeline to guaranty the correct result
>>> irrespectively
>>>>> to
>>>>>>> the
>>>>>>>>> cache that was the query originator.
>>>>>>>>> 
>>>>>>>>> To be able to have the old behavior (skip all the
>> preprocessing
>>>> and
>>>>>> run
>>>>>>>>> query on current node) add a flag isReplicatedOnly() on
>>> SqlQuery
>>>>> and
>>>>>>>>> SqlFieldsQuery. It will be disabled by default and if one
>> knows
>>>>> that
>>>>>>> the
>>>>>>>>> only replicated tables participate in a query, then he can
>>> enable
>>>>> it
>>>>>>> for
>>>>>>>>> better performance.
>>>>>>>>> 
>>>>>>>>> Sergi
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Best regards,
>>>>>>>> Andrey V. Mashenkov
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Best regards,
>>>>> Andrey V. Mashenkov
>>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Best regards,
>>> Andrey V. Mashenkov
>>> 
>> 
> 
> 
> 
> -- 
> Best regards,
> Andrey V. Mashenkov

Reply via email to