This is an automated email from the ASF dual-hosted git repository.
alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new c39cdf11de [ASTERIXDB-3483][MTD]: Metadata changes for Owner
c39cdf11de is described below
commit c39cdf11decae2152bd2ed89e68bee23cd5880e5
Author: janhavitripurwar <[email protected]>
AuthorDate: Wed Aug 7 15:42:42 2024 +0530
[ASTERIXDB-3483][MTD]: Metadata changes for Owner
- user model changes: no
- storage format changes: no
- interface changes: yes
Details
- Introducethe default owner '@sys'.
- Add 'ownerName' field in the open part of the record
in database and dataverse entities.
- Extend 'handleCreateDatabaseStatement' and
'handleCreateDataverseStatement' to pass the owner name.
- This change is backward Compatible. Database and
Dataverse records with and without owner fields stay
together, For example:
{
Database: {
DatabaseName: "db",
SystemDatabase: false,
Timestamp: "Tue Aug 13 10:30:34 IST 2024",
PendingOp: 0
}
}
{
Database: {
DatabaseName: "db1",
SystemDatabase: false,
Timestamp: "Tue Aug 13 10:48:54 IST 2024",
PendingOp: 0,
OwnerName: "@sys"
}
}
Ext-ref: MB-62971
Change-Id: If799816f5f6a076cc1f5f95c2080f1414fdf2352
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18628
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Janhavi Tripurwar <[email protected]>
Reviewed-by: Ali Alsuliman <[email protected]>
Tested-by: Ali Alsuliman <[email protected]>
---
.../asterix/app/translator/QueryTranslator.java | 34 +++++++++++----------
.../asterix/app/bootstrap/TestNodeController.java | 9 +++---
.../asterix/common/metadata/MetadataConstants.java | 3 ++
.../metadata/MetadataTransactionContext.java | 4 +--
.../bootstrap/MetadataBuiltinEntities.java | 19 ++++++------
.../metadata/bootstrap/MetadataRecordTypes.java | 3 ++
.../apache/asterix/metadata/entities/Database.java | 8 ++++-
.../asterix/metadata/entities/Dataverse.java | 8 ++++-
.../DatabaseTupleTranslator.java | 32 +++++++++++++++++++-
.../DataverseTupleTranslator.java | 35 ++++++++++++++++++++--
10 files changed, 120 insertions(+), 35 deletions(-)
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 0c736a245b..26020e53a1 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
@@ -383,10 +383,12 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
activeNamespace =
handleUseDataverseStatement(metadataProvider, stmt);
break;
case CREATE_DATABASE:
- handleCreateDatabaseStatement(metadataProvider, stmt,
requestParameters);
+ handleCreateDatabaseStatement(metadataProvider, stmt,
requestParameters,
+ MetadataConstants.DEFAULT_OWNER);
break;
case CREATE_DATAVERSE:
- handleCreateDataverseStatement(metadataProvider, stmt,
requestParameters);
+ handleCreateDataverseStatement(metadataProvider, stmt,
requestParameters,
+ MetadataConstants.DEFAULT_OWNER);
break;
case DATASET_DECL:
handleCreateDatasetStatement(metadataProvider, stmt,
hcc, requestParameters);
@@ -656,7 +658,7 @@ public class QueryTranslator extends AbstractLangTranslator
implements IStatemen
}
protected void handleCreateDatabaseStatement(MetadataProvider
metadataProvider, Statement stmt,
- IRequestParameters requestParameters) throws Exception {
+ IRequestParameters requestParameters, String ownerName) throws
Exception {
CreateDatabaseStatement stmtCreateDatabase = (CreateDatabaseStatement)
stmt;
String database = stmtCreateDatabase.getDatabaseName().getValue();
metadataProvider.validateDatabaseName(database,
stmt.getSourceLocation());
@@ -665,14 +667,14 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
}
lockUtil.createDatabaseBegin(lockManager, metadataProvider.getLocks(),
database);
try {
- doCreateDatabaseStatement(metadataProvider, stmtCreateDatabase,
requestParameters);
+ doCreateDatabaseStatement(metadataProvider, stmtCreateDatabase,
requestParameters, ownerName);
} finally {
metadataProvider.getLocks().unlock();
}
}
protected boolean doCreateDatabaseStatement(MetadataProvider mdProvider,
CreateDatabaseStatement stmtCreateDatabase,
- IRequestParameters requestParameters) throws Exception {
+ IRequestParameters requestParameters, String ownerName) throws
Exception {
MetadataTransactionContext mdTxnCtx =
MetadataManager.INSTANCE.beginTransaction();
mdProvider.setMetadataTxnContext(mdTxnCtx);
try {
@@ -687,8 +689,9 @@ public class QueryTranslator extends AbstractLangTranslator
implements IStatemen
databaseName);
}
}
+
MetadataManager.INSTANCE.addDatabase(mdTxnCtx,
- new Database(databaseName, false,
MetadataUtil.PENDING_NO_OP));
+ new Database(databaseName, false, ownerName,
MetadataUtil.PENDING_NO_OP));
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return true;
} catch (Exception e) {
@@ -698,7 +701,7 @@ public class QueryTranslator extends AbstractLangTranslator
implements IStatemen
}
protected void handleCreateDataverseStatement(MetadataProvider
metadataProvider, Statement stmt,
- IRequestParameters requestParameters) throws Exception {
+ IRequestParameters requestParameters, String ownerName) throws
Exception {
CreateDataverseStatement stmtCreateDataverse =
(CreateDataverseStatement) stmt;
DataverseName dvName = stmtCreateDataverse.getDataverseName();
String dbName = stmtCreateDataverse.getDatabaseName();
@@ -709,7 +712,7 @@ public class QueryTranslator extends AbstractLangTranslator
implements IStatemen
}
lockUtil.createDataverseBegin(lockManager,
metadataProvider.getLocks(), dbName, dvName);
try {
- doCreateDataverseStatement(metadataProvider, stmtCreateDataverse,
requestParameters);
+ doCreateDataverseStatement(metadataProvider, stmtCreateDataverse,
requestParameters, ownerName);
} finally {
metadataProvider.getLocks().unlock();
}
@@ -717,7 +720,8 @@ public class QueryTranslator extends AbstractLangTranslator
implements IStatemen
@SuppressWarnings("squid:S00112")
protected boolean doCreateDataverseStatement(MetadataProvider
metadataProvider,
- CreateDataverseStatement stmtCreateDataverse, IRequestParameters
requestParameters) throws Exception {
+ CreateDataverseStatement stmtCreateDataverse, IRequestParameters
requestParameters, String ownerName)
+ throws Exception {
MetadataTransactionContext mdTxnCtx =
MetadataManager.INSTANCE.beginTransaction();
metadataProvider.setMetadataTxnContext(mdTxnCtx);
try {
@@ -740,8 +744,8 @@ public class QueryTranslator extends AbstractLangTranslator
implements IStatemen
dvName);
}
}
-
MetadataManager.INSTANCE.addDataverse(metadataProvider.getMetadataTxnContext(),
- new Dataverse(dbName, dvName,
stmtCreateDataverse.getFormat(), MetadataUtil.PENDING_NO_OP));
+
MetadataManager.INSTANCE.addDataverse(metadataProvider.getMetadataTxnContext(),
new Dataverse(dbName,
+ dvName, stmtCreateDataverse.getFormat(),
MetadataUtil.PENDING_NO_OP, ownerName));
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return true;
} catch (Exception e) {
@@ -2068,8 +2072,8 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
// second, inserting the database record with the PendingDropOp
value into the 'Database' collection
// Note: the delete operation fails if the database cannot be
deleted due to metadata dependencies
MetadataManager.INSTANCE.dropDatabase(mdTxnCtx, databaseName);
- MetadataManager.INSTANCE.addDatabase(mdTxnCtx,
- new Database(databaseName, database.isSystemDatabase(),
MetadataUtil.PENDING_DROP_OP));
+ MetadataManager.INSTANCE.addDatabase(mdTxnCtx, new
Database(databaseName, database.isSystemDatabase(),
+ MetadataConstants.DEFAULT_OWNER,
MetadataUtil.PENDING_DROP_OP));
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
bActiveTxn = false;
@@ -2254,8 +2258,8 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
// second, inserting the dataverse record with the PendingDropOp
value into the DATAVERSE_DATASET
// Note: the delete operation fails if the dataverse cannot be
deleted due to metadata dependencies
MetadataManager.INSTANCE.dropDataverse(mdTxnCtx, databaseName,
dataverseName);
- MetadataManager.INSTANCE.addDataverse(mdTxnCtx,
- new Dataverse(databaseName, dataverseName,
dv.getDataFormat(), MetadataUtil.PENDING_DROP_OP));
+ MetadataManager.INSTANCE.addDataverse(mdTxnCtx, new
Dataverse(databaseName, dataverseName,
+ dv.getDataFormat(), MetadataUtil.PENDING_DROP_OP,
MetadataConstants.DEFAULT_OWNER));
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
bActiveTxn = false;
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 8aa25ad2ba..2af06b74f7 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
@@ -36,6 +36,7 @@ import
org.apache.asterix.common.context.TransactionSubsystemProvider;
import org.apache.asterix.common.dataflow.ICcApplicationContext;
import org.apache.asterix.common.dataflow.LSMInsertDeleteOperatorNodePushable;
import org.apache.asterix.common.exceptions.ACIDException;
+import org.apache.asterix.common.metadata.MetadataConstants;
import org.apache.asterix.common.metadata.MetadataUtil;
import org.apache.asterix.common.metadata.Namespace;
import org.apache.asterix.common.metadata.NamespacePathResolver;
@@ -500,7 +501,7 @@ public class TestNodeController {
PrimaryIndexInfo primaryIndexInfo = new PrimaryIndexInfo(dataset,
primaryKeyTypes, recordType, metaType,
mergePolicy.first, mergePolicy.second, filterFields,
primaryKeyIndexes, primaryKeyIndicators);
Dataverse dataverse = new Dataverse(dataset.getDatabaseName(),
dataset.getDataverseName(),
- NonTaggedDataFormat.class.getName(),
MetadataUtil.PENDING_NO_OP);
+ NonTaggedDataFormat.class.getName(),
MetadataUtil.PENDING_NO_OP, MetadataConstants.DEFAULT_OWNER);
Namespace namespace = new Namespace(dataverse.getDatabaseName(),
dataverse.getDataverseName());
MetadataProvider mdProvider = MetadataProvider.create(
(ICcApplicationContext)
ExecutionTestUtil.integrationUtil.cc.getApplicationContext(), namespace);
@@ -526,9 +527,9 @@ public class TestNodeController {
org.apache.hyracks.algebricks.common.utils.Pair<ILSMMergePolicyFactory,
Map<String, String>> mergePolicy =
DatasetUtil.getMergePolicyFactory(primaryIndexInfo.dataset,
mdTxnCtx);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
- Dataverse dataverse =
- new Dataverse(primaryIndexInfo.dataset.getDatabaseName(),
primaryIndexInfo.dataset.getDataverseName(),
- NonTaggedDataFormat.class.getName(),
MetadataUtil.PENDING_NO_OP);
+ Dataverse dataverse = new
Dataverse(primaryIndexInfo.dataset.getDatabaseName(),
+ primaryIndexInfo.dataset.getDataverseName(),
NonTaggedDataFormat.class.getName(),
+ MetadataUtil.PENDING_NO_OP, MetadataConstants.DEFAULT_OWNER);
Namespace namespace = new Namespace(dataverse.getDatabaseName(),
dataverse.getDataverseName());
MetadataProvider mdProvider = MetadataProvider.create(
(ICcApplicationContext)
ExecutionTestUtil.integrationUtil.cc.getApplicationContext(), namespace);
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/MetadataConstants.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/MetadataConstants.java
index 9b1d5ae934..5bff2c148f 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/MetadataConstants.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/metadata/MetadataConstants.java
@@ -38,6 +38,9 @@ public class MetadataConstants {
public static final String SYSTEM_DATABASE = "System";
public static final String DEFAULT_DATABASE = "Default";
+ // Pre-defined owner
+ public static final String DEFAULT_OWNER = "@sys";
+
// Name of the dataverse the metadata lives in.
public static final DataverseName METADATA_DATAVERSE_NAME =
DataverseName.createBuiltinDataverseName("Metadata");
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 aeb6d13d2d..76b8a0bf77 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
@@ -178,13 +178,13 @@ public class MetadataTransactionContext extends
MetadataCache {
}
public void dropDatabase(String databaseName) {
- Database database = new Database(databaseName, false,
MetadataUtil.PENDING_NO_OP);
+ Database database = new Database(databaseName, false, null,
MetadataUtil.PENDING_NO_OP);
droppedCache.addDatabaseIfNotExists(database);
logAndApply(new MetadataLogicalOperation(database, false));
}
public void dropDataverse(String database, DataverseName dataverseName) {
- Dataverse dataverse = new Dataverse(database, dataverseName, null,
MetadataUtil.PENDING_NO_OP);
+ Dataverse dataverse = new Dataverse(database, dataverseName, null,
MetadataUtil.PENDING_NO_OP, null);
droppedCache.addDataverseIfNotExists(dataverse);
logAndApply(new MetadataLogicalOperation(dataverse, false));
}
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBuiltinEntities.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBuiltinEntities.java
index 7b33682341..7f6034536a 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBuiltinEntities.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataBuiltinEntities.java
@@ -30,19 +30,20 @@ import
org.apache.asterix.runtime.formats.NonTaggedDataFormat;
public class MetadataBuiltinEntities {
//--------------------------------------- Databases
----------------------------------------//
- public static final Database SYSTEM_DATABASE =
- new Database(MetadataConstants.SYSTEM_DATABASE, true,
MetadataUtil.PENDING_NO_OP);
+ public static final Database SYSTEM_DATABASE = new
Database(MetadataConstants.SYSTEM_DATABASE, true,
+ MetadataConstants.DEFAULT_OWNER, MetadataUtil.PENDING_NO_OP);
- public static final Database DEFAULT_DATABASE =
- new Database(MetadataConstants.DEFAULT_DATABASE, false,
MetadataUtil.PENDING_NO_OP);
+ public static final Database DEFAULT_DATABASE = new
Database(MetadataConstants.DEFAULT_DATABASE, false,
+ MetadataConstants.DEFAULT_OWNER, MetadataUtil.PENDING_NO_OP);
//--------------------------------------- Dataverses
----------------------------------------//
- public static final Dataverse METADATA_DATAVERSE =
- new Dataverse(MetadataConstants.SYSTEM_DATABASE,
MetadataConstants.METADATA_DATAVERSE_NAME,
- NonTaggedDataFormat.NON_TAGGED_DATA_FORMAT,
MetadataUtil.PENDING_NO_OP);
+ public static final Dataverse METADATA_DATAVERSE = new
Dataverse(MetadataConstants.SYSTEM_DATABASE,
+ MetadataConstants.METADATA_DATAVERSE_NAME,
NonTaggedDataFormat.NON_TAGGED_DATA_FORMAT,
+ MetadataUtil.PENDING_NO_OP, MetadataConstants.DEFAULT_OWNER);
- public static final Dataverse DEFAULT_DATAVERSE = new
Dataverse(MetadataConstants.DEFAULT_DATABASE,
- MetadataConstants.DEFAULT_DATAVERSE_NAME,
NonTaggedDataFormat.class.getName(), MetadataUtil.PENDING_NO_OP);
+ public static final Dataverse DEFAULT_DATAVERSE =
+ new Dataverse(MetadataConstants.DEFAULT_DATABASE,
MetadataConstants.DEFAULT_DATAVERSE_NAME,
+ NonTaggedDataFormat.class.getName(),
MetadataUtil.PENDING_NO_OP, MetadataConstants.DEFAULT_OWNER);
//--------------------------------------- Datatypes
-----------------------------------------//
public static final Datatype ANY_OBJECT_DATATYPE =
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
index c35c03ac07..a6b38633c1 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/bootstrap/MetadataRecordTypes.java
@@ -130,6 +130,9 @@ public final class MetadataRecordTypes {
public static final String FIELD_NAME_FULL_TEXT_FILTER_PIPELINE =
"FullTextFilterPipeline";
public static final String FIELD_NAME_FULL_TEXT_STOPWORD_LIST =
"StopwordList";
+ //open field
+ public static final String FIELD_NAME_OWNER_NAME = "OwnerName";
+
//---------------------------------- Record Types Creation
----------------------------------//
//--------------------------------------- Properties
----------------------------------------//
public static final int PROPERTIES_NAME_FIELD_INDEX = 0;
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Database.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Database.java
index 8be93e3ccb..e734e51f30 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Database.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Database.java
@@ -33,11 +33,13 @@ public class Database implements IMetadataEntity<Database> {
private final String databaseName;
private final boolean isSystemDatabase;
+ private final String owner;
private final int pendingOp;
- public Database(String databaseName, boolean isSystemDatabase, int
pendingOp) {
+ public Database(String databaseName, boolean isSystemDatabase, String
owner, int pendingOp) {
this.databaseName = databaseName;
this.isSystemDatabase = isSystemDatabase;
+ this.owner = owner;
this.pendingOp = pendingOp;
}
@@ -49,6 +51,10 @@ public class Database implements IMetadataEntity<Database> {
return isSystemDatabase;
}
+ public String getOwnerName() {
+ return owner;
+ }
+
public int getPendingOp() {
return pendingOp;
}
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataverse.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataverse.java
index bba17636dd..a07a495554 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataverse.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataverse.java
@@ -35,12 +35,14 @@ public class Dataverse implements
IMetadataEntity<Dataverse> {
private final DataverseName dataverseName;
private final String dataFormat;
private final int pendingOp;
+ private final String ownerName;
- public Dataverse(String databaseName, DataverseName dataverseName, String
format, int pendingOp) {
+ public Dataverse(String databaseName, DataverseName dataverseName, String
format, int pendingOp, String ownerName) {
this.databaseName = Objects.requireNonNull(databaseName);
this.dataverseName = dataverseName;
this.dataFormat = format;
this.pendingOp = pendingOp;
+ this.ownerName = ownerName;
}
public String getDatabaseName() {
@@ -59,6 +61,10 @@ public class Dataverse implements IMetadataEntity<Dataverse>
{
return pendingOp;
}
+ public String getOwnerName() {
+ return ownerName;
+ }
+
@Override
public Dataverse addToCache(MetadataCache cache) {
return cache.addDataverseIfNotExists(this);
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatabaseTupleTranslator.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatabaseTupleTranslator.java
index 9752dc8655..9a5a5d8d8c 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatabaseTupleTranslator.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatabaseTupleTranslator.java
@@ -21,13 +21,16 @@ package org.apache.asterix.metadata.entitytupletranslators;
import java.util.Calendar;
+import org.apache.asterix.common.metadata.MetadataConstants;
import org.apache.asterix.metadata.bootstrap.DatabaseEntity;
+import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
import org.apache.asterix.metadata.entities.Database;
import org.apache.asterix.om.base.ABoolean;
import org.apache.asterix.om.base.AInt32;
import org.apache.asterix.om.base.AMutableInt32;
import org.apache.asterix.om.base.ARecord;
import org.apache.asterix.om.base.AString;
+import org.apache.asterix.om.types.ARecordType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
@@ -50,12 +53,20 @@ public class DatabaseTupleTranslator extends
AbstractTupleTranslator<Database> {
@Override
protected Database createMetadataEntityFromARecord(ARecord databaseRecord)
throws AlgebricksException {
+ ARecordType recType = databaseRecord.getType();
String databaseName =
((AString)
databaseRecord.getValueByPos(databaseEntity.databaseNameIndex())).getStringValue();
boolean isSystemDatabase =
((ABoolean)
databaseRecord.getValueByPos(databaseEntity.systemDatabaseIndex())).getBoolean();
+ int ownerIndex =
recType.getFieldIndex(MetadataRecordTypes.FIELD_NAME_OWNER_NAME);
+ String ownerName;
+ if (ownerIndex >= 0) {
+ ownerName = ((AString)
databaseRecord.getValueByPos(ownerIndex)).getStringValue();
+ } else {
+ ownerName = MetadataConstants.DEFAULT_OWNER;
+ }
int pendingOp = ((AInt32)
databaseRecord.getValueByPos(databaseEntity.pendingOpIndex())).getIntegerValue();
- return new Database(databaseName, isSystemDatabase, pendingOp);
+ return new Database(databaseName, isSystemDatabase, ownerName,
pendingOp);
}
@Override
@@ -94,6 +105,9 @@ public class DatabaseTupleTranslator extends
AbstractTupleTranslator<Database> {
int32Serde.serialize(aInt32, fieldValue.getDataOutput());
recordBuilder.addField(databaseEntity.pendingOpIndex(), fieldValue);
+ // write open fields
+ writeOpenFields(database);
+
// write the payload record
recordBuilder.write(tupleBuilder.getDataOutput(), true);
tupleBuilder.addFieldEndOffset();
@@ -101,4 +115,20 @@ public class DatabaseTupleTranslator extends
AbstractTupleTranslator<Database> {
tuple.reset(tupleBuilder.getFieldEndOffsets(),
tupleBuilder.getByteArray());
return tuple;
}
+
+ protected void writeOpenFields(Database database) throws
HyracksDataException {
+ writeDatabaseOwner(database);
+ }
+
+ private void writeDatabaseOwner(Database database) throws
HyracksDataException {
+ if (databaseEntity.databaseNameIndex() >= 0) {
+ fieldValue.reset();
+ aString.setValue(MetadataRecordTypes.FIELD_NAME_OWNER_NAME);
+ stringSerde.serialize(aString, fieldName.getDataOutput());
+ fieldValue.reset();
+ aString.setValue(database.getOwnerName());
+ stringSerde.serialize(aString, fieldValue.getDataOutput());
+ recordBuilder.addField(fieldName, fieldValue);
+ }
+ }
}
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DataverseTupleTranslator.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DataverseTupleTranslator.java
index 42fcfbb4b3..e2d097b079 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DataverseTupleTranslator.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DataverseTupleTranslator.java
@@ -22,13 +22,16 @@ package org.apache.asterix.metadata.entitytupletranslators;
import java.util.Calendar;
import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.common.metadata.MetadataConstants;
import org.apache.asterix.common.metadata.MetadataUtil;
import org.apache.asterix.metadata.bootstrap.DataverseEntity;
+import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
import org.apache.asterix.metadata.entities.Dataverse;
import org.apache.asterix.om.base.AInt32;
import org.apache.asterix.om.base.AMutableInt32;
import org.apache.asterix.om.base.ARecord;
import org.apache.asterix.om.base.AString;
+import org.apache.asterix.om.types.ARecordType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
@@ -51,20 +54,29 @@ public class DataverseTupleTranslator extends
AbstractTupleTranslator<Dataverse>
@Override
protected Dataverse createMetadataEntityFromARecord(ARecord
dataverseRecord) throws AlgebricksException {
+ ARecordType recType = dataverseRecord.getType();
+
String dataverseCanonicalName =
((AString)
dataverseRecord.getValueByPos(dataverseEntity.dataverseNameIndex())).getStringValue();
DataverseName dataverseName =
DataverseName.createFromCanonicalForm(dataverseCanonicalName);
int databaseNameIndex = dataverseEntity.databaseNameIndex();
- String databaseName;
+ int ownerNameIndex =
recType.getFieldIndex(MetadataRecordTypes.FIELD_NAME_OWNER_NAME);
+ String databaseName, ownerName;
if (databaseNameIndex >= 0) {
databaseName = ((AString)
dataverseRecord.getValueByPos(databaseNameIndex)).getStringValue();
} else {
databaseName = MetadataUtil.databaseFor(dataverseName);
}
+
+ if (ownerNameIndex >= 0) {
+ ownerName = ((AString)
dataverseRecord.getValueByPos(ownerNameIndex)).getStringValue();
+ } else {
+ ownerName = MetadataConstants.DEFAULT_OWNER;
+ }
String format = ((AString)
dataverseRecord.getValueByPos(dataverseEntity.dataFormatIndex())).getStringValue();
int pendingOp = ((AInt32)
dataverseRecord.getValueByPos(dataverseEntity.pendingOpIndex())).getIntegerValue();
- return new Dataverse(databaseName, dataverseName, format, pendingOp);
+ return new Dataverse(databaseName, dataverseName, format, pendingOp,
ownerName);
}
@Override
@@ -115,6 +127,9 @@ public class DataverseTupleTranslator extends
AbstractTupleTranslator<Dataverse>
int32Serde.serialize(aInt32, fieldValue.getDataOutput());
recordBuilder.addField(dataverseEntity.pendingOpIndex(), fieldValue);
+ // write open fields
+ writeOpenFields(dataverse);
+
// write record
recordBuilder.write(tupleBuilder.getDataOutput(), true);
tupleBuilder.addFieldEndOffset();
@@ -122,4 +137,20 @@ public class DataverseTupleTranslator extends
AbstractTupleTranslator<Dataverse>
tuple.reset(tupleBuilder.getFieldEndOffsets(),
tupleBuilder.getByteArray());
return tuple;
}
+
+ protected void writeOpenFields(Dataverse dataverse) throws
HyracksDataException {
+ writeDataverseOwner(dataverse);
+ }
+
+ private void writeDataverseOwner(Dataverse dataverse) throws
HyracksDataException {
+ if (dataverseEntity.databaseNameIndex() >= 0) {
+ fieldValue.reset();
+ aString.setValue(MetadataRecordTypes.FIELD_NAME_OWNER_NAME);
+ stringSerde.serialize(aString, fieldName.getDataOutput());
+ fieldValue.reset();
+ aString.setValue(dataverse.getOwnerName());
+ stringSerde.serialize(aString, fieldValue.getDataOutput());
+ recordBuilder.addField(fieldName, fieldValue);
+ }
+ }
}