Thank you for your quick reply. That does look a lot like what I’m experiencing.

However, I did some testing but so far I did not get the workaround to work. I 
put the following in the XML config file:

        <property name="binaryConfiguration">
            <bean class="org.apache.ignite.configuration.BinaryConfiguration">
                <property name="classNames">
                    <list>
                        
<value>org.apache.ignite.examples.streaming.TestKey</value>
                    </list>
                </property>
            </bean>
        </property>

Furthermore, when I create the cache, I pass a config with:
cfg.setKeyConfiguration(new CacheKeyConfiguration(TestKey.class.getName(), 
"b"));

According to the ticket this should be sufficient. Could I still be missing 
something here?

-Floris

From: Denis Mekhanikov [mailto:dmekhani...@gmail.com]
Sent: Friday 03 August 2018 4:05 PM
To: user@ignite.apache.org
Subject: Re: SQL SELECT with AffinityKeyMapped - no results [External]

Floris,

Most probably, you hit a bug, that was introduced in Ignite 2.0: 
https://issues.apache.org/jira/browse/IGNITE-5795

Because of this bug @AffinityKeyMapped annotation is ignored in classes, that 
are used in query entity configuration.
As far as I can see, this is exactly your case.

It's going to be fixed in Ignite 2.7.

There is a workaround for this problem: you can list the problematic classes in 
BinaryConfiguration#classNames<https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/BinaryConfiguration.html#setClassNames-java.util.Collection->
 configuration property.
Binary configuration should be specified as 
IgniteConfiguration#binaryConfiguration<https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/IgniteConfiguration.html#setBinaryConfiguration-org.apache.ignite.configuration.BinaryConfiguration->.
This configuration should be the same on all nodes.
You may also need to configure 
CacheConfiguration#keyConfiguration<https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/configuration/CacheConfiguration.html#setKeyConfiguration-org.apache.ignite.cache.CacheKeyConfiguration...->
 for your cache.

Denis

пт, 3 авг. 2018 г. в 16:58, Floris Van Nee 
<florisvan...@optiver.com<mailto:florisvan...@optiver.com>>:
Hi all,

I have defined two classes in Java – one for a key and one for a value. Suppose 
they look like this:

    public static class Key implements Serializable {
        public String a;
        @QuerySqlField
        @AffinityKeyMapped
        public String b;
    }
    public static class Value implements Serializable {
        @QuerySqlField
        public int c;
    }

I then define a distributed cache (in Java) for this key/value pair and fill it 
with values (in Java).
Now, I run the following in SQL:
SELECT * FROM kv_table;
I indeed see results of all the stuff that I inserted into the cache.

However, when I try to select a certain value, it returns no results:
SELECT * FROM kv_table WHERE b = ‘test’;
I get expected results when filtering on any column that is not defined as 
AffinityKeyMapped.
The only case where I get wrong results is for the AffinityKeyMapped column - I 
always get a wrong result (most of the time zero rows, for some values I do get 
one row, but I expect to see more rows). Also when I remove the 
AffinityKeyMapped annotation and run my test again, everything works as 
expected.
I run just a single server node and execute my query using the SQLLine tool 
that Ignite ships with.

Is it possible that there is a bug in the code that handles this affinity key 
mapping for SQL queries? Or am I doing something wrong here?

-Floris

Reply via email to