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:[email protected]]
Sent: Friday 03 August 2018 4:05 PM
To: [email protected]
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
<[email protected]<mailto:[email protected]>>:
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