>From Murtadha Hubail <[email protected]>: Murtadha Hubail has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18948 )
Change subject: [ASTERIXDB-3483]: Index Owner changes ...................................................................... [ASTERIXDB-3483]: Index Owner changes - user model changes: no - storage format changes: no - interface changes: yes Ext-ref: MB-62971 Change-Id: I4c61edec9731a5ab5f6aefc5cdd7e7c3953df31e Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18948 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> --- M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java M asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/MultiPartitionLSMIndexTest.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java M asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ConcurrentInsertTest.java M asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/CheckpointInSecondaryIndexTest.java M asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/LSMFlushRecoveryTest.java M asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/create_dataset_with_filter_on_meta/create_dataset_with_filter_on_meta.1.adm M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java M asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java M asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/fulltext/stopwords-full-text-filter-1/stopwords-full-text-filter-1.7.adm M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java M asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/index-cast-null/index-cast-null.015.adm M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java M asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java 16 files changed, 120 insertions(+), 44 deletions(-) Approvals: Murtadha Hubail: Looks good to me, approved Jenkins: Verified; Verified diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java index 2a26d63..d6bace5 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java @@ -398,7 +398,8 @@ Creator.DEFAULT_CREATOR); break; case CREATE_INDEX: - handleCreateIndexStatement(metadataProvider, stmt, hcc, requestParameters); + handleCreateIndexStatement(metadataProvider, stmt, hcc, requestParameters, + Creator.DEFAULT_CREATOR); break; case CREATE_FULL_TEXT_FILTER: handleCreateFullTextFilterStatement(metadataProvider, stmt); @@ -1289,7 +1290,7 @@ } public void handleCreateIndexStatement(MetadataProvider metadataProvider, Statement stmt, - IHyracksClientConnection hcc, IRequestParameters requestParameters) throws Exception { + IHyracksClientConnection hcc, IRequestParameters requestParameters, Creator creator) throws Exception { CreateIndexStatement stmtCreateIndex = (CreateIndexStatement) stmt; String datasetName = stmtCreateIndex.getDatasetName().getValue(); String indexName = stmtCreateIndex.getIndexName().getValue(); @@ -1306,7 +1307,7 @@ fullTextConfigName); try { doCreateIndex(metadataProvider, stmtCreateIndex, databaseName, dataverseName, datasetName, hcc, - requestParameters); + requestParameters, creator); } finally { metadataProvider.getLocks().unlock(); } @@ -1314,7 +1315,7 @@ protected void doCreateIndex(MetadataProvider metadataProvider, CreateIndexStatement stmtCreateIndex, String databaseName, DataverseName dataverseName, String datasetName, IHyracksClientConnection hcc, - IRequestParameters requestParameters) throws Exception { + IRequestParameters requestParameters, Creator creator) throws Exception { SourceLocation sourceLoc = stmtCreateIndex.getSourceLocation(); MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); boolean bActiveTxn = true; @@ -1639,10 +1640,11 @@ } Index newIndex = new Index(databaseName, dataverseName, datasetName, indexName, indexType, indexDetails, - stmtCreateIndex.isEnforced(), false, MetadataUtil.PENDING_ADD_OP); + stmtCreateIndex.isEnforced(), false, MetadataUtil.PENDING_ADD_OP, creator); bActiveTxn = false; // doCreateIndexImpl() takes over the current transaction - doCreateIndexImpl(hcc, metadataProvider, ds, newIndex, jobFlags, sourceLoc); + EntityDetails entityDetails = EntityDetails.newIndex(databaseName, dataverseName, indexName); + doCreateIndexImpl(hcc, metadataProvider, ds, newIndex, jobFlags, sourceLoc, creator, entityDetails); } catch (Exception e) { if (bActiveTxn) { @@ -1787,7 +1789,8 @@ } private void doCreateIndexImpl(IHyracksClientConnection hcc, MetadataProvider metadataProvider, Dataset ds, - Index index, EnumSet<JobFlag> jobFlags, SourceLocation sourceLoc) throws Exception { + Index index, EnumSet<JobFlag> jobFlags, SourceLocation sourceLoc, Creator creator, + EntityDetails entityDetails) throws Exception { ProgressState progress = ProgressState.NO_PROGRESS; boolean bActiveTxn = true; MetadataTransactionContext mdTxnCtx = metadataProvider.getMetadataTxnContext(); @@ -1866,6 +1869,8 @@ "Failed to create job spec for creating index '" + ds.getDatasetName() + "." + index.getIndexName() + "'"); } + beforeTxnCommit(metadataProvider, creator, entityDetails); + MetadataManager.INSTANCE.commitTransaction(mdTxnCtx); bActiveTxn = false; progress = ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA; @@ -4885,7 +4890,7 @@ dsDetails.getKeySourceIndicator(), dsDetails.getPrimaryKeyType(), sampleCardinalityTarget, 0, 0, sampleSeed, Collections.emptyMap()); newIndexPendingAdd = new Index(databaseName, dataverseName, datasetName, newIndexName, sampleIndexType, - newIndexDetailsPendingAdd, false, false, MetadataUtil.PENDING_ADD_OP); + newIndexDetailsPendingAdd, false, false, MetadataUtil.PENDING_ADD_OP, Creator.DEFAULT_CREATOR); // #. add a new index with PendingAddOp MetadataManager.INSTANCE.addIndex(metadataProvider.getMetadataTxnContext(), newIndexPendingAdd); @@ -4927,7 +4932,7 @@ dsDetails.getKeySourceIndicator(), dsDetails.getPrimaryKeyType(), sampleCardinalityTarget, stats.getCardinality(), stats.getAvgTupleSize(), sampleSeed, stats.getIndexesStats()); Index newIndexFinal = new Index(databaseName, dataverseName, datasetName, newIndexName, sampleIndexType, - newIndexDetailsFinal, false, false, MetadataUtil.PENDING_NO_OP); + newIndexDetailsFinal, false, false, MetadataUtil.PENDING_NO_OP, Creator.DEFAULT_CREATOR); // #. begin new metadataTxn mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); @@ -5191,7 +5196,7 @@ MetadataManager.INSTANCE.addIndex(mdTxnCtx, new Index(databaseName, dataverseName, datasetName, indexName, index.getIndexType(), index.getIndexDetails(), index.isEnforced(), index.isPrimaryIndex(), - MetadataUtil.PENDING_DROP_OP)); + MetadataUtil.PENDING_DROP_OP, index.getCreator())); } } diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java index 7c4c551..aaee17e 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java @@ -747,7 +747,7 @@ } index = Index.createPrimaryIndex(dataset.getDatabaseName(), dataset.getDataverseName(), dataset.getDatasetName(), keyFieldNames, primaryKeyIndicators, keyFieldTypes, - MetadataUtil.PENDING_NO_OP); + MetadataUtil.PENDING_NO_OP, dataset.getCreator()); List<String> nodes = Collections.singletonList(ExecutionTestUtil.integrationUtil.ncs[0].getId()); CcApplicationContext appCtx = (CcApplicationContext) ExecutionTestUtil.integrationUtil.cc.getApplicationContext(); diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/CheckpointInSecondaryIndexTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/CheckpointInSecondaryIndexTest.java index 70226c8..4024ced 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/CheckpointInSecondaryIndexTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/CheckpointInSecondaryIndexTest.java @@ -51,6 +51,7 @@ import org.apache.asterix.metadata.entities.Index; import org.apache.asterix.metadata.entities.InternalDatasetDetails; import org.apache.asterix.metadata.entities.InternalDatasetDetails.PartitioningStrategy; +import org.apache.asterix.metadata.utils.Creator; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.BuiltinType; import org.apache.asterix.om.types.IAType; @@ -174,7 +175,8 @@ null, DatasetType.INTERNAL, DATASET_ID, 0); String database = MetadataUtil.databaseFor(dvName); secondaryIndex = new Index(database, dvName, DATASET_NAME, INDEX_NAME, INDEX_TYPE, INDEX_FIELD_NAMES, - INDEX_FIELD_INDICATORS, INDEX_FIELD_TYPES, false, false, false, 0, OptionalBoolean.of(false)); + INDEX_FIELD_INDICATORS, INDEX_FIELD_TYPES, false, false, false, 0, OptionalBoolean.of(false), + Creator.DEFAULT_CREATOR); taskCtx = null; primaryIndexDataflowHelper = null; secondaryIndexDataflowHelper = null; diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ConcurrentInsertTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ConcurrentInsertTest.java index b458874..b85cae2 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ConcurrentInsertTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/ConcurrentInsertTest.java @@ -130,7 +130,7 @@ StorageTestUtils.DATASET.getDataverseName(), StorageTestUtils.DATASET.getDatasetName(), "TestIndex", IndexType.BTREE, Arrays.asList(Arrays.asList(StorageTestUtils.RECORD_TYPE.getFieldNames()[1])), Arrays.asList(Index.RECORD_INDICATOR), Arrays.asList(BuiltinType.AINT64), false, false, false, 0, - OptionalBoolean.of(false)); + OptionalBoolean.of(false), StorageTestUtils.DATASET.getCreator()); SecondaryIndexInfo secondaryIndexInfo = nc.createSecondaryIndex(primaryIndexInfo, secondaryIndexEntity, StorageTestUtils.STORAGE_MANAGER, 0); @@ -142,10 +142,10 @@ secondaryIndex = (TestLsmBtree) secondaryDataflowHelper.getIndexInstance(); secondaryDataflowHelper.close(); - Index primaryKeyIndexEntity = - new Index(StorageTestUtils.DATASET.getDatabaseName(), StorageTestUtils.DATASET.getDataverseName(), - StorageTestUtils.DATASET.getDatasetName(), "PrimaryKeyIndex", IndexType.BTREE, Arrays.asList(), - Arrays.asList(), Arrays.asList(), false, false, false, 0, OptionalBoolean.empty()); + Index primaryKeyIndexEntity = new Index(StorageTestUtils.DATASET.getDatabaseName(), + StorageTestUtils.DATASET.getDataverseName(), StorageTestUtils.DATASET.getDatasetName(), + "PrimaryKeyIndex", IndexType.BTREE, Arrays.asList(), Arrays.asList(), Arrays.asList(), false, false, + false, 0, OptionalBoolean.empty(), StorageTestUtils.DATASET.getCreator()); SecondaryIndexInfo primaryKeyIndexInfo = nc.createSecondaryIndex(primaryIndexInfo, primaryKeyIndexEntity, StorageTestUtils.STORAGE_MANAGER, 0); diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/LSMFlushRecoveryTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/LSMFlushRecoveryTest.java index b574c1b..7c1a534 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/LSMFlushRecoveryTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/LSMFlushRecoveryTest.java @@ -189,7 +189,7 @@ secondaryIndexEntity = new Index(dataset.getDatabaseName(), dataset.getDataverseName(), dataset.getDatasetName(), SECONDARY_INDEX_NAME, SECONDARY_INDEX_TYPE, SECONDARY_INDEX_FIELD_NAMES, SECONDARY_INDEX_FIELD_INDICATORS, SECONDARY_INDEX_FIELD_TYPES, false, false, false, 0, - OptionalBoolean.of(false)); + OptionalBoolean.of(false), dataset.getCreator()); primaryIndexInfos = new PrimaryIndexInfo[NUM_PARTITIONS]; secondaryIndexInfo = new SecondaryIndexInfo[NUM_PARTITIONS]; diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/MultiPartitionLSMIndexTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/MultiPartitionLSMIndexTest.java index d921127..cc50f2a 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/MultiPartitionLSMIndexTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/MultiPartitionLSMIndexTest.java @@ -161,9 +161,9 @@ NoMergePolicyFactory.NAME, null, new InternalDatasetDetails(null, PartitioningStrategy.HASH, partitioningKeys, null, null, null, false, null, null), null, DatasetType.INTERNAL, DATASET_ID, 0); - secondaryIndex = - new Index(dataset.getDatabaseName(), dvName, DATASET_NAME, INDEX_NAME, INDEX_TYPE, INDEX_FIELD_NAMES, - INDEX_FIELD_INDICATORS, INDEX_FIELD_TYPES, false, false, false, 0, OptionalBoolean.of(false)); + secondaryIndex = new Index(dataset.getDatabaseName(), dvName, DATASET_NAME, INDEX_NAME, INDEX_TYPE, + INDEX_FIELD_NAMES, INDEX_FIELD_INDICATORS, INDEX_FIELD_TYPES, false, false, false, 0, + OptionalBoolean.of(false), dataset.getCreator()); taskCtxs = new IHyracksTaskContext[NUM_PARTITIONS]; primaryIndexDataflowHelpers = new IIndexDataflowHelper[NUM_PARTITIONS]; secondaryIndexDataflowHelpers = new IIndexDataflowHelper[NUM_PARTITIONS]; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/create_dataset_with_filter_on_meta/create_dataset_with_filter_on_meta.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/create_dataset_with_filter_on_meta/create_dataset_with_filter_on_meta.1.adm index e460060..1f0dd69 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/create_dataset_with_filter_on_meta/create_dataset_with_filter_on_meta.1.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/create_dataset_with_filter_on_meta/create_dataset_with_filter_on_meta.1.adm @@ -1,3 +1,3 @@ -{ "DatabaseName": "Default", "DataverseName": "KeyVerse", "DatasetName": "KVStore", "IndexName": "KVStore", "IndexStructure": "BTREE", "SearchKey": [ [ "key" ] ], "IsPrimary": true, "Timestamp": "Sat Sep 30 23:12:54 PDT 2023", "PendingOp": 0, "SearchKeySourceIndicator": [ 1 ] } -{ "DatabaseName": "Default", "DataverseName": "KeyVerse", "DatasetName": "KVStore", "IndexName": "s_location", "IndexStructure": "RTREE", "SearchKey": [ [ "location" ] ], "IsPrimary": false, "Timestamp": "Sat Sep 30 23:12:54 PDT 2023", "PendingOp": 0 } -{ "DatabaseName": "Default", "DataverseName": "KeyVerse", "DatasetName": "KVStore", "IndexName": "s_rating", "IndexStructure": "BTREE", "SearchKey": [ [ "area_code" ] ], "IsPrimary": false, "Timestamp": "Sat Sep 30 23:12:54 PDT 2023", "PendingOp": 0, "ExcludeUnknownKey": false } \ No newline at end of file +{ "DatabaseName": "Default", "DataverseName": "KeyVerse", "DatasetName": "KVStore", "IndexName": "KVStore", "IndexStructure": "BTREE", "SearchKey": [ [ "key" ] ], "IsPrimary": true, "Timestamp": "Mon Oct 14 07:37:28 UTC 2024", "PendingOp": 0, "SearchKeySourceIndicator": [ 1 ], "Creator": { "Name": "@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } } +{ "DatabaseName": "Default", "DataverseName": "KeyVerse", "DatasetName": "KVStore", "IndexName": "s_location", "IndexStructure": "RTREE", "SearchKey": [ [ "location" ] ], "IsPrimary": false, "Timestamp": "Sat Sep 30 23:12:54 PDT 2023", "PendingOp": 0, "Creator": { "Name": "@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } } +{ "DatabaseName": "Default", "DataverseName": "KeyVerse", "DatasetName": "KVStore", "IndexName": "s_rating", "IndexStructure": "BTREE", "SearchKey": [ [ "area_code" ] ], "IsPrimary": false, "Timestamp": "Sat Sep 30 23:12:54 PDT 2023", "PendingOp": 0, "ExcludeUnknownKey": false, "Creator": { "Name": "@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/index-cast-null/index-cast-null.015.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/index-cast-null/index-cast-null.015.adm index 52eaa75..797b6a6 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/index-cast-null/index-cast-null.015.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/ddl/index-cast-null/index-cast-null.015.adm @@ -1 +1 @@ -{ "DatabaseName": "Default", "DataverseName": "test", "DatasetName": "ds2", "IndexName": "ds2_o_idx2", "IndexStructure": "BTREE", "SearchKey": [ [ "o_s_f" ], [ "o_d_f" ] ], "IsPrimary": false, "Timestamp": "Sat Sep 30 23:18:19 PDT 2023", "PendingOp": 0, "SearchKeyType": [ "double", "string" ], "ExcludeUnknownKey": false, "Cast": { "Default": null } } \ No newline at end of file +{ "DatabaseName": "Default", "DataverseName": "test", "DatasetName": "ds2", "IndexName": "ds2_o_idx2", "IndexStructure": "BTREE", "SearchKey": [ [ "o_s_f" ], [ "o_d_f" ] ], "IsPrimary": false, "Timestamp": "Mon Oct 14 07:37:29 UTC 2024", "PendingOp": 0, "SearchKeyType": [ "double", "string" ], "ExcludeUnknownKey": false, "Cast": { "Default": null }, "Creator": { "Name": "@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/fulltext/stopwords-full-text-filter-1/stopwords-full-text-filter-1.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/fulltext/stopwords-full-text-filter-1/stopwords-full-text-filter-1.7.adm index 0003857..73c6eb5 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/fulltext/stopwords-full-text-filter-1/stopwords-full-text-filter-1.7.adm +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_cloud/fulltext/stopwords-full-text-filter-1/stopwords-full-text-filter-1.7.adm @@ -1,4 +1,4 @@ -{ "DatabaseName": "Default", "DataverseName": "MyDataVerse", "DatasetName": "MyMessageDataset", "IndexName": "MyMessageDataset", "IndexStructure": "BTREE", "SearchKey": [ [ "myMessageId" ] ], "IsPrimary": true, "Timestamp": "Sat Sep 30 23:33:32 PDT 2023", "PendingOp": 0 } -{ "DatabaseName": "Default", "DataverseName": "MyDataVerse", "DatasetName": "MyMessageDataset", "IndexName": "message_ft_index_0", "IndexStructure": "SINGLE_PARTITION_WORD_INVIX", "SearchKey": [ [ "myMessageBody" ] ], "IsPrimary": false, "Timestamp": "Sat Sep 30 23:33:33 PDT 2023", "PendingOp": 0 } -{ "DatabaseName": "Default", "DataverseName": "MyDataVerse", "DatasetName": "MyMessageDataset", "IndexName": "message_ft_index_1", "IndexStructure": "SINGLE_PARTITION_WORD_INVIX", "SearchKey": [ [ "myMessageBody" ] ], "IsPrimary": false, "Timestamp": "Sat Sep 30 23:33:34 PDT 2023", "PendingOp": 0, "FullTextConfig": "my_first_stopword_config" } -{ "DatabaseName": "Default", "DataverseName": "MyDataVerse", "DatasetName": "MyMessageDataset", "IndexName": "message_ft_index_2", "IndexStructure": "SINGLE_PARTITION_WORD_INVIX", "SearchKey": [ [ "myMessageBody" ] ], "IsPrimary": false, "Timestamp": "Sat Sep 30 23:33:34 PDT 2023", "PendingOp": 0, "FullTextConfig": "my_second_stopword_config" } \ No newline at end of file +{ "DatabaseName": "Default", "DataverseName": "MyDataVerse", "DatasetName": "MyMessageDataset", "IndexName": "MyMessageDataset", "IndexStructure": "BTREE", "SearchKey": [ [ "myMessageId" ] ], "IsPrimary": true, "Timestamp": "Wed Oct 09 14:02:40 IST 2024", "PendingOp": 0, "Creator": { "Name": "@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } } +{ "DatabaseName": "Default", "DataverseName": "MyDataVerse", "DatasetName": "MyMessageDataset", "IndexName": "message_ft_index_0", "IndexStructure": "SINGLE_PARTITION_WORD_INVIX", "SearchKey": [ [ "myMessageBody" ] ], "IsPrimary": false, "Timestamp": "Wed Oct 09 14:04:53 IST 2024", "PendingOp": 0, "Creator": { "Name": "@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } } +{ "DatabaseName": "Default", "DataverseName": "MyDataVerse", "DatasetName": "MyMessageDataset", "IndexName": "message_ft_index_1", "IndexStructure": "SINGLE_PARTITION_WORD_INVIX", "SearchKey": [ [ "myMessageBody" ] ], "IsPrimary": false, "Timestamp": "Wed Oct 09 14:06:04 IST 2024", "PendingOp": 0, "FullTextConfig": "my_first_stopword_config", "Creator": { "Name": "@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } } +{ "DatabaseName": "Default", "DataverseName": "MyDataVerse", "DatasetName": "MyMessageDataset", "IndexName": "message_ft_index_2", "IndexStructure": "SINGLE_PARTITION_WORD_INVIX", "SearchKey": [ [ "myMessageBody" ] ], "IsPrimary": false, "Timestamp": "Wed Oct 09 14:08:21 IST 2024", "PendingOp": 0, "FullTextConfig": "my_second_stopword_config", "Creator": { "Name": "@sys", "Uuid": "97c793f3-bcbf-4595-8bf0-e9d6a5953523" } } \ No newline at end of file diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java index 0eb1111..8399f96 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java @@ -451,7 +451,7 @@ InternalDatasetDetails id = (InternalDatasetDetails) dataset.getDatasetDetails(); Index primaryIndex = Index.createPrimaryIndex(dataset.getDatabaseName(), dataset.getDataverseName(), dataset.getDatasetName(), id.getPrimaryKey(), id.getKeySourceIndicator(), - id.getPrimaryKeyType(), dataset.getPendingOp()); + id.getPrimaryKeyType(), dataset.getPendingOp(), dataset.getCreator()); addIndex(txnId, primaryIndex); } diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java index 7ec1b51..6077d29 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java @@ -172,7 +172,7 @@ public void dropIndex(String database, DataverseName dataverseName, String datasetName, String indexName) { Index index = new Index(database, dataverseName, datasetName, indexName, null, null, false, false, - MetadataUtil.PENDING_NO_OP); + MetadataUtil.PENDING_NO_OP, null); droppedCache.addIndexIfNotExists(index); logAndApply(new MetadataLogicalOperation(index, false)); } diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java index 1e95d0b..df44ecf 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java @@ -32,7 +32,8 @@ FUNCTION, DATABASE, DATAVERSE, - SYNONYM + SYNONYM, + INDEX } private final String databaseName; @@ -71,6 +72,10 @@ return new EntityDetails(databaseName, dataverseName, synonymName, EntityType.SYNONYM); } + public static EntityDetails newIndex(String databaseName, DataverseName dataverseName, String indexName) { + return new EntityDetails(databaseName, dataverseName, indexName, EntityType.INDEX); + } + public String getDatabaseName() { return databaseName; } diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java index 66192e0..4709c13 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Index.java @@ -34,6 +34,7 @@ import org.apache.asterix.common.transactions.IRecoveryManager.ResourceType; import org.apache.asterix.metadata.MetadataCache; import org.apache.asterix.metadata.api.IMetadataEntity; +import org.apache.asterix.metadata.utils.Creator; import org.apache.asterix.metadata.utils.IndexUtil; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.AUnionType; @@ -66,10 +67,11 @@ private final boolean isEnforced; // Type of pending operations with respect to atomic DDL operation private int pendingOp; + private final Creator creator; public Index(String databaseName, DataverseName dataverseName, String datasetName, String indexName, - IndexType indexType, IIndexDetails indexDetails, boolean isEnforced, boolean isPrimaryIndex, - int pendingOp) { + IndexType indexType, IIndexDetails indexDetails, boolean isEnforced, boolean isPrimaryIndex, int pendingOp, + Creator creator) { boolean categoryOk = (indexType == null && indexDetails == null) || (IndexCategory .of(Objects.requireNonNull(indexType)) == ((AbstractIndexDetails) Objects.requireNonNull(indexDetails)) .getIndexCategory()); @@ -85,26 +87,27 @@ this.isPrimaryIndex = isPrimaryIndex; this.isEnforced = isEnforced; this.pendingOp = pendingOp; + this.creator = creator; } @Deprecated public Index(String database, DataverseName dataverseName, String datasetName, String indexName, IndexType indexType, List<List<String>> keyFieldNames, List<Integer> keyFieldSourceIndicators, List<IAType> keyFieldTypes, boolean overrideKeyFieldTypes, boolean isEnforced, boolean isPrimaryIndex, - int pendingOp, OptionalBoolean excludeUnknownKey) { + int pendingOp, OptionalBoolean excludeUnknownKey, Creator creator) { this(database, dataverseName, datasetName, indexName, indexType, createSimpleIndexDetails(indexType, keyFieldNames, keyFieldSourceIndicators, keyFieldTypes, overrideKeyFieldTypes, excludeUnknownKey), - isEnforced, isPrimaryIndex, pendingOp); + isEnforced, isPrimaryIndex, pendingOp, creator); } public static Index createPrimaryIndex(String database, DataverseName dataverseName, String datasetName, List<List<String>> keyFieldNames, List<Integer> keyFieldSourceIndicators, List<IAType> keyFieldTypes, - int pendingOp) { - return new Index(database, dataverseName, datasetName, - datasetName, IndexType.BTREE, new ValueIndexDetails(keyFieldNames, keyFieldSourceIndicators, - keyFieldTypes, false, OptionalBoolean.empty(), OptionalBoolean.empty(), null, null, null), - false, true, pendingOp); + int pendingOp, Creator creator) { + return new Index(database, dataverseName, datasetName, datasetName, IndexType.BTREE, + new ValueIndexDetails(keyFieldNames, keyFieldSourceIndicators, keyFieldTypes, false, + OptionalBoolean.empty(), OptionalBoolean.empty(), null, null, null), + false, true, pendingOp, creator); } public String getDatabaseName() { @@ -155,6 +158,10 @@ return !isPrimaryIndex(); } + public Creator getCreator() { + return creator; + } + public boolean isPrimaryKeyIndex() { // a primary key index has no key field names return indexType == IndexType.BTREE && ((ValueIndexDetails) indexDetails).keyFieldNames.isEmpty(); diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java index 453ccc1..deca260 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java @@ -42,10 +42,12 @@ import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider; import org.apache.asterix.metadata.MetadataNode; import org.apache.asterix.metadata.bootstrap.IndexEntity; +import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes; import org.apache.asterix.metadata.declared.MetadataManagerUtil; import org.apache.asterix.metadata.entities.Dataset; import org.apache.asterix.metadata.entities.Datatype; import org.apache.asterix.metadata.entities.Index; +import org.apache.asterix.metadata.utils.Creator; import org.apache.asterix.metadata.utils.KeyFieldTypeUtil; import org.apache.asterix.om.base.ABoolean; import org.apache.asterix.om.base.ACollectionCursor; @@ -60,6 +62,7 @@ import org.apache.asterix.om.base.AString; import org.apache.asterix.om.base.IACursor; import org.apache.asterix.om.base.IAObject; +import org.apache.asterix.om.pointables.base.DefaultOpenFieldType; import org.apache.asterix.om.types.AOrderedListType; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; @@ -535,9 +538,10 @@ isEnforcingKeys = ((ABoolean) indexRecord.getValueByPos(isEnforcedFieldPos)).getBoolean(); } int pendingOp = ((AInt32) indexRecord.getValueByPos(indexEntity.pendingOpIndex())).getIntegerValue(); + Creator creator = Creator.createOrDefault(indexRecord); return new Index(databaseName, dataverseName, datasetName, indexName, indexType, indexDetails, isEnforcingKeys, - isPrimaryIndex, pendingOp); + isPrimaryIndex, pendingOp, creator); } @Override @@ -683,6 +687,7 @@ writeExcludeUnknownKey(index); writeCast(index); writeSampleDetails(index); + writeIndexCreator(index); } private void writeComplexSearchKeys(Index.ArrayIndexDetails indexDetails) throws HyracksDataException { @@ -1014,4 +1019,35 @@ } } } + + private void writeIndexCreator(Index index) throws HyracksDataException { + if (indexEntity.databaseNameIndex() >= 0) { + Creator creatorInfo = index.getCreator(); + RecordBuilder creatorObject = new RecordBuilder(); + creatorObject.reset(DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE); + + fieldName.reset(); + aString.setValue(MetadataRecordTypes.FIELD_NAME_CREATOR_NAME); + stringSerde.serialize(aString, fieldName.getDataOutput()); + fieldValue.reset(); + aString.setValue(creatorInfo.getName()); + stringSerde.serialize(aString, fieldValue.getDataOutput()); + creatorObject.addField(fieldName, fieldValue); + + fieldName.reset(); + aString.setValue(MetadataRecordTypes.FIELD_NAME_CREATOR_UUID); + stringSerde.serialize(aString, fieldName.getDataOutput()); + fieldValue.reset(); + aString.setValue(creatorInfo.getUuid()); + stringSerde.serialize(aString, fieldValue.getDataOutput()); + creatorObject.addField(fieldName, fieldValue); + + fieldName.reset(); + aString.setValue(MetadataRecordTypes.CREATOR_ARECORD_FIELD_NAME); + stringSerde.serialize(aString, fieldName.getDataOutput()); + fieldValue.reset(); + creatorObject.write(fieldValue.getDataOutput(), true); + recordBuilder.addField(fieldName, fieldValue); + } + } } diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java index 67e4606..dda2111 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java @@ -94,7 +94,8 @@ public static Index getPrimaryIndex(Dataset dataset) { InternalDatasetDetails id = (InternalDatasetDetails) dataset.getDatasetDetails(); return Index.createPrimaryIndex(dataset.getDatabaseName(), dataset.getDataverseName(), dataset.getDatasetName(), - id.getPartitioningKey(), id.getKeySourceIndicator(), id.getPrimaryKeyType(), dataset.getPendingOp()); + id.getPartitioningKey(), id.getKeySourceIndicator(), id.getPrimaryKeyType(), dataset.getPendingOp(), + dataset.getCreator()); } public static int[] getBtreeFieldsIfFiltered(Dataset dataset, Index index) throws AlgebricksException { diff --git a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java index 507b3bd..713518d 100644 --- a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java +++ b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslatorTest.java @@ -82,7 +82,8 @@ Index index = new Index(dvTestDatabase, dvTest, "d1", "i1", IndexType.BTREE, Collections.singletonList(Collections.singletonList("row_id")), indicator == null ? null : Collections.singletonList(indicator), - Collections.singletonList(BuiltinType.AINT64), false, false, false, 0, OptionalBoolean.of(false)); + Collections.singletonList(BuiltinType.AINT64), false, false, false, 0, OptionalBoolean.of(false), + null); MetadataNode mockMetadataNode = mock(MetadataNode.class); when(mockMetadataNode.getDatatype(any(), anyString(), any(DataverseName.class), anyString())) -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18948 To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Change-Id: I4c61edec9731a5ab5f6aefc5cdd7e7c3953df31e Gerrit-Change-Number: 18948 Gerrit-PatchSet: 5 Gerrit-Owner: Janhavi Tripurwar <[email protected]> Gerrit-Reviewer: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Murtadha Hubail <[email protected]> Gerrit-MessageType: merged
