abdullah alamoudi has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/900
Change subject: Optionally log image before when before image found in memory component ...................................................................... Optionally log image before when before image found in memory component Change-Id: Iaaed48f4c2ca8d83253e81cd7c60aad998b67b1e --- M asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixPropertiesAccessor.java M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/AsterixLSMInsertDeleteOperatorNodePushable.java M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILogRecord.java M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java M asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/AbstractIndexModificationOperationCallback.java M asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallback.java M asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallbackFactory.java M asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java M asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallback.java M asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallbackFactory.java M asterixdb/pom.xml M hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/SimpleTupleWriter.java D hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/SimpleTupleWriterFactory.java M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java 16 files changed, 590 insertions(+), 546 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/00/900/1 diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml index 0b19e22..d2400b3 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml @@ -28,6 +28,454 @@ ResultOffsetPath="results" QueryOffsetPath="queries" QueryFileExtension=".aql"> + <test-group name="dml"> + <test-case FilePath="dml"> + <compilation-unit name="delete-syntax-change"> + <output-dir compare="Text">delete-syntax-change</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-dataset-with-meta"> + <output-dir compare="Text">insert-dataset-with-meta</output-dir> + <expected-error>insert into dataset is not supported on Datasets with Meta records</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="delete-dataset-with-meta"> + <output-dir compare="Text">delete-dataset-with-meta</output-dir> + <expected-error>delete from dataset is not supported on Datasets with Meta records</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="upsert-dataset-with-meta"> + <output-dir compare="Text">upsert-dataset-with-meta</output-dir> + <expected-error>upsert into dataset is not supported on Datasets with Meta records</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-ngram-index"> + <output-dir compare="Text">load-with-ngram-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-duplicated-keys-from-query"> + <output-dir compare="Text">insert-duplicated-keys-from-query</output-dir> + <expected-error>org.apache.hyracks.storage.am.common.exceptions.TreeIndexDuplicateKeyException: Failed to insert key since key already exists</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="compact-dataset-and-its-indexes"> + <output-dir compare="Text">compact-dataset-and-its-indexes</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="using-constant-merge-policy"> + <output-dir compare="Text">using-constant-merge-policy</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="using-prefix-merge-policy"> + <output-dir compare="Text">using-prefix-merge-policy</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="using-correlated-prefix-merge-policy"> + <output-dir compare="Text">using-correlated-prefix-merge-policy</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="using-no-merge-policy"> + <output-dir compare="Text">using-no-merge-policy</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="query-issue382"> + <output-dir compare="Text">query-issue382</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="query-issue433"> + <output-dir compare="Text">query-issue433</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="query-issue288"> + <output-dir compare="Text">query-issue288</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="query-issue205"> + <output-dir compare="Text">query-issue205</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="delete-from-loaded-dataset-with-index"> + <output-dir compare="Text">delete-from-loaded-dataset-with-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="delete-from-loaded-dataset"> + <output-dir compare="Text">delete-from-loaded-dataset</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="drop-empty-secondary-indexes"> + <output-dir compare="Text">drop-empty-secondary-indexes</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="drop-index"> + <output-dir compare="Text">drop-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="create-drop-cltype"> + <output-dir compare="Text">create-drop-cltype</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="create-drop-opntype"> + <output-dir compare="Text">create-drop-opntype</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="empty-load-with-index"> + <output-dir compare="Text">empty-load-with-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-into-empty-dataset"> + <output-dir compare="Text">insert-into-empty-dataset</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-into-empty-dataset-with-index"> + <output-dir compare="Text">insert-into-empty-dataset-with-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-syntax"> + <output-dir compare="Text">insert-syntax</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-and-scan-dataset"> + <output-dir compare="Text">insert-and-scan-dataset</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-and-scan-dataset-with-index"> + <output-dir compare="Text">insert-and-scan-dataset-with-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-and-scan-joined-datasets"> + <output-dir compare="Text">insert-and-scan-joined-datasets</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-into-loaded-dataset-with-index_01"> + <output-dir compare="Text">insert-into-loaded-dataset-with-index_01</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-into-loaded-dataset-with-index_02"> + <output-dir compare="Text">insert-into-loaded-dataset-with-index_02</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-into-loaded-dataset_01"> + <output-dir compare="Text">insert-into-loaded-dataset_01</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-into-loaded-dataset_02"> + <output-dir compare="Text">insert-into-loaded-dataset_02</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-src-dst-01"> + <output-dir compare="Text">insert-src-dst-01</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert"> + <output-dir compare="Text">insert</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-duplicated-keys"> + <output-dir compare="Text">insert-duplicated-keys</output-dir> + <expected-error>org.apache.hyracks.storage.am.common.exceptions.TreeIndexDuplicateKeyException: Failed to insert key since key already exists</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert_less_nc"> + <output-dir compare="Text">insert_less_nc</output-dir> + </compilation-unit> + </test-case> + <!-- + <test-case FilePath="dml"> + <compilation-unit name="load-from-hdfs"> + <output-dir compare="Text">load-from-hdfs</output-dir> + </compilation-unit> + </test-case> + --> + <test-case FilePath="dml"> + <compilation-unit name="insert-with-autogenerated-pk_adm_01"> + <output-dir compare="Text">insert-with-autogenerated-pk_adm_01</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-with-autogenerated-pk_adm_02"> + <output-dir compare="Text">insert-with-autogenerated-pk_adm_02</output-dir> + <expected-error>org.apache.hyracks.algebricks.common.exceptions.AlgebricksException: Duplicate field id encountered</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="insert-with-autogenerated-pk_adm_03"> + <output-dir compare="Text">insert-with-autogenerated-pk_adm_03</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-autogenerated-pk_txt_01"> + <output-dir compare="Text">load-with-autogenerated-pk_txt_01</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-autogenerated-pk_adm_01"> + <output-dir compare="Text">load-with-autogenerated-pk_adm_01</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-autogenerated-pk_adm_02"> + <output-dir compare="Text">load-with-autogenerated-pk_adm_02</output-dir> + <expected-error>org.apache.asterix.external.parser.ADMDataParser$ParseException</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-autogenerated-pk_adm_03"> + <output-dir compare="Text">load-with-autogenerated-pk_adm_03</output-dir> + <expected-error>org.apache.asterix.external.parser.ADMDataParser$ParseException</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-autogenerated-pk_adm_04"> + <output-dir compare="Text">load-with-autogenerated-pk_adm_04</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-autogenerated-pk_csv_01"> + <output-dir compare="Text">load-with-autogenerated-pk_csv_01</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-autogenerated-pk_csv_02"><!-- Right now, this only throw exception on expected result!!! --> + <output-dir compare="Text">load-with-autogenerated-pk_csv_02</output-dir> + <expected-error>java.lang.Exception: Result</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-index"> + <output-dir compare="Text">load-with-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-rtree-index"> + <output-dir compare="Text">load-with-rtree-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-word-index"> + <output-dir compare="Text">load-with-word-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="opentype-c2o-recursive"> + <output-dir compare="Text">opentype-c2o-recursive</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="opentype-c2o"> + <output-dir compare="Text">opentype-c2o</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="opentype-closed-optional"> + <output-dir compare="Text">opentype-closed-optional</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="opentype-insert"> + <output-dir compare="Text">opentype-insert</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="opentype-insert2"> + <output-dir compare="Text">opentype-insert2</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="opentype-noexpand"> + <output-dir compare="Text">opentype-noexpand</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="opentype-o2c-recursive"> + <output-dir compare="Text">opentype-o2c-recursive</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="opentype-o2c"> + <output-dir compare="Text">opentype-o2c</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="opentype-o2o"> + <output-dir compare="Text">opentype-o2o</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-btree-secondary-index-nullable"> + <output-dir compare="Text">scan-delete-btree-secondary-index-nullable</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-rtree-secondary-index-nullable"> + <output-dir compare="Text">scan-delete-rtree-secondary-index-nullable</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-rtree-secondary-index"> + <output-dir compare="Text">scan-delete-rtree-secondary-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-btree-secondary-index-nullable"> + <output-dir compare="Text">scan-insert-btree-secondary-index-nullable</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-rtree-secondary-index-nullable"> + <output-dir compare="Text">scan-insert-rtree-secondary-index-nullable</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-rtree-secondary-index"> + <output-dir compare="Text">scan-insert-rtree-secondary-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index"> + <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-inverted-index-word-secondary-index"> + <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index-nullable"> + <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index-nullable</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-inverted-index-word-secondary-index-nullable"> + <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index-nullable</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index"> + <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-inverted-index-word-secondary-index"> + <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index-nullable"> + <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index-nullable</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-inverted-index-word-secondary-index-nullable"> + <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index-nullable</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-index-open"> + <output-dir compare="Text">load-with-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-index-open_02"> + <output-dir compare="Text">load-with-index-open_02</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-ngram-index-open"> + <output-dir compare="Text">load-with-ngram-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-rtree-index-open"> + <output-dir compare="Text">load-with-rtree-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="load-with-word-index-open"> + <output-dir compare="Text">load-with-word-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-btree-secondary-index-open"> + <output-dir compare="Text">scan-delete-btree-secondary-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index-open"> + <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-inverted-index-word-secondary-index-open"> + <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-delete-rtree-secondary-index-open"> + <output-dir compare="Text">scan-delete-rtree-secondary-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-btree-secondary-index-open"> + <output-dir compare="Text">scan-insert-btree-secondary-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index-open"> + <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-inverted-index-word-secondary-index-open"> + <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="scan-insert-rtree-secondary-index-open"> + <output-dir compare="Text">scan-insert-rtree-secondary-index-open</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="dml"> + <compilation-unit name="delete-multi-statement"> + <output-dir compare="Text">delete-multi-statement</output-dir> + </compilation-unit> + </test-case> + </test-group> <test-group name="external-library"> <test-case FilePath="external-library"> <compilation-unit name="typed_adapter"> @@ -1441,454 +1889,6 @@ </compilation-unit> </test-case> --> - </test-group> - <test-group name="dml"> - <test-case FilePath="dml"> - <compilation-unit name="insert-dataset-with-meta"> - <output-dir compare="Text">insert-dataset-with-meta</output-dir> - <expected-error>insert into dataset is not supported on Datasets with Meta records</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="delete-dataset-with-meta"> - <output-dir compare="Text">delete-dataset-with-meta</output-dir> - <expected-error>delete from dataset is not supported on Datasets with Meta records</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="upsert-dataset-with-meta"> - <output-dir compare="Text">upsert-dataset-with-meta</output-dir> - <expected-error>upsert into dataset is not supported on Datasets with Meta records</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-ngram-index"> - <output-dir compare="Text">load-with-ngram-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-duplicated-keys-from-query"> - <output-dir compare="Text">insert-duplicated-keys-from-query</output-dir> - <expected-error>org.apache.hyracks.storage.am.common.exceptions.TreeIndexDuplicateKeyException: Failed to insert key since key already exists</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="compact-dataset-and-its-indexes"> - <output-dir compare="Text">compact-dataset-and-its-indexes</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="using-constant-merge-policy"> - <output-dir compare="Text">using-constant-merge-policy</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="using-prefix-merge-policy"> - <output-dir compare="Text">using-prefix-merge-policy</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="using-correlated-prefix-merge-policy"> - <output-dir compare="Text">using-correlated-prefix-merge-policy</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="using-no-merge-policy"> - <output-dir compare="Text">using-no-merge-policy</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="query-issue382"> - <output-dir compare="Text">query-issue382</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="query-issue433"> - <output-dir compare="Text">query-issue433</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="query-issue288"> - <output-dir compare="Text">query-issue288</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="query-issue205"> - <output-dir compare="Text">query-issue205</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="delete-from-loaded-dataset-with-index"> - <output-dir compare="Text">delete-from-loaded-dataset-with-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="delete-from-loaded-dataset"> - <output-dir compare="Text">delete-from-loaded-dataset</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="delete-syntax-change"> - <output-dir compare="Text">delete-syntax-change</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="drop-empty-secondary-indexes"> - <output-dir compare="Text">drop-empty-secondary-indexes</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="drop-index"> - <output-dir compare="Text">drop-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="create-drop-cltype"> - <output-dir compare="Text">create-drop-cltype</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="create-drop-opntype"> - <output-dir compare="Text">create-drop-opntype</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="empty-load-with-index"> - <output-dir compare="Text">empty-load-with-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-into-empty-dataset"> - <output-dir compare="Text">insert-into-empty-dataset</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-into-empty-dataset-with-index"> - <output-dir compare="Text">insert-into-empty-dataset-with-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-syntax"> - <output-dir compare="Text">insert-syntax</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-and-scan-dataset"> - <output-dir compare="Text">insert-and-scan-dataset</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-and-scan-dataset-with-index"> - <output-dir compare="Text">insert-and-scan-dataset-with-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-and-scan-joined-datasets"> - <output-dir compare="Text">insert-and-scan-joined-datasets</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-into-loaded-dataset-with-index_01"> - <output-dir compare="Text">insert-into-loaded-dataset-with-index_01</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-into-loaded-dataset-with-index_02"> - <output-dir compare="Text">insert-into-loaded-dataset-with-index_02</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-into-loaded-dataset_01"> - <output-dir compare="Text">insert-into-loaded-dataset_01</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-into-loaded-dataset_02"> - <output-dir compare="Text">insert-into-loaded-dataset_02</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-src-dst-01"> - <output-dir compare="Text">insert-src-dst-01</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert"> - <output-dir compare="Text">insert</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-duplicated-keys"> - <output-dir compare="Text">insert-duplicated-keys</output-dir> - <expected-error>org.apache.hyracks.storage.am.common.exceptions.TreeIndexDuplicateKeyException: Failed to insert key since key already exists</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert_less_nc"> - <output-dir compare="Text">insert_less_nc</output-dir> - </compilation-unit> - </test-case> - <!-- - <test-case FilePath="dml"> - <compilation-unit name="load-from-hdfs"> - <output-dir compare="Text">load-from-hdfs</output-dir> - </compilation-unit> - </test-case> - --> - <test-case FilePath="dml"> - <compilation-unit name="insert-with-autogenerated-pk_adm_01"> - <output-dir compare="Text">insert-with-autogenerated-pk_adm_01</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-with-autogenerated-pk_adm_02"> - <output-dir compare="Text">insert-with-autogenerated-pk_adm_02</output-dir> - <expected-error>org.apache.hyracks.algebricks.common.exceptions.AlgebricksException: Duplicate field id encountered</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="insert-with-autogenerated-pk_adm_03"> - <output-dir compare="Text">insert-with-autogenerated-pk_adm_03</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-autogenerated-pk_txt_01"> - <output-dir compare="Text">load-with-autogenerated-pk_txt_01</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-autogenerated-pk_adm_01"> - <output-dir compare="Text">load-with-autogenerated-pk_adm_01</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-autogenerated-pk_adm_02"> - <output-dir compare="Text">load-with-autogenerated-pk_adm_02</output-dir> - <expected-error>org.apache.asterix.external.parser.ADMDataParser$ParseException</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-autogenerated-pk_adm_03"> - <output-dir compare="Text">load-with-autogenerated-pk_adm_03</output-dir> - <expected-error>org.apache.asterix.external.parser.ADMDataParser$ParseException</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-autogenerated-pk_adm_04"> - <output-dir compare="Text">load-with-autogenerated-pk_adm_04</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-autogenerated-pk_csv_01"> - <output-dir compare="Text">load-with-autogenerated-pk_csv_01</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-autogenerated-pk_csv_02"><!-- Right now, this only throw exception on expected result!!! --> - <output-dir compare="Text">load-with-autogenerated-pk_csv_02</output-dir> - <expected-error>java.lang.Exception: Result</expected-error> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-index"> - <output-dir compare="Text">load-with-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-rtree-index"> - <output-dir compare="Text">load-with-rtree-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-word-index"> - <output-dir compare="Text">load-with-word-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="opentype-c2o-recursive"> - <output-dir compare="Text">opentype-c2o-recursive</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="opentype-c2o"> - <output-dir compare="Text">opentype-c2o</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="opentype-closed-optional"> - <output-dir compare="Text">opentype-closed-optional</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="opentype-insert"> - <output-dir compare="Text">opentype-insert</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="opentype-insert2"> - <output-dir compare="Text">opentype-insert2</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="opentype-noexpand"> - <output-dir compare="Text">opentype-noexpand</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="opentype-o2c-recursive"> - <output-dir compare="Text">opentype-o2c-recursive</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="opentype-o2c"> - <output-dir compare="Text">opentype-o2c</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="opentype-o2o"> - <output-dir compare="Text">opentype-o2o</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-btree-secondary-index-nullable"> - <output-dir compare="Text">scan-delete-btree-secondary-index-nullable</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-rtree-secondary-index-nullable"> - <output-dir compare="Text">scan-delete-rtree-secondary-index-nullable</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-rtree-secondary-index"> - <output-dir compare="Text">scan-delete-rtree-secondary-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-btree-secondary-index-nullable"> - <output-dir compare="Text">scan-insert-btree-secondary-index-nullable</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-rtree-secondary-index-nullable"> - <output-dir compare="Text">scan-insert-rtree-secondary-index-nullable</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-rtree-secondary-index"> - <output-dir compare="Text">scan-insert-rtree-secondary-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index"> - <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-inverted-index-word-secondary-index"> - <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index-nullable"> - <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index-nullable</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-inverted-index-word-secondary-index-nullable"> - <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index-nullable</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index"> - <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-inverted-index-word-secondary-index"> - <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index-nullable"> - <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index-nullable</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-inverted-index-word-secondary-index-nullable"> - <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index-nullable</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-index-open"> - <output-dir compare="Text">load-with-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-index-open_02"> - <output-dir compare="Text">load-with-index-open_02</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-ngram-index-open"> - <output-dir compare="Text">load-with-ngram-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-rtree-index-open"> - <output-dir compare="Text">load-with-rtree-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="load-with-word-index-open"> - <output-dir compare="Text">load-with-word-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-btree-secondary-index-open"> - <output-dir compare="Text">scan-delete-btree-secondary-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index-open"> - <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-inverted-index-word-secondary-index-open"> - <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-delete-rtree-secondary-index-open"> - <output-dir compare="Text">scan-delete-rtree-secondary-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-btree-secondary-index-open"> - <output-dir compare="Text">scan-insert-btree-secondary-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index-open"> - <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-inverted-index-word-secondary-index-open"> - <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="scan-insert-rtree-secondary-index-open"> - <output-dir compare="Text">scan-insert-rtree-secondary-index-open</output-dir> - </compilation-unit> - </test-case> - <test-case FilePath="dml"> - <compilation-unit name="delete-multi-statement"> - <output-dir compare="Text">delete-multi-statement</output-dir> - </compilation-unit> - </test-case> </test-group> <test-group name="employee"> <test-case FilePath="employee"> diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixPropertiesAccessor.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixPropertiesAccessor.java index 45e3b06..507a393 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixPropertiesAccessor.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/AsterixPropertiesAccessor.java @@ -132,7 +132,7 @@ /** * Constructor which wraps an IApplicationConfig. */ - public AsterixPropertiesAccessor (IApplicationConfig cfg) { + public AsterixPropertiesAccessor(IApplicationConfig cfg) { this.cfg = cfg; instanceName = cfg.getString("asterix", "instance", "DEFAULT_INSTANCE"); String mdNode = null; @@ -234,7 +234,8 @@ return interpreter.interpret(value); } catch (IllegalArgumentException e) { if (LOGGER.isLoggable(Level.SEVERE)) { - StringBuilder msg = new StringBuilder("Invalid property value '" + value + "' for property '" + property + "'.\n"); + StringBuilder msg = + new StringBuilder("Invalid property value '" + value + "' for property '" + property + "'.\n"); if (p != null) { msg.append("See the description: \n" + p.getDescription() + "\n"); } diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/AsterixLSMInsertDeleteOperatorNodePushable.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/AsterixLSMInsertDeleteOperatorNodePushable.java index 5445b11..9a76b40 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/AsterixLSMInsertDeleteOperatorNodePushable.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/AsterixLSMInsertDeleteOperatorNodePushable.java @@ -48,7 +48,7 @@ /** * The following three variables are used to keep track of the information regarding flushing partial frame such as * 1. whether there was a partial frame flush for the current frame, - * ==> captured in flushedPartialTuples variabl + * ==> captured in flushedPartialTuples variable * 2. the last flushed tuple index in the frame if there was a partial frame flush, * ==> captured in lastFlushedTupleIdx variable * 3. the current tuple index the frame, where this operator is working on the current tuple. @@ -89,8 +89,8 @@ tupleFilter = tupleFilterFactory.createTupleFilter(indexHelper.getTaskContext()); frameTuple = new FrameTupleReference(); } - IAsterixAppRuntimeContext runtimeCtx = (IAsterixAppRuntimeContext) ctx.getJobletContext() - .getApplicationContext().getApplicationObject(); + IAsterixAppRuntimeContext runtimeCtx = + (IAsterixAppRuntimeContext) ctx.getJobletContext().getApplicationContext().getApplicationObject(); AsterixLSMIndexUtil.checkAndSetFirstLSN(lsmIndex, runtimeCtx.getTransactionSubsystem().getLogManager()); } catch (Throwable th) { throw new HyracksDataException(th); diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILogRecord.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILogRecord.java index 3738cd1..15f4813 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILogRecord.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/ILogRecord.java @@ -78,8 +78,6 @@ public void setNewOp(byte newOp); - public int getNewValueSize(); - public void setNewValueSize(int newValueSize); public ITupleReference getNewValue(); @@ -138,4 +136,10 @@ * @return a flag indicating whether the log record should be sent to remote replicas */ public boolean isReplicated(); + + ITupleReference getOldValue(); + + void setOldValue(ITupleReference oldValue); + + void setOldValueSize(int oldValueSize); } diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java index fd56913..f3d9a6c 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/LogRecord.java @@ -83,10 +83,13 @@ private long resourceId; private int resourcePartition; private int logSize; - private int fieldCnt; + private int newValueFieldCount; private byte newOp; private int newValueSize; private ITupleReference newValue; + private int oldValueSize; + private ITupleReference oldValue; + private int oldValueFieldCount; private long checksum; // ------------- fields in a log record (end) --------------// @@ -94,9 +97,9 @@ private ITransactionContext txnCtx; private long LSN; private final AtomicBoolean isFlushed; - private final SimpleTupleWriter tupleWriter; private final PrimaryKeyTupleReference readPKValue; private final SimpleTupleReference readNewValue; + private final SimpleTupleReference readOldValue; private final CRC32 checksumGen; private int[] PKFields; private PrimaryIndexOperationTracker opTracker; @@ -112,9 +115,9 @@ public LogRecord() { isFlushed = new AtomicBoolean(false); - tupleWriter = new SimpleTupleWriter(); readPKValue = new PrimaryKeyTupleReference(); - readNewValue = (SimpleTupleReference) tupleWriter.createTupleReference(); + readNewValue = SimpleTupleWriter.INSTANCE.createTupleReference(); + readOldValue = SimpleTupleWriter.INSTANCE.createTupleReference(); checksumGen = new CRC32(); logSource = LogSource.LOCAL; } @@ -132,8 +135,8 @@ private final static int CHKSUM_LEN = Long.BYTES; private final static int ALL_RECORD_HEADER_LEN = LOG_SOURCE_LEN + TYPE_LEN + JobId.BYTES; - private final static int ENTITYCOMMIT_UPDATE_HEADER_LEN = RS_PARTITION_LEN + DatasetId.BYTES + PKHASH_LEN - + PKSZ_LEN; + private final static int ENTITYCOMMIT_UPDATE_HEADER_LEN = + RS_PARTITION_LEN + DatasetId.BYTES + PKHASH_LEN + PKSZ_LEN; private final static int UPDATE_LSN_HEADER = RSID_LEN + LOGRCD_SZ_LEN; private final static int UPDATE_BODY_HEADER = FLDCNT_LEN + NEWOP_LEN + NEWVALSZ_LEN; private final static int REMOTE_FLUSH_LOG_EXTRA_FIELDS_LEN = Long.BYTES + Integer.BYTES + Integer.BYTES; @@ -155,10 +158,15 @@ if (logType == LogType.UPDATE) { buffer.putLong(resourceId); buffer.putInt(logSize); - buffer.putInt(fieldCnt); + buffer.putInt(newValueFieldCount); buffer.put(newOp); buffer.putInt(newValueSize); writeTuple(buffer, newValue, newValueSize); + if (oldValueSize > 0) { + buffer.putInt(oldValueSize); + buffer.putInt(oldValueFieldCount); + writeTuple(buffer, oldValue, oldValueSize); + } } if (logType == LogType.FLUSH) { buffer.putInt(datasetId); @@ -221,7 +229,7 @@ } private void writeTuple(ByteBuffer buffer, ITupleReference tuple, int size) { - tupleWriter.writeTuple(tuple, buffer.array(), buffer.position()); + SimpleTupleWriter.INSTANCE.writeTuple(tuple, buffer.array(), buffer.position()); // writeTuple() doesn't change the position of the buffer. buffer.position(buffer.position() + size); } @@ -304,7 +312,7 @@ } resourceId = buffer.getLong(); logSize = buffer.getInt(); - fieldCnt = buffer.getInt(); + newValueFieldCount = buffer.getInt(); newOp = buffer.get(); newValueSize = buffer.getInt(); if (buffer.remaining() < newValueSize) { @@ -313,7 +321,24 @@ } return RecordReadStatus.TRUNCATED; } - newValue = readTuple(buffer, readNewValue, fieldCnt, newValueSize); + newValue = readTuple(buffer, readNewValue, newValueFieldCount, newValueSize); + if (logSize > getUpdateLogSizeWithoutOldValue()) { + // Prev Image exists + if (buffer.remaining() < Integer.BYTES) { + return RecordReadStatus.TRUNCATED; + } + oldValueSize = buffer.getInt(); + if (buffer.remaining() < Integer.BYTES) { + return RecordReadStatus.TRUNCATED; + } + oldValueFieldCount = buffer.getInt(); + if (buffer.remaining() < oldValueSize) { + return RecordReadStatus.TRUNCATED; + } + oldValue = readTuple(buffer, readOldValue, oldValueFieldCount, oldValueSize); + } else { + oldValueSize = 0; + } } else { computeAndSetLogSize(); } @@ -396,7 +421,14 @@ } private void setUpdateLogSize() { - logSize = UPDATE_LOG_BASE_SIZE + PKValueSize + newValueSize; + logSize = getUpdateLogSizeWithoutOldValue(); + if (oldValueSize > 0) { + logSize += /*size*/Integer.BYTES + /*fieldCount*/Integer.BYTES + /*tuple*/oldValueSize; + } + } + + private int getUpdateLogSizeWithoutOldValue() { + return UPDATE_LOG_BASE_SIZE + PKValueSize + newValueSize; } @Override @@ -565,11 +597,6 @@ } @Override - public int getNewValueSize() { - return newValueSize; - } - - @Override public void setNewValueSize(int newValueSize) { this.newValueSize = newValueSize; } @@ -582,7 +609,7 @@ @Override public void setNewValue(ITupleReference newValue) { this.newValue = newValue; - this.fieldCnt = newValue.getFieldCount(); + this.newValueFieldCount = newValue.getFieldCount(); } @Override @@ -703,4 +730,20 @@ public boolean isReplicated() { return replicated; } + + @Override + public ITupleReference getOldValue() { + return oldValue; + } + + @Override + public void setOldValue(ITupleReference oldValue) { + this.oldValue = oldValue; + this.oldValueFieldCount = oldValue.getFieldCount(); + } + + @Override + public void setOldValueSize(int oldValueSize) { + this.oldValueSize = oldValueSize; + } } diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java index 28f8a79..6a032fd 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java @@ -824,8 +824,8 @@ RTreeSearchOperatorDescriptor rtreeSearchOp; if (dataset.getDatasetType() == DatasetType.INTERNAL) { - IBinaryComparatorFactory[] deletedKeyBTreeCompFactories = getMergedComparatorFactories( - comparatorFactories, primaryComparatorFactories); + IBinaryComparatorFactory[] deletedKeyBTreeCompFactories = + getMergedComparatorFactories(comparatorFactories, primaryComparatorFactories); IIndexDataflowHelperFactory idff = new LSMRTreeWithAntiMatterTuplesDataflowHelperFactory( valueProviderFactories, RTreePolicyType.RTREE, deletedKeyBTreeCompFactories, new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first, @@ -1135,7 +1135,7 @@ ? new TempDatasetPrimaryIndexModificationOperationCallbackFactory(jobId, datasetId, primaryKeyFields, txnSubsystemProvider, indexOp, ResourceType.LSM_BTREE) : new PrimaryIndexModificationOperationCallbackFactory(jobId, datasetId, primaryKeyFields, - txnSubsystemProvider, indexOp, ResourceType.LSM_BTREE); + txnSubsystemProvider, indexOp, ResourceType.LSM_BTREE, false); Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo = DatasetUtils.getMergePolicyFactory(dataset, mdTxnCtx); @@ -1889,8 +1889,8 @@ Pair<IAType, Boolean> keyPairType = Index.getNonNullableOpenFieldType(secondaryKeyTypes.get(0), secondaryKeyExprs.get(0), recType); IAType spatialType = keyPairType.first; - boolean isPointMBR = spatialType.getTypeTag() == ATypeTag.POINT - || spatialType.getTypeTag() == ATypeTag.POINT3D; + boolean isPointMBR = + spatialType.getTypeTag() == ATypeTag.POINT || spatialType.getTypeTag() == ATypeTag.POINT3D; int dimension = NonTaggedFormatUtil.getNumDimensions(spatialType.getTypeTag()); int numSecondaryKeys = dimension * 2; int numPrimaryKeys = primaryKeys.size(); @@ -1975,8 +1975,8 @@ Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo = DatasetUtils.getMergePolicyFactory(dataset, mdTxnCtx); - IBinaryComparatorFactory[] deletedKeyBTreeCompFactories = getMergedComparatorFactories(comparatorFactories, - primaryComparatorFactories); + IBinaryComparatorFactory[] deletedKeyBTreeCompFactories = + getMergedComparatorFactories(comparatorFactories, primaryComparatorFactories); IIndexDataflowHelperFactory idff = new LSMRTreeWithAntiMatterTuplesDataflowHelperFactory( valueProviderFactories, RTreePolicyType.RTREE, deletedKeyBTreeCompFactories, new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first, @@ -2300,7 +2300,7 @@ ? new TempDatasetPrimaryIndexModificationOperationCallbackFactory(jobId, datasetId, primaryKeyFields, txnSubsystemProvider, IndexOperation.UPSERT, ResourceType.LSM_BTREE) : new UpsertOperationCallbackFactory(jobId, datasetId, primaryKeyFields, txnSubsystemProvider, - IndexOperation.UPSERT, ResourceType.LSM_BTREE); + IndexOperation.UPSERT, ResourceType.LSM_BTREE, false); LockThenSearchOperationCallbackFactory searchCallbackFactory = new LockThenSearchOperationCallbackFactory( jobId, datasetId, primaryKeyFields, txnSubsystemProvider, ResourceType.LSM_BTREE); @@ -2666,8 +2666,8 @@ Index.getNonNullableOpenFieldType(secondaryKeyTypes.get(0), secondaryKeyExprs.get(0), recType); IAType spatialType = keyPairType.first; - boolean isPointMBR = spatialType.getTypeTag() == ATypeTag.POINT - || spatialType.getTypeTag() == ATypeTag.POINT3D; + boolean isPointMBR = + spatialType.getTypeTag() == ATypeTag.POINT || spatialType.getTypeTag() == ATypeTag.POINT3D; int dimension = NonTaggedFormatUtil.getNumDimensions(spatialType.getTypeTag()); int numSecondaryKeys = dimension * 2; int numPrimaryKeys = primaryKeys.size(); @@ -2772,10 +2772,10 @@ modificationCallbackPrimaryKeyFields, txnSubsystemProvider, IndexOperation.UPSERT, ResourceType.LSM_RTREE); - Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo = DatasetUtils - .getMergePolicyFactory(dataset, mdTxnCtx); - IBinaryComparatorFactory[] deletedKeyBTreeCompFactories = getMergedComparatorFactories(comparatorFactories, - primaryComparatorFactories); + Pair<ILSMMergePolicyFactory, Map<String, String>> compactionInfo = + DatasetUtils.getMergePolicyFactory(dataset, mdTxnCtx); + IBinaryComparatorFactory[] deletedKeyBTreeCompFactories = + getMergedComparatorFactories(comparatorFactories, primaryComparatorFactories); IIndexDataflowHelperFactory idff = new LSMRTreeWithAntiMatterTuplesDataflowHelperFactory( valueProviderFactories, RTreePolicyType.RTREE, deletedKeyBTreeCompFactories, new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()), compactionInfo.first, diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/AbstractIndexModificationOperationCallback.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/AbstractIndexModificationOperationCallback.java index 65c9a49..2a3467e 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/AbstractIndexModificationOperationCallback.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/AbstractIndexModificationOperationCallback.java @@ -40,7 +40,6 @@ protected final byte resourceType; protected final IndexOperation indexOp; protected final ITransactionSubsystem txnSubsystem; - protected final SimpleTupleWriter tupleWriter; protected final ILogRecord logRecord; protected AbstractIndexModificationOperationCallback(int datasetId, int[] primaryKeyFields, @@ -51,7 +50,6 @@ this.resourceType = resourceType; this.indexOp = indexOp; this.txnSubsystem = txnSubsystem; - tupleWriter = new SimpleTupleWriter(); logRecord = new LogRecord(); logRecord.setTxnCtx(txnCtx); logRecord.setLogType(LogType.UPDATE); @@ -62,17 +60,23 @@ logRecord.setNewOp((byte) (indexOp.ordinal())); } - protected void log(int PKHash, ITupleReference newValue) throws ACIDException { + protected void log(int PKHash, ITupleReference newValue, ITupleReference oldValue) throws ACIDException { logRecord.setPKHashValue(PKHash); logRecord.setPKFields(primaryKeyFields); logRecord.setPKValue(newValue); logRecord.computeAndSetPKValueSize(); if (newValue != null) { - logRecord.setNewValueSize(tupleWriter.bytesRequired(newValue)); + logRecord.setNewValueSize(SimpleTupleWriter.INSTANCE.bytesRequired(newValue)); logRecord.setNewValue(newValue); } else { logRecord.setNewValueSize(0); } + if (oldValue != null) { + logRecord.setOldValueSize(SimpleTupleWriter.INSTANCE.bytesRequired(oldValue)); + logRecord.setOldValue(oldValue); + } else { + logRecord.setOldValueSize(0); + } logRecord.computeAndSetLogSize(); txnSubsystem.getLogManager().log(logRecord); } diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallback.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallback.java index 4bde490..5b89bb5 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallback.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallback.java @@ -40,13 +40,16 @@ implements IModificationOperationCallback { private final AsterixLSMInsertDeleteOperatorNodePushable operatorNodePushable; + private final boolean logBeforeImage; public PrimaryIndexModificationOperationCallback(int datasetId, int[] primaryKeyFields, ITransactionContext txnCtx, ILockManager lockManager, ITransactionSubsystem txnSubsystem, long resourceId, int resourcePartition, - byte resourceType, IndexOperation indexOp, IOperatorNodePushable operatorNodePushable) { + byte resourceType, IndexOperation indexOp, IOperatorNodePushable operatorNodePushable, + boolean logBeforeImage) { super(datasetId, primaryKeyFields, txnCtx, lockManager, txnSubsystem, resourceId, resourcePartition, resourceType, indexOp); this.operatorNodePushable = (AsterixLSMInsertDeleteOperatorNodePushable) operatorNodePushable; + this.logBeforeImage = logBeforeImage; } @Override @@ -99,7 +102,11 @@ public void found(ITupleReference before, ITupleReference after) throws HyracksDataException { try { int pkHash = computePrimaryKeyHashValue(after, primaryKeyFields); - log(pkHash, after); + if (logBeforeImage) { + log(pkHash, after, before); + } else { + log(pkHash, after, null); + } } catch (ACIDException e) { throw new HyracksDataException(e); } diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallbackFactory.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallbackFactory.java index c406812..a4cbc5d 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallbackFactory.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallbackFactory.java @@ -43,11 +43,14 @@ private static final long serialVersionUID = 1L; private final IndexOperation indexOp; + private final boolean logImageBefore; public PrimaryIndexModificationOperationCallbackFactory(JobId jobId, int datasetId, int[] primaryKeyFields, - ITransactionSubsystemProvider txnSubsystemProvider, IndexOperation indexOp, byte resourceType) { + ITransactionSubsystemProvider txnSubsystemProvider, IndexOperation indexOp, byte resourceType, + boolean logImageBefore) { super(jobId, datasetId, primaryKeyFields, txnSubsystemProvider, resourceType); this.indexOp = indexOp; + this.logImageBefore = logImageBefore; } @Override @@ -56,8 +59,8 @@ throws HyracksDataException { ITransactionSubsystem txnSubsystem = txnSubsystemProvider.getTransactionSubsystem(ctx); - IIndexLifecycleManager indexLifeCycleManager = txnSubsystem.getAsterixAppRuntimeContextProvider() - .getDatasetLifecycleManager(); + IIndexLifecycleManager indexLifeCycleManager = + txnSubsystem.getAsterixAppRuntimeContextProvider().getDatasetLifecycleManager(); ILSMIndex index = (ILSMIndex) indexLifeCycleManager.getIndex(resourcePath); if (index == null) { throw new HyracksDataException("Index(id:" + resourceId + ") is not registered."); @@ -67,7 +70,7 @@ ITransactionContext txnCtx = txnSubsystem.getTransactionManager().getTransactionContext(jobId, false); IModificationOperationCallback modCallback = new PrimaryIndexModificationOperationCallback(datasetId, primaryKeyFields, txnCtx, txnSubsystem.getLockManager(), txnSubsystem, resourceId, - resourcePartition, resourceType, indexOp, operatorNodePushable); + resourcePartition, resourceType, indexOp, operatorNodePushable, logImageBefore); txnCtx.registerIndexAndCallback(resourceId, index, (AbstractOperationCallback) modCallback, true); return modCallback; } catch (ACIDException e) { diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java index 8044d90..2a40a3c 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java @@ -55,7 +55,7 @@ public void found(ITupleReference before, ITupleReference after) throws HyracksDataException { try { int pkHash = computePrimaryKeyHashValue(after, primaryKeyFields); - this.log(pkHash, after); + this.log(pkHash, after, null); } catch (ACIDException e) { throw new HyracksDataException(e); } diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallback.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallback.java index f98083a..8e16249 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallback.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallback.java @@ -29,12 +29,14 @@ public class UpsertOperationCallback extends AbstractIndexModificationOperationCallback implements IModificationOperationCallback { + private final boolean logBeforeImage; public UpsertOperationCallback(int datasetId, int[] primaryKeyFields, ITransactionContext txnCtx, ILockManager lockManager, ITransactionSubsystem txnSubsystem, long resourceId, int resourcePartition, - byte resourceType, IndexOperation indexOp) { + byte resourceType, IndexOperation indexOp, boolean logBeforeImage) { super(datasetId, primaryKeyFields, txnCtx, lockManager, txnSubsystem, resourceId, resourcePartition, resourceType, indexOp); + this.logBeforeImage = logBeforeImage; } @Override @@ -46,7 +48,11 @@ public void found(ITupleReference before, ITupleReference after) throws HyracksDataException { try { int pkHash = computePrimaryKeyHashValue(after, primaryKeyFields); - log(pkHash, after); + if (logBeforeImage) { + log(pkHash, after, before); + } else { + log(pkHash, after, null); + } } catch (ACIDException e) { throw new HyracksDataException(e); } diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallbackFactory.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallbackFactory.java index 87cb8e7..ad428ee 100644 --- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallbackFactory.java +++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/opcallbacks/UpsertOperationCallbackFactory.java @@ -39,11 +39,14 @@ private static final long serialVersionUID = 1L; private final IndexOperation indexOp; + private final boolean logImageBefore; public UpsertOperationCallbackFactory(JobId jobId, int datasetId, int[] primaryKeyFields, - ITransactionSubsystemProvider txnSubsystemProvider, IndexOperation indexOp, byte resourceType) { + ITransactionSubsystemProvider txnSubsystemProvider, IndexOperation indexOp, byte resourceType, + boolean logImageBefore) { super(jobId, datasetId, primaryKeyFields, txnSubsystemProvider, resourceType); this.indexOp = indexOp; + this.logImageBefore = logImageBefore; } @Override @@ -52,8 +55,8 @@ throws HyracksDataException { ITransactionSubsystem txnSubsystem = txnSubsystemProvider.getTransactionSubsystem(ctx); - IIndexLifecycleManager indexLifeCycleManager = txnSubsystem.getAsterixAppRuntimeContextProvider() - .getDatasetLifecycleManager(); + IIndexLifecycleManager indexLifeCycleManager = + txnSubsystem.getAsterixAppRuntimeContextProvider().getDatasetLifecycleManager(); ILSMIndex index = (ILSMIndex) indexLifeCycleManager.getIndex(resourceName); if (index == null) { throw new HyracksDataException("Index(id:" + resourceId + ") is not registered."); @@ -61,9 +64,9 @@ try { ITransactionContext txnCtx = txnSubsystem.getTransactionManager().getTransactionContext(jobId, false); - IModificationOperationCallback modCallback = new UpsertOperationCallback(datasetId, primaryKeyFields, - txnCtx, txnSubsystem.getLockManager(), txnSubsystem, resourceId, resourcePartition, resourceType, - indexOp); + IModificationOperationCallback modCallback = + new UpsertOperationCallback(datasetId, primaryKeyFields, txnCtx, txnSubsystem.getLockManager(), + txnSubsystem, resourceId, resourcePartition, resourceType, indexOp, logImageBefore); txnCtx.registerIndexAndCallback(resourceId, index, (AbstractOperationCallback) modCallback, true); return modCallback; } catch (ACIDException e) { diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml index f474690..7f5c612 100644 --- a/asterixdb/pom.xml +++ b/asterixdb/pom.xml @@ -199,7 +199,7 @@ <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> - <versionRange>[3.4,)</versionRange> + <versionRange>[3.3,)</versionRange> <goals> <goal>descriptor</goal> </goals> diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/SimpleTupleWriter.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/SimpleTupleWriter.java index 11b0010..7aaa983 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/SimpleTupleWriter.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/SimpleTupleWriter.java @@ -22,10 +22,17 @@ import java.nio.ByteBuffer; import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference; -import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleReference; import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter; +/* + * This class should be replaced by a Util class + */ public class SimpleTupleWriter implements ITreeIndexTupleWriter { + + public static final SimpleTupleWriter INSTANCE = new SimpleTupleWriter(); + + private SimpleTupleWriter() { + } // Write short in little endian to target byte array at given offset. private static void writeShortL(short s, byte[] buf, int targetOff) { @@ -52,7 +59,7 @@ } @Override - public ITreeIndexTupleReference createTupleReference() { + public SimpleTupleReference createTupleReference() { return new SimpleTupleReference(); } @@ -103,7 +110,7 @@ } protected int getNullFlagsBytes(ITupleReference tuple) { - return (int) Math.ceil((double) tuple.getFieldCount() / 8.0); + return (int) Math.ceil(tuple.getFieldCount() / 8.0); } protected int getFieldSlotsBytes(ITupleReference tuple) { @@ -111,7 +118,7 @@ } protected int getNullFlagsBytes(ITupleReference tuple, int startField, int numFields) { - return (int) Math.ceil((double) numFields / 8.0); + return (int) Math.ceil(numFields / 8.0); } protected int getFieldSlotsBytes(ITupleReference tuple, int startField, int numFields) { diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/SimpleTupleWriterFactory.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/SimpleTupleWriterFactory.java deleted file mode 100644 index be0688a..0000000 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/tuples/SimpleTupleWriterFactory.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.hyracks.storage.am.common.tuples; - -import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriter; -import org.apache.hyracks.storage.am.common.api.ITreeIndexTupleWriterFactory; - -public class SimpleTupleWriterFactory implements ITreeIndexTupleWriterFactory { - - private static final long serialVersionUID = 1L; - - @Override - public ITreeIndexTupleWriter createTupleWriter() { - return new SimpleTupleWriter(); - } - -} diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java index b58cc29..8ddab88 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMHarness.java @@ -511,8 +511,8 @@ protected void triggerReplication(List<ILSMComponent> lsmComponents, boolean bulkload, LSMOperationType opType) throws HyracksDataException { - ILSMIndexAccessorInternal accessor = lsmIndex.createAccessor(NoOpOperationCallback.INSTANCE, - NoOpOperationCallback.INSTANCE); + ILSMIndexAccessorInternal accessor = + lsmIndex.createAccessor(NoOpOperationCallback.INSTANCE, NoOpOperationCallback.INSTANCE); accessor.scheduleReplication(lsmComponents, bulkload, opType); } -- To view, visit https://asterix-gerrit.ics.uci.edu/900 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iaaed48f4c2ca8d83253e81cd7c60aad998b67b1e Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: abdullah alamoudi <bamou...@gmail.com>