[jira] [Commented] (IGNITE-4363) Inner properties mutation broken in SQL UPDATE
[ https://issues.apache.org/jira/browse/IGNITE-4363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15851381#comment-15851381 ] Alexander Paschenko commented on IGNITE-4363: - [~vozerov] merged, TC is on the run. > Inner properties mutation broken in SQL UPDATE > -- > > Key: IGNITE-4363 > URL: https://issues.apache.org/jira/browse/IGNITE-4363 > Project: Ignite > Issue Type: Bug > Components: binary, SQL >Affects Versions: 1.8 >Reporter: Alexander Paschenko >Assignee: Alexander Paschenko > Fix For: 1.9 > > > Discovered in course of working on IGNITE-4340. > Say, we have following type for cache values > {code:java} > static final class AllTypes implements Serializable { > /** > * Data Long. > */ > @QuerySqlField > Long longCol; > /** > * Inner type object. > */ > @QuerySqlField > InnerType innerTypeCol; > /** */ > static final class InnerType implements Serializable { > /** */ > @QuerySqlField > Long innerLongCol; > /** */ > @QuerySqlField > String innerStrCol; >} > } > {code} > Queries like this fail for both optimized and binary marshaller: > {code:sql} > UPDATE AllTypes set innerLongCol = ? > {code} > For optimized, current DML implementation mutates existing inner property > thus confusing DML statements re-run logic (query re-runs because engine sees > value as concurrently modified, though the only change is its own, and > ultimately fails). The solution is to clone inner objects and set new > property values on them because we need to have old value pristine. > For binary, current DML implementation does not honor properties hierarchy > and, for above example, just sets {{innerLongCol}} field on {{AllTypes}} > binary object and not its child {{InnerType}} object. Thus, index will be > updated and SELECTs for that column will return correct value for that field, > but inner state of target property {{innerTypeCol}} does not change, and > {{AllTypes}} object gets its own odd field {{innerLongCol}} which it does not > know how to do with (no metadata about it in type descriptor). > The patch for both problems is ready and lying on my shelf waiting for 1.8 > release to happen to be applied. Then this will ultimately be fixed with the > rest of known problems/improvements (Jira issues for them will follow). -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (IGNITE-4363) Inner properties mutation broken in SQL UPDATE
[ https://issues.apache.org/jira/browse/IGNITE-4363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15780519#comment-15780519 ] Alexander Paschenko commented on IGNITE-4363: - [~vozerov] TC looks fine to me, all tests that have failed appear to be flaky ones. > Inner properties mutation broken in SQL UPDATE > -- > > Key: IGNITE-4363 > URL: https://issues.apache.org/jira/browse/IGNITE-4363 > Project: Ignite > Issue Type: Bug > Components: binary, SQL >Affects Versions: 1.8 >Reporter: Alexander Paschenko >Assignee: Alexander Paschenko > Fix For: 2.0 > > > Discovered in course of working on IGNITE-4340. > Say, we have following type for cache values > {code:java} > static final class AllTypes implements Serializable { > /** > * Data Long. > */ > @QuerySqlField > Long longCol; > /** > * Inner type object. > */ > @QuerySqlField > InnerType innerTypeCol; > /** */ > static final class InnerType implements Serializable { > /** */ > @QuerySqlField > Long innerLongCol; > /** */ > @QuerySqlField > String innerStrCol; >} > } > {code} > Queries like this fail for both optimized and binary marshaller: > {code:sql} > UPDATE AllTypes set innerLongCol = ? > {code} > For optimized, current DML implementation mutates existing inner property > thus confusing DML statements re-run logic (query re-runs because engine sees > value as concurrently modified, though the only change is its own, and > ultimately fails). The solution is to clone inner objects and set new > property values on them because we need to have old value pristine. > For binary, current DML implementation does not honor properties hierarchy > and, for above example, just sets {{innerLongCol}} field on {{AllTypes}} > binary object and not its child {{InnerType}} object. Thus, index will be > updated and SELECTs for that column will return correct value for that field, > but inner state of target property {{innerTypeCol}} does not change, and > {{AllTypes}} object gets its own odd field {{innerLongCol}} which it does not > know how to do with (no metadata about it in type descriptor). > The patch for both problems is ready and lying on my shelf waiting for 1.8 > release to happen to be applied. Then this will ultimately be fixed with the > rest of known problems/improvements (Jira issues for them will follow). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Commented] (IGNITE-4363) Inner properties mutation broken in SQL UPDATE
[ https://issues.apache.org/jira/browse/IGNITE-4363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15778493#comment-15778493 ] Vladimir Ozerov commented on IGNITE-4363: - Alex, I re-merged the ticket with master. Please confirm status of TC. > Inner properties mutation broken in SQL UPDATE > -- > > Key: IGNITE-4363 > URL: https://issues.apache.org/jira/browse/IGNITE-4363 > Project: Ignite > Issue Type: Bug > Components: binary, SQL >Affects Versions: 1.8 >Reporter: Alexander Paschenko >Assignee: Vladimir Ozerov > Fix For: 2.0 > > > Discovered in course of working on IGNITE-4340. > Say, we have following type for cache values > {code:java} > static final class AllTypes implements Serializable { > /** > * Data Long. > */ > @QuerySqlField > Long longCol; > /** > * Inner type object. > */ > @QuerySqlField > InnerType innerTypeCol; > /** */ > static final class InnerType implements Serializable { > /** */ > @QuerySqlField > Long innerLongCol; > /** */ > @QuerySqlField > String innerStrCol; >} > } > {code} > Queries like this fail for both optimized and binary marshaller: > {code:sql} > UPDATE AllTypes set innerLongCol = ? > {code} > For optimized, current DML implementation mutates existing inner property > thus confusing DML statements re-run logic (query re-runs because engine sees > value as concurrently modified, though the only change is its own, and > ultimately fails). The solution is to clone inner objects and set new > property values on them because we need to have old value pristine. > For binary, current DML implementation does not honor properties hierarchy > and, for above example, just sets {{innerLongCol}} field on {{AllTypes}} > binary object and not its child {{InnerType}} object. Thus, index will be > updated and SELECTs for that column will return correct value for that field, > but inner state of target property {{innerTypeCol}} does not change, and > {{AllTypes}} object gets its own odd field {{innerLongCol}} which it does not > know how to do with (no metadata about it in type descriptor). > The patch for both problems is ready and lying on my shelf waiting for 1.8 > release to happen to be applied. Then this will ultimately be fixed with the > rest of known problems/improvements (Jira issues for them will follow). -- This message was sent by Atlassian JIRA (v6.3.4#6332)