You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Ilya Shishkov (Jira)" <ji...@apache.org> on 2020/10/07 15:20:00 UTC

[jira] [Updated] (IGNITE-13553) Node failure with ClassNotFoundException when indexed field of QueryEntity differs from type used in put operation

     [ https://issues.apache.org/jira/browse/IGNITE-13553?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ilya Shishkov updated IGNITE-13553:
-----------------------------------
    Description: 
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:

  was:
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 condig 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:


> 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)