[
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