[
https://issues.apache.org/jira/browse/IGNITE-13553?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17209618#comment-17209618
]
Nikolay Izhikov commented on IGNITE-13553:
------------------------------------------
Reproducer:
{noformat}
public class WrongQueryEntityDataTypeTest extends GridCommonAbstractTest {
/** */
private volatile boolean systemThreadFails;
/** {@inheritDoc} */
@Override protected FailureHandler getFailureHandler(String
igniteInstanceName) {
return new FailureHandler() {
@Override public boolean onFailure(Ignite ignite, FailureContext
failureCtx) {
systemThreadFails = true;
return false;
}
};
}
/** */
@Test
public void testWrongQueryEntityDataType() throws Exception {
ClassLoader ldr = getExternalClassLoader();
Class<?> orgCls =
ldr.loadClass("org.apache.ignite.tests.p2p.cache.Organization");
Class<?> personCls =
ldr.loadClass("org.apache.ignite.tests.p2p.cache.Person");
Class<?> adrCls =
ldr.loadClass("org.apache.ignite.tests.p2p.cache.Address");
startGrids(2);
try (IgniteClient client = Ignition.startClient(new
ClientConfiguration().setAddresses("127.0.0.1:10800"))) {
LinkedHashMap<String, String> fields = new LinkedHashMap<>();
String indexedField = "head";
fields.put("name", String.class.getName());
fields.put(indexedField, String.class.getName()); //Actual type of
the field head is Person.
ClientCache<Integer, Object> cache = client
.createCache(new ClientCacheConfiguration()
.setName("TEST")
.setAtomicityMode(TRANSACTIONAL)
.setBackups(1)
.setQueryEntities(new QueryEntity()
.setKeyType(Integer.class.getName())
.setValueType(orgCls.getName())
.setFields(fields)
.setIndexes(Collections.singleton(new
QueryIndex(indexedField)))
)
);
Object person = personCls.getConstructor().newInstance();
Object ent = orgCls.getConstructor(String.class, personCls,
adrCls).newInstance("test", person, null);
GridTestUtils.assertThrowsWithCause(() -> cache.put(1, ent),
ClientException.class);
}
assertFalse(systemThreadFails);
}
}
{noformat}
> Node failure with ClassNotFoundException when indexed field of QueryEntity
> differs from type used in put operation
> ------------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-13553
> URL: https://issues.apache.org/jira/browse/IGNITE-13553
> Project: Ignite
> Issue Type: Bug
> Components: sql, thin client
> Affects Versions: 2.9, 2.8.1, 2.10
> Reporter: Ilya Shishkov
> Priority: Critical
>
> Failures occur under these conditions:
> # Data classes are not present in server classpaths, peer-classloading is
> not used because thin client is used.
> # Manual construction of QueryEntity via #setFields, #setIndexes etc. is
> used instead of constructor of QueryEntity in conjunction with @QuerySqlField
> for data clases.
> # One of the indexed fields of QueryEntity has type different from type of
> corresponding field of data object instance, eg:
> {code:java|title=QueryEntity}
> fields.put("name", "java.lang.String");
> fields.put("wrongTypeEmbeddable", "java.lang.String"); /* This is wrong type
> */
> QueryEntity qryEntity = new QueryEntity()
> .setKeyType("java.lang.Integer")
> .setValueType("org.apache.ignite.wrongtype.WrongTypeEntity") /* FQDN
> should be used */
> .setFields(fields)
> .setIndexes(Collections.singleton(
> new QueryIndex("wrongTypeEmbeddable") /* Wrong type field is
> indexed */));
> {code}
> {code:java|title=Embedded field type in put operation is different}
> cache.put(0, new WrongTypeEntity("name",
> new WrongTypeEmbeddable(256, "testField") /* wrongTypeEmbeddable field
> */));
> {code}
> How to reproduce:
> # Start server nodes with default config via ignite.sh
> # Run reproducer:
> For Apache Ignite 2.8.1 failures are identical for atomic and transactional
> caches:
> {code:java}
> [17:45:23,108][SEVERE][sys-stripe-0-#1][] JVM will be halted immediately due
> to the failure: [failureCtx=FailureContext [type=CRITICAL_ERROR, err=class
> o.a.i.binary.BinaryInvalidTypeException: o.a.i.wrongtype.WrongTypeEmbeddable]]
> {code}
> For AI, built and assemblied from master, failure is supressed for atomic and
> occur only for transactional caches:
> {code:java}
> [17:39:09,305][SEVERE][sys-stripe-10-#11][] JVM will be halted immediately
> due to the failure: [failureCtx=FailureContext [type=CRITICAL_ERROR,
> err=class o.a.i.i.transactions.IgniteTxHeuristicCheckedException: Committing
> a transaction has produced runtime exception]]
> {code}
> Root cause for all failures is:
> {code:java}
> Caused by: java.lang.ClassNotFoundException:
> org.apache.ignite.wrongtype.WrongTypeEmbeddable
> {code}
> Logs:
--
This message was sent by Atlassian Jira
(v8.3.4#803005)