Hello, when I tried to migrate to new version i had error. Optimistic
Serializable isn't supported?
```
Caused by: class
org.apache.ignite.internal.processors.query.IgniteSQLException: Only
pessimistic repeatable read transactions are supported at the moment.
at
org.apache.ignite.internal.processors.cache.mvcc.MvccUtils.tx(MvccUtils.java:690)
at
org.apache.ignite.internal.processors.cache.mvcc.MvccUtils.tx(MvccUtils.java:671)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.runQueryTwoStep(IgniteH2Indexing.java:1793)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.doRunDistributedQuery(IgniteH2Indexing.java:2610)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.doRunPrepared(IgniteH2Indexing.java:2315)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:2209)
at
org.apache.ignite.internal.processors.query.GridQueryProcessor$4.applyx(GridQueryProcessor.java:2135)
at
org.apache.ignite.internal.processors.query.GridQueryProcessor$4.applyx(GridQueryProcessor.java:2130)
at
org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
at
org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:2707)
at
org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2144)
at
org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:685)
... 10 more
```
Enviroment: JDK 1.8, Apache Ignite 2.7 (clear install, persistence mode, 3
nodes). Apache Ignite Client 2.7 from maven:
<ignite.version>2.7.0</ignite.version>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-core</artifactId>
<version>${ignite.version}</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-indexing</artifactId>
<version>${ignite.version}</version>
</dependency>
Cache configuration:
CacheConfiguration<K, V> cfg = new CacheConfiguration<>();
cfg.setBackups(backupsCount);
cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
Transaction configuration:
TransactionConfiguration txCfg = new TransactionConfiguration();
txCfg.setDefaultTxConcurrency(TransactionConcurrency.OPTIMISTIC);
txCfg.setDefaultTxIsolation(TransactionIsolation.SERIALIZABLE);
cfg.setTransactionConfiguration(txCfg);
And second exception from nodes, when i try to read persisted value from
cache (set transaction mode to pessimistic repetable).
```
[15:33:46,990][SEVERE][query-#278][GridMapQueryExecutor] Failed to execute
local query.
class org.apache.ignite.IgniteCheckedException: Failed to execute SQL
query. Внутренняя ошибка: "class
org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
Runtime failure on bounds: [lower=RowSimple [vals=[null, null, null, null,
null, null, null, 'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]],
upper=RowSimple [vals=[null, null, null, null, null, null, null,
'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]]]"
General error: "class
org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
Runtime failure on bounds: [lower=RowSimple [vals=[null, null, null, null,
null, null, null, 'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]],
upper=RowSimple [vals=[null, null, null, null, null, null, null,
'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]]]"; SQL statement:
SELECT
"HumanName".__Z0._KEY __C0_0,
"HumanName".__Z0._VAL __C0_1
FROM "HumanName".HUMANNAMEMODEL __Z0
WHERE (__Z0.PARENTID = ?1) AND (__Z0.VERSION = ?2) [50000-197]
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:1428)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQueryWithTimer(IgniteH2Indexing.java:1489)
at
org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onQueryRequest0(GridMapQueryExecutor.java:930)
at
org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onQueryRequest(GridMapQueryExecutor.java:705)
at
org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onMessage(GridMapQueryExecutor.java:240)
at
org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor$2.onMessage(GridMapQueryExecutor.java:200)
at
org.apache.ignite.internal.managers.communication.GridIoManager$ArrayListener.onMessage(GridIoManager.java:2349)
at
org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1569)
at
org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1197)
at
org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:127)
at
org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1093)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.h2.jdbc.JdbcSQLException: Внутренняя ошибка: "class
org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
Runtime failure on bounds: [lower=RowSimple [vals=[null, null, null, null,
null, null, null, 'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]],
upper=RowSimple [vals=[null, null, null, null, null, null, null,
'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]]]"
General error: "class
org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
Runtime failure on bounds: [lower=RowSimple [vals=[null, null, null, null,
null, null, null, 'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]],
upper=RowSimple [vals=[null, null, null, null, null, null, null,
'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]]]"; SQL statement:
SELECT
"HumanName".__Z0._KEY __C0_0,
"HumanName".__Z0._VAL __C0_1
FROM "HumanName".HUMANNAMEMODEL __Z0
WHERE (__Z0.PARENTID = ?1) AND (__Z0.VERSION = ?2) [50000-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
at org.h2.message.DbException.get(DbException.java:168)
at org.h2.message.DbException.convert(DbException.java:307)
at
org.apache.ignite.internal.processors.query.h2.database.H2TreeIndex.find(H2TreeIndex.java:263)
at org.h2.index.BaseIndex.find(BaseIndex.java:130)
at org.h2.index.IndexCursor.find(IndexCursor.java:176)
at org.h2.table.TableFilter.next(TableFilter.java:471)
at
org.h2.command.dml.Select$LazyResultQueryFlat.fetchNextRow(Select.java:1452)
at org.h2.result.LazyResult.hasNext(LazyResult.java:79)
at org.h2.result.LazyResult.next(LazyResult.java:59)
at org.h2.command.dml.Select.queryFlat(Select.java:527)
at org.h2.command.dml.Select.queryWithoutCache(Select.java:633)
at org.h2.command.dml.Query.queryWithoutCacheLazyCheck(Query.java:114)
at org.h2.command.dml.Query.query(Query.java:352)
at org.h2.command.dml.Query.query(Query.java:333)
at org.h2.command.CommandContainer.query(CommandContainer.java:114)
at org.h2.command.Command.executeQuery(Command.java:202)
at
org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:114)
at
org.apache.ignite.internal.processors.query.h2.PreparedStatementExImpl.executeQuery(PreparedStatementExImpl.java:67)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:1421)
... 13 more
Caused by: class
org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
Runtime failure on bounds: [lower=RowSimple [vals=[null, null, null, null,
null, null, null, 'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]],
upper=RowSimple [vals=[null, null, null, null, null, null, null,
'e3f070fa-7888-4fbb-baac-a02d5338e217', 1]]]
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.find(BPlusTree.java:1013)
at
org.apache.ignite.internal.processors.query.h2.database.H2TreeIndex.find(H2TreeIndex.java:258)
... 29 more
Caused by: org.h2.message.DbException: Ошибка десериализации, причина:
"class org.apache.ignite.IgniteCheckedException: Not enough data to read
the value [position=1, requiredBytes=8, remainingBytes=6]"
Deserialization failed, cause: "class
org.apache.ignite.IgniteCheckedException: Not enough data to read the value
[position=1, requiredBytes=8, remainingBytes=6]" [90027-197]
at org.h2.message.DbException.get(DbException.java:168)
at org.h2.util.JdbcUtils.deserialize(JdbcUtils.java:423)
at org.h2.value.Value.convertTo(Value.java:1006)
at org.h2.value.Value.convertTo(Value.java:617)
at org.h2.value.Value.convertTo(Value.java:592)
at org.h2.table.Table.compareTypeSafe(Table.java:1186)
at
org.apache.ignite.internal.processors.query.h2.database.H2TreeIndex$1.compareValues(H2TreeIndex.java:181)
at
org.apache.ignite.internal.processors.query.h2.database.H2Tree$1.compare(H2Tree.java:92)
at
org.apache.ignite.internal.processors.query.h2.database.H2Tree$1.compare(H2Tree.java:90)
at
org.apache.ignite.internal.processors.query.h2.database.InlineIndexHelper.compare(InlineIndexHelper.java:381)
at
org.apache.ignite.internal.processors.query.h2.database.H2Tree.compare(H2Tree.java:306)
at
org.apache.ignite.internal.processors.query.h2.database.H2Tree.compare(H2Tree.java:55)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.compare(BPlusTree.java:5105)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.findInsertionPoint(BPlusTree.java:5025)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.access$1300(BPlusTree.java:90)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Search.run0(BPlusTree.java:291)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$GetPageHandler.run(BPlusTree.java:5615)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Search.run(BPlusTree.java:271)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$GetPageHandler.run(BPlusTree.java:5600)
at
org.apache.ignite.internal.processors.cache.persistence.tree.util.PageHandler.readPage(PageHandler.java:159)
at
org.apache.ignite.internal.processors.cache.persistence.DataStructure.read(DataStructure.java:334)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.findDown(BPlusTree.java:1309)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.doFind(BPlusTree.java:1276)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.access$8700(BPlusTree.java:90)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$AbstractForwardCursor.find(BPlusTree.java:5289)
at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.find(BPlusTree.java:1005)
... 30 more
Caused by: org.h2.jdbc.JdbcSQLException: Ошибка десериализации, причина:
"class org.apache.ignite.IgniteCheckedException: Not enough data to read
the value [position=1, requiredBytes=8, remainingBytes=6]"
Deserialization failed, cause: "class
org.apache.ignite.IgniteCheckedException: Not enough data to read the value
[position=1, requiredBytes=8, remainingBytes=6]" [90027-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
... 56 more
Caused by: class org.apache.ignite.IgniteCheckedException: Not enough data
to read the value [position=1, requiredBytes=8, remainingBytes=6]
at
org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:10146)
at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$15.deserialize(IgniteH2Indexing.java:3417)
at org.h2.util.JdbcUtils.deserialize(JdbcUtils.java:401)
... 54 more
Caused by: class org.apache.ignite.binary.BinaryObjectException: Not enough
data to read the value [position=1, requiredBytes=8, remainingBytes=6]
at
org.apache.ignite.internal.binary.streams.BinaryAbstractInputStream.ensureEnoughData(BinaryAbstractInputStream.java:305)
at
org.apache.ignite.internal.binary.streams.BinaryAbstractInputStream.readLong(BinaryAbstractInputStream.java:214)
at
org.apache.ignite.internal.binary.BinaryUtils.doReadUuid(BinaryUtils.java:1305)
at
org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1821)
at
org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716)
at
org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(GridBinaryMarshaller.java:313)
at
org.apache.ignite.internal.binary.BinaryMarshaller.unmarshal0(BinaryMarshaller.java:102)
at
org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:82)
at
org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:10140)
... 56 more
```
Entity class:
public abstract class GenericChildModel<T extends Serializable, P
extends Serializable> implements Serializable {
transient protected T id;
protected transient AffinityKey<T> key;
@QuerySqlField(notNull = true, orderedGroups =
{@QuerySqlField.Group(name = "parent_version_idx", order = 0)})
protected P parentId;
@QuerySqlField(notNull = true, orderedGroups =
{@QuerySqlField.Group(name = "parent_version_idx", order = 1,
descending = true)})
protected Long version;
transient protected P colocationId;
public AffinityKey<T> key() {
if (key == null)
key = new AffinityKey<>(id, colocationId);
return key;
}
public class HumanNameModel extends GenericChildModel<UUID, UUID> {
@QuerySqlField
private Byte use;
@QuerySqlField(notNull = true, orderedGroups =
{@QuerySqlField.Group(name = "fullname_idx", order = 0)})
@NotNull
@Name
private String family;
@QuerySqlField(orderedGroups = {@QuerySqlField.Group(name =
"fullname_idx", order = 1)})
@Name
private String firstName;
@QuerySqlField(index = true, orderedGroups =
{@QuerySqlField.Group(name = "fullname_idx", order = 2)})
@Name
private String patronymic;