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

Hudson commented on TAJO-95:
----------------------------

SUCCESS: Integrated in Tajo-trunk-postcommit #327 (See 
[https://builds.apache.org/job/Tajo-trunk-postcommit/327/])
TAJO-95: Eliminate the lazy copy approach from the classes wrapping 
protobuf-generated classes. (hyunsik) (hyunsik: 
https://git-wip-us.apache.org/repos/asf?p=incubator-tajo.git&a=commit&h=1c677cc5cc5353177879af157f3bf19a0a1fe1d3)
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/AggFuncCallEval.java
* tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java
* tajo-common/src/main/java/org/apache/tajo/json/GsonHelper.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/PathSerializer.java
* tajo-common/src/main/java/org/apache/tajo/json/GsonObject.java
* tajo-common/src/main/java/org/apache/tajo/gson/ClassNameSerializer.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/statistics/TableStat.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/GlobalEngine.java
* tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java
* 
tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/statistics/TestStatSet.java
* 
tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/statistics/TestColumnStat.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/BinaryNode.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/statistics/StatSet.java
* tajo-common/src/main/java/org/apache/tajo/gson/ClassNameDeserializer.java
* tajo-common/src/main/java/org/apache/tajo/json/CommonGsonHelper.java
* tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/GsonCreator.java
* tajo-common/src/main/java/org/apache/tajo/json/DatumTypeAdapter.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Options.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FragmentDeserializer.java
* 
tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/statistics/TestTableStat.java
* tajo-common/src/main/java/org/apache/tajo/json/PathDeserializer.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/FromTableDeserializer.java
* tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/CSVFile.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableMeta.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Schema.java
* tajo-common/src/main/java/org/apache/tajo/json/GsonSerDerAdapter.java
* 
tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/rcfile/RCFileWrapper.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/TableMetaAdapter.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/EvalExprNode.java
* tajo-common/src/main/java/org/apache/tajo/gson/PathSerializer.java
* tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
* 
tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/master/TestRepartitioner.java
* tajo-common/src/main/java/org/apache/tajo/util/TUtil.java
* 
tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/statistics/TestTableStat.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/FunctionAdapter.java
* tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/util/IndexUtil.java
* tajo-common/src/main/java/org/apache/tajo/datum/Datum.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LimitNode.java
* 
tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
* tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RawFile.java
* tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableMetaImpl.java
* 
tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/StoreTableNode.java
* 
tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/statistics/TestColumnStat.java
* tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SortSpec.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/CatalogGsonHelper.java
* tajo-common/src/main/java/org/apache/tajo/QueryUnitId.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/query/QueryUnitRequestImpl.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/JoinNode.java
* 
tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestFunctionDesc.java
* 
tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/json/StorageGsonHelper.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/ConstEval.java
* tajo-common/src/main/java/org/apache/tajo/gson/DataTypeAdapter.java
* tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java
* tajo-common/src/main/java/org/apache/tajo/common/ProtoObject.java
* tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/TestTajoIds.java
* tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/TestQueryUnitId.java
* tajo-common/src/main/java/org/apache/tajo/datum/BooleanDatum.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/FromTable.java
* 
tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/worker/TaskRunnerTest.java
* 
tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestTableMeta.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ExceptNode.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/DropTableNode.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IntersectNode.java
* 
tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/Fragment.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/ReceiveNode.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SelectionNode.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncEval.java
* tajo-common/src/main/java/org/apache/tajo/datum/BitDatum.java
* tajo-common/src/main/java/org/apache/tajo/datum/json/DatumAdapter.java
* tajo-common/src/main/java/org/apache/tajo/gson/PathDeserializer.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/PathDeserializer.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/GsonCreator.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalNode.java
* tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/worker/Task.java
* tajo-common/src/main/java/org/apache/tajo/datum/BlobDatum.java
* tajo-common/src/main/java/org/apache/tajo/gson/DatumTypeAdapter.java
* 
tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/TupleComparator.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/GeneralFunction.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/BinaryEval.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/AggFunction.java
* tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
* CHANGES.txt
* tajo-common/src/main/java/org/apache/tajo/QueryUnitAttemptId.java
* 
tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/json/FragmentDeserializer.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/LogicalNodeAdapter.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/json/TableDescAdapter.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnionNode.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableDesc.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/statistics/ColumnStat.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/function/Function.java
* 
tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestSchema.java
* 
tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ProjectionNode.java
* tajo-common/src/main/java/org/apache/tajo/datum/Inet4Datum.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/extended/SendNode.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/IndexDesc.java
* tajo-common/src/main/java/org/apache/tajo/datum/ArrayDatum.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FuncCallEval.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TableDescImpl.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java
* 
tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/json/GsonCreator.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/CreateTableNode.java
* tajo-core/tajo-core-storage/src/main/java/org/apache/tajo/storage/RowFile.java
* 
tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestTableDesc.java
* tajo-common/src/main/java/org/apache/tajo/json/PathSerializer.java
* 
tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/storage/TestFragment.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/IndexScanNode.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/CaseWhenEval.java
* tajo-common/src/main/java/org/apache/tajo/json/DataTypeAdapter.java
* tajo-common/src/main/java/org/apache/tajo/json/ClassNameDeserializer.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/worker/TaskRunner.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/TaskSchedulerImpl.java
* tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalNode.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/json/EvalNodeAdapter.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/LogicalRootNode.java
* tajo-common/src/main/java/org/apache/tajo/json/ClassNameSerializer.java
* tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
* tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java
* 
tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/FunctionDesc.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/UnaryNode.java
* tajo-common/src/main/java/org/apache/tajo/datum/json/GsonCreator.java
* 
tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestColumn.java
* tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
* 
tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/statistics/TestStatisticsUtil.java
* 
tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/Target.java

                
> Eliminate the lazy copy approach from the classes wrapping protobuf-generated 
> classes.
> --------------------------------------------------------------------------------------
>
>                 Key: TAJO-95
>                 URL: https://issues.apache.org/jira/browse/TAJO-95
>             Project: Tajo
>          Issue Type: Improvement
>            Reporter: Hyunsik Choi
>            Assignee: Hyunsik Choi
>            Priority: Blocker
>             Fix For: 0.2-incubating
>
>         Attachments: TAJO-95_2.patch, TAJO-95_3.patch, TAJO-95.patch
>
>
> We have used two (de)serialization methods, such as JSON and Protocol Buffer. 
> In a (de) serializable object, each attribute can be placed on the  
> corresponding member variable or the member variable of the protocol buffer 
> object.
> For reducing the frequency of data copies, we have used the laze copy 
> approach that delays copying values from the contents of PB object to member 
> variables or vice versa. It is similar to copy-on-wrote (COW).
> In many cases, however, this mechanism is actually burden rather than the 
> performance benefit like the below code. Especially, this problem becomes 
> more complicated if the wrapper class can be (de)serialized via both JSON and 
> protocol buffer.
> {code:title=a getter method based on the lazy copy approach}
>   protected TableDescProto proto = TableDescProto.getDefaultInstance();
>   protected TableDescProto.Builder builder = null;
>   protected boolean viaProto = false;
>   
>   @Expose protected String tableId;
>   @Expose protected Path uri;
>   @Expose protected TableMeta meta;
>    
>   .
>   .
>   public String getId() { // <- even a simple getter becomes very complicated.
>     TableDescProtoOrBuilder p = viaProto ? proto : builder;
>     
>     if (tableId != null) {
>       return this.tableId;
>     }
>     if (!p.hasId()) {
>       return null;
>     }
>     this.tableId = p.getId();
>     
>     return this.tableId;
>   }
> {code}
> Therefore, I would like to propose the simplification of wrapper classes by 
> eliminating the laze copy approach. My proposal is as follows:
>  * A wrapper class only keeps values in member variables when it is created.
>  * A wrapper class only builds the corresponding protobuf object when 
> getProto() is called.
> I think that the performance benefit has been very low. We should remove the 
> lazy copy approach for more robust system.

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