>From Janhavi Tripurwar <[email protected]>:

Janhavi Tripurwar has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18943 )


Change subject: [ASTERIXDB-3483]: WIP Function Owner changes
......................................................................

[ASTERIXDB-3483]: WIP Function Owner changes

Change-Id: I4491f53200a20f2598dd9e3a72424f5050076c89
---
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-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
5 files changed, 77 insertions(+), 17 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/43/18943/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 ac5207c..f52d6f3 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
@@ -443,7 +443,8 @@
                         handleAdapterDropStatement(metadataProvider, stmt);
                         break;
                     case CREATE_FUNCTION:
-                        handleCreateFunctionStatement(metadataProvider, stmt, 
stmtRewriter, requestParameters);
+                        handleCreateFunctionStatement(metadataProvider, stmt, 
stmtRewriter, requestParameters,
+                                Creator.DEFAULT_CREATOR);
                         break;
                     case FUNCTION_DROP:
                         handleFunctionDropStatement(metadataProvider, stmt, 
requestParameters);
@@ -695,7 +696,7 @@
                 }
             }

-            beforeTxnCommit(mdProvider, creator, 
EntityDetails.createWithoutType(databaseName, null, null),
+            beforeTxnCommit(mdProvider, creator, 
EntityDetails.createWithoutType(databaseName, null, null, 0),
                     EntityDetails.EntityType.DATABASE);
             MetadataManager.INSTANCE.addDatabase(mdTxnCtx,
                     new Database(databaseName, false, 
MetadataUtil.PENDING_NO_OP, creator));
@@ -751,7 +752,7 @@
                             dvName);
                 }
             }
-            beforeTxnCommit(metadataProvider, creator, 
EntityDetails.createWithoutType(dbName, dvName, null),
+            beforeTxnCommit(metadataProvider, creator, 
EntityDetails.createWithoutType(dbName, dvName, null, 0),
                     EntityDetails.EntityType.DATAVERSE);
             
MetadataManager.INSTANCE.addDataverse(metadataProvider.getMetadataTxnContext(), 
new Dataverse(dbName,
                     dvName, stmtCreateDataverse.getFormat(), 
MetadataUtil.PENDING_NO_OP, creator));
@@ -1082,7 +1083,7 @@
             dataset.setPendingOp(MetadataUtil.PENDING_NO_OP);
             
MetadataManager.INSTANCE.addDataset(metadataProvider.getMetadataTxnContext(), 
dataset);
             beforeTxnCommit(metadataProvider, creator,
-                    EntityDetails.createWithoutType(databaseName, 
dataverseName, datasetName),
+                    EntityDetails.createWithoutType(databaseName, 
dataverseName, datasetName, 0),
                     EntityDetails.EntityType.DATASET);
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
         } catch (Exception e) {
@@ -2991,7 +2992,7 @@
                 MetadataManager.INSTANCE.updateDataset(mdTxnCtx, view);
             }
             beforeTxnCommit(metadataProvider, creator,
-                    EntityDetails.createWithoutType(databaseName, 
dataverseName, viewName),
+                    EntityDetails.createWithoutType(databaseName, 
dataverseName, viewName, 0),
                     EntityDetails.EntityType.VIEW);
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             return existingDataset != null ? CreateResult.REPLACED : 
CreateResult.CREATED;
@@ -3084,7 +3085,7 @@
     }

     public void handleCreateFunctionStatement(MetadataProvider 
metadataProvider, Statement stmt,
-            IStatementRewriter stmtRewriter, IRequestParameters 
requestParameters) throws Exception {
+            IStatementRewriter stmtRewriter, IRequestParameters 
requestParameters, Creator creator) throws Exception {
         CreateFunctionStatement cfs = (CreateFunctionStatement) stmt;
         FunctionSignature signature = cfs.getFunctionSignature();
         DataverseName funDataverse = signature.getDataverseName();
@@ -3117,7 +3118,7 @@
         lockUtil.createFunctionBegin(lockManager, metadataProvider.getLocks(), 
databaseName, dataverseName,
                 signature.getName(), libraryDatabaseName, 
libraryDataverseName, libraryName);
         try {
-            doCreateFunction(metadataProvider, cfs, signature, stmtRewriter, 
requestParameters);
+            doCreateFunction(metadataProvider, cfs, signature, stmtRewriter, 
requestParameters, creator);
         } finally {
             metadataProvider.getLocks().unlock();
             metadataProvider.setDefaultNamespace(activeNamespace);
@@ -3125,8 +3126,8 @@
     }

     protected CreateResult doCreateFunction(MetadataProvider metadataProvider, 
CreateFunctionStatement cfs,
-            FunctionSignature functionSignature, IStatementRewriter 
stmtRewriter, IRequestParameters requestParameters)
-            throws Exception {
+            FunctionSignature functionSignature, IStatementRewriter 
stmtRewriter, IRequestParameters requestParameters,
+            Creator creator) throws Exception {
         DataverseName dataverseName = functionSignature.getDataverseName();
         String databaseName = functionSignature.getDatabaseName();
         SourceLocation sourceLoc = cfs.getSourceLocation();
@@ -3243,7 +3244,7 @@
                 function = new Function(functionSignature, paramNames, 
paramTypes, returnTypeSignature, null,
                         FunctionKind.SCALAR.toString(), library.getLanguage(), 
libraryDatabaseName,
                         libraryDataverseName, libraryName, externalIdentifier, 
cfs.getNullCall(),
-                        cfs.getDeterministic(), cfs.getResources(), 
dependencies);
+                        cfs.getDeterministic(), cfs.getResources(), 
dependencies, creator);
             } else {
                 List<Pair<VarIdentifier, TypeExpression>> paramList = 
cfs.getParameters();
                 int paramCount = paramList.size();
@@ -3282,7 +3283,7 @@
                 newInlineTypes = Collections.emptyMap();
                 function = new Function(functionSignature, paramNames, null, 
null, cfs.getFunctionBody(),
                         FunctionKind.SCALAR.toString(), 
compilationProvider.getParserFactory().getLanguage(), null,
-                        null, null, null, null, null, null, dependencies);
+                        null, null, null, null, null, null, dependencies, 
creator);
             }

             if (existingFunction == null) {
@@ -3308,6 +3309,8 @@
                 }
                 MetadataManager.INSTANCE.updateFunction(mdTxnCtx, function);
             }
+            beforeTxnCommit(metadataProvider, creator, 
EntityDetails.createWithoutType(databaseName, dataverseName,
+                    function.getName(), function.getArity()), 
EntityDetails.EntityType.FUNCTION);
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             if (LOGGER.isInfoEnabled()) {
                 LOGGER.info("Installed function: " + functionSignature);
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..7bcbfac 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
@@ -203,7 +203,7 @@

     public void dropFunction(FunctionSignature signature) {
         Function function = new Function(signature, null, null, null, null, 
null, null, null, null, null, null, false,
-                false, null, null);
+                false, null, null, null);
         droppedCache.addFunctionIfNotExists(function);
         logAndApply(new MetadataLogicalOperation(function, 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 dbe3c76..dfc49c5 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
@@ -38,11 +38,13 @@
     private final DataverseName dataverseName;
     private final String entityName;
     private EntityType entityType;
+    private int entityArity;

-    private EntityDetails(String databaseName, DataverseName dataverseName, 
String entityName) {
+    private EntityDetails(String databaseName, DataverseName dataverseName, 
String entityName, int entityArity) {
         this.databaseName = databaseName;
         this.dataverseName = dataverseName;
         this.entityName = entityName;
+        this.entityArity = entityArity;
     }

     private EntityDetails(String databaseName, DataverseName dataverseName, 
String entityName, EntityType entityType) {
@@ -57,8 +59,9 @@
         return new EntityDetails(databaseName, dataverseName, entityName, 
entityType);
     }

-    public static EntityDetails createWithoutType(String databaseName, 
DataverseName dataverseName, String entityName) {
-        return new EntityDetails(databaseName, dataverseName, entityName);
+    public static EntityDetails createWithoutType(String databaseName, 
DataverseName dataverseName, String entityName,
+            int entityArity) {
+        return new EntityDetails(databaseName, dataverseName, entityName, 
entityArity);
     }

     public String getDatabaseName() {
@@ -76,4 +79,8 @@
     public EntityType getEntityType() {
         return entityType;
     }
+
+    public int getEntityArity() {
+        return entityArity;
+    }
 }
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
index 82c9514..3c1515b 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
@@ -29,6 +29,7 @@
 import org.apache.asterix.common.metadata.DependencyFullyQualifiedName;
 import org.apache.asterix.metadata.MetadataCache;
 import org.apache.asterix.metadata.api.IMetadataEntity;
+import org.apache.asterix.metadata.utils.Creator;
 import org.apache.asterix.om.types.TypeSignature;

 public class Function implements IMetadataEntity<Function> {
@@ -49,12 +50,13 @@
     private final Boolean nullCall; // null for SQL++ and AQL functions
     private final Map<String, String> resources;
     private final List<List<DependencyFullyQualifiedName>> dependencies;
+    private final Creator creator;

     public Function(FunctionSignature signature, List<String> paramNames, 
List<TypeSignature> paramTypes,
             TypeSignature returnType, String functionBody, String 
functionKind, String language,
             String libraryDatabaseName, DataverseName libraryDataverseName, 
String libraryName,
             List<String> externalIdentifier, Boolean nullCall, Boolean 
deterministic, Map<String, String> resources,
-            List<List<DependencyFullyQualifiedName>> dependencies) {
+            List<List<DependencyFullyQualifiedName>> dependencies, Creator 
creator) {
         this.signature = signature;
         this.paramNames = paramNames;
         this.paramTypes = paramTypes;
@@ -72,6 +74,7 @@
         this.dependencies = dependencies == null
                 ? Arrays.asList(Collections.emptyList(), 
Collections.emptyList(), Collections.emptyList())
                 : dependencies;
+        this.creator = creator;
     }

     public FunctionSignature getSignature() {
@@ -161,6 +164,10 @@
         return dependencies;
     }

+    public Creator getCreator() {
+        return creator;
+    }
+
     @Override
     public Function addToCache(MetadataCache cache) {
         return cache.addFunctionIfNotExists(this);
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
index 8191212..2741d12 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
@@ -61,6 +61,7 @@
 import org.apache.asterix.metadata.bootstrap.FunctionEntity;
 import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
 import org.apache.asterix.metadata.entities.Function;
+import org.apache.asterix.metadata.utils.Creator;
 import org.apache.asterix.om.base.ABoolean;
 import org.apache.asterix.om.base.ANull;
 import org.apache.asterix.om.base.AOrderedList;
@@ -203,10 +204,11 @@
         }

         FunctionSignature signature = new FunctionSignature(databaseName, 
dataverseName, functionName, arity);
+        Creator creator = Creator.createOrDefault(functionRecord);
 
         return new Function(signature, paramNames, paramTypes, returnType, 
definition, functionKind, language,
                 libraryDatabaseName, libraryDataverseName, libraryName, 
externalIdentifier, nullCall, deterministic,
-                resources, dependencies);
+                resources, dependencies, creator);
     }

     private List<TypeSignature> getParamTypes(ARecord functionRecord, String 
functionDatabaseName,
@@ -432,6 +434,7 @@
         writeLibrary(function);
         writeNullCall(function);
         writeDeterministic(function);
+        writeFunctionCreator(function);
     }

     protected void writeResources(Function function) throws 
HyracksDataException {
@@ -688,4 +691,35 @@
                 throw new AsterixException(ErrorCode.METADATA_ERROR, language);
         }
     }
+
+    private void writeFunctionCreator(Function function) throws 
HyracksDataException {
+        if (functionEntity.databaseNameIndex() >= 0) {
+            Creator creatorInfo = function.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);
+        }
+    }
 }

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18943
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: I4491f53200a20f2598dd9e3a72424f5050076c89
Gerrit-Change-Number: 18943
Gerrit-PatchSet: 1
Gerrit-Owner: Janhavi Tripurwar <[email protected]>
Gerrit-MessageType: newchange

Reply via email to