[ 
https://issues.apache.org/jira/browse/TAJO-92?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13722128#comment-13722128
 ] 

Hyunsik Choi commented on TAJO-92:
----------------------------------

Henry,

We use GSON as JSON (de)serialization frameowork. In order to serialize an 
object to a JSON document, all attributes should be stored in member variables 
of an object. But, some objects are designed to be (de)serialized to both JSON 
and Protocol buffer type objects. For protocol buffer, we use the lazy copy 
approach (see TAJO-95). Actually, this approach looks efficiency, but error 
prone. This bug (TAJO-92) is an example case of that.
                
> LogicalNode misses some fields when it converts to json
> -------------------------------------------------------
>
>                 Key: TAJO-92
>                 URL: https://issues.apache.org/jira/browse/TAJO-92
>             Project: Tajo
>          Issue Type: Bug
>          Components: optimizer
>            Reporter: hyoungjunkim
>         Attachments: TAJO-92_TEST.patch
>
>
> See title. The below code reproduces the error
> {code}
>     PlanningContext context = analyzer.parse(
>             "select table0.age, count(*) as count_age from table0 group by 
> table0.age");
>     LogicalNode plan = logicalPlanner.createPlan(context);
>     plan = LogicalOptimizer.optimize(context, plan);
>     String planJSON = plan.toJSON();
>     LogicalNode planFromJSON = GsonCreator.getInstance().fromJson(planJSON, 
> LogicalNode.class);
>     MasterPlan globalPlan = planner.build(queryId, (LogicalRootNode) 
> planFromJSON);
> {code}
> {noformat}
> com.google.protobuf.UninitializedMessageException: Message missing required 
> fields: type
>       at 
> com.google.protobuf.AbstractMessage$Builder.newUninitializedMessageException(AbstractMessage.java:605)
>       at 
> org.apache.tajo.catalog.proto.CatalogProtos$FunctionDescProto$Builder.build(CatalogProtos.java:6999)
>       at 
> org.apache.tajo.catalog.FunctionDesc.mergeLocalToProto(FunctionDesc.java:231)
>       at org.apache.tajo.catalog.FunctionDesc.getProto(FunctionDesc.java:193)
>       at org.apache.tajo.catalog.FunctionDesc.equals(FunctionDesc.java:168)
>       at org.apache.tajo.util.TUtil.checkEquals(TUtil.java:44)
>       at org.apache.tajo.engine.eval.FuncEval.equals(FuncEval.java:93)
>       at 
> org.apache.tajo.engine.planner.PlannerUtil.transformGroupbyTo2P(PlannerUtil.java:196)
>       at 
> org.apache.tajo.engine.planner.PlannerUtil.transformGroupbyTo2PWithStore(PlannerUtil.java:242)
>       at 
> org.apache.tajo.master.GlobalPlanner$GlobalPlanBuilder.visit(GlobalPlanner.java:136)
>       at 
> org.apache.tajo.engine.planner.logical.UnaryNode.postOrder(UnaryNode.java:66)
>       at 
> org.apache.tajo.engine.planner.logical.UnaryNode.postOrder(UnaryNode.java:65)
>       at 
> org.apache.tajo.engine.planner.logical.UnaryNode.postOrder(UnaryNode.java:65)
>       at 
> org.apache.tajo.master.GlobalPlanner.convertTo2Phase(GlobalPlanner.java:279)
>       at org.apache.tajo.master.GlobalPlanner.build(GlobalPlanner.java:99)
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to