>From Janhavi Tripurwar <[email protected]>:
Janhavi Tripurwar has uploaded this change for review. (
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
---
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-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-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
14 files changed, 108 insertions(+), 40 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/48/18948/1
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 c84bcc7..0b376ae 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);
@@ -1292,7 +1293,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();
@@ -1309,7 +1310,7 @@
fullTextConfigName);
try {
doCreateIndex(metadataProvider, stmtCreateIndex, databaseName,
dataverseName, datasetName, hcc,
- requestParameters);
+ requestParameters, creator);
} finally {
metadataProvider.getLocks().unlock();
}
@@ -1317,7 +1318,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;
@@ -1642,10 +1643,12 @@
}
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.createWithoutType(databaseName, dataverseName, indexName);
+ bActiveTxn = false; // doCreateIndexImpl() takes over the current
transaction
+ doCreateIndexImpl(hcc, metadataProvider, ds, newIndex, jobFlags,
sourceLoc, creator, entityDetails);
} catch (Exception e) {
if (bActiveTxn) {
@@ -1790,7 +1793,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();
@@ -1869,6 +1873,7 @@
"Failed to create job spec for creating index '" +
ds.getDatasetName() + "."
+ index.getIndexName() + "'");
}
+ beforeTxnCommit(metadataProvider, creator, entityDetails,
EntityDetails.EntityType.INDEX);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
bActiveTxn = false;
@@ -4892,7 +4897,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);
@@ -4934,7 +4939,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();
@@ -5198,7 +5203,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/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 801cbac..a80c9bf 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;
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: 1
Gerrit-Owner: Janhavi Tripurwar <[email protected]>
Gerrit-MessageType: newchange