Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-10635

UUID assigned to Object or generic field in POJO, MVCC fails to deserialize

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 2.7
    • None
    • None
    • None
    • Ignite 2.7. JDK 1.8, Linux Mint

    • Docs Required

    Description

      Can't select row with uuid predicate:

      SELECT PARENTID FROM "HumanName".HUMANNAMEMODEL WHERE PARENTID = 'e3f070fa78884fbbbaaca02d5338e217';

       

      Error: javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: Ошибка десериализации, причина: "class org.apache.ignite.IgniteCheckedException: Invalid flag value: -29"
      Deserialization failed, cause: "class org.apache.ignite.IgniteCheckedException: Invalid flag value: -29" [90027-197] (state=50000,code=1)
      java.sql.SQLException: javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: Ошибка десериализации, причина: "class org.apache.ignite.IgniteCheckedException: Invalid flag value: -29"
      Deserialization failed, cause: "class org.apache.ignite.IgniteCheckedException: Invalid flag value: -29" [90027-197]
      at org.apache.ignite.internal.jdbc.thin.JdbcThinConnection.sendRequest(JdbcThinConnection.java:750)
      at org.apache.ignite.internal.jdbc.thin.JdbcThinStatement.execute0(JdbcThinStatement.java:212)
      at org.apache.ignite.internal.jdbc.thin.JdbcThinStatement.execute(JdbcThinStatement.java:475)
      at sqlline.Commands.execute(Commands.java:823)
      at sqlline.Commands.sql(Commands.java:733)
      at sqlline.SqlLine.dispatch(SqlLine.java:795)
      at sqlline.SqlLine.begin(SqlLine.java:668)
      at sqlline.SqlLine.start(SqlLine.java:373)
      at sqlline.SqlLine.main(SqlLine.java:265)
      
      

      Classes:

      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 T getId() {
              return id;
          }
      
          public void setId(T id) {
              this.id = id;
          }
      
          public P getParentId() {
              return parentId;
          }
      
          public void setParentId(P parentId) {
              this.parentId = parentId;
          }
      
          public Long getVersion() {
              return version;
          }
      
          public void setVersion(Long version) {
              this.version = version;
          }
      
          public P getColocationId() {
              return colocationId;
          }
      
          public void setColocationId(P colocationId) {
              this.colocationId = colocationId;
          }
      
          public AffinityKey<T> key() {
              if (key == null)
                  key = new AffinityKey<>(id, colocationId);
              return key;
          }
      
      .... 
      
      public class HumanNameModel extends GenericChildModel<UUID, UUID> {
          public static final String[] HUMAN_NAME_USE = {"usual", "official", "temp", "nickname", "anonymous", "old", "maiden"};
      
          @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;
      
          public HumanNameModel() {
      
          }
      ...
       
      CacheConfiguration<UUID, HumanName> cfg = new CacheConfiguration<>(); 
      cfg.setBackups(1);
      cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); 
      cfg.setName("HumanName"); 
      cfg.setIndexedTypes(AffinityKey.class, HumanNameModel.class); 
      ignite.getOrCreateCache(cfg);
      

       

      I think, the problem in "column_size", because if I recreate field "ParentID" from sql (sqlline) it works fine (recreated.png) 

       

      PS. Added project to reproduce error (testproj.zip).  

      Attachments

        1. testproj.zip
          25 kB
          Andrey
        2. recreated.png
          40 kB
          Andrey
        3. error.png
          88 kB
          Andrey

        Issue Links

          Activity

            People

              Unassigned Unassigned
              xtron Andrey
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated: