You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu> on 2022/06/19 01:53:35 UTC

Change in asterixdb-graph[master]: [NO-ISSUE][GRAPHIX] Fixing serialization error for requirements.

From Glenn Galvizo <gg...@uci.edu>:

Glenn Galvizo has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb-graph/+/16603 )


Change subject: [NO-ISSUE][GRAPHIX] Fixing serialization error for requirements.
......................................................................

[NO-ISSUE][GRAPHIX] Fixing serialization error for requirements.

Marking the following as serializable (so as to properly send messages
to the metadata node):
- IEntityRequirements
- DependencyIdentifier
- EdgeDescriptor
- ElementLabel

Change-Id: Ia9718d56ef5e1d7dbc80a16e6df0cc67ef689f11
---
M asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java
8 files changed, 67 insertions(+), 59 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb-graph refs/changes/03/16603/1

diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java
index 2898a16..d5f88e4 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.lang.struct;
 
+import java.io.Serializable;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
@@ -36,7 +37,9 @@
  * 5. A maximum number of hops (not allowed to be NULL).
  * 6. An edge direction (left to right, right to left, or undirected).
  */
-public class EdgeDescriptor {
+public class EdgeDescriptor implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     private final Set<ElementLabel> edgeLabels;
     private final Integer minimumHops;
     private final Integer maximumHops;
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java
index 9add17a..a65afc6 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java
@@ -18,9 +18,12 @@
  */
 package org.apache.asterix.graphix.lang.struct;
 
+import java.io.Serializable;
 import java.util.Objects;
 
-public class ElementLabel {
+public class ElementLabel implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     private final String labelName;
     private boolean isInferred;
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java
index 7c63de8..8a2ffe5 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.Serializable;
 import java.util.Objects;
 
 import org.apache.asterix.common.functions.FunctionSignature;
@@ -30,7 +31,9 @@
  * A graph may depend on datasets, synonyms, functions, and other graphs. Similarly, functions and views may depend
  * on graphs themselves.
  */
-public class DependencyIdentifier {
+public class DependencyIdentifier implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     private final DataverseName dataverseName;
     private final String entityName;
     private final String entityDetail;
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java
index 5e73325..0b88f27 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.IOException;
 import java.util.Iterator;
 import java.util.Objects;
 import java.util.Set;
@@ -25,7 +26,6 @@
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.om.base.AGeneratedUUID;
-import org.apache.asterix.om.base.AUUID;
 
 /**
  * A collection of {@link org.apache.asterix.graphix.metadata.entity.schema.Graph} dependencies associated with a
@@ -33,20 +33,27 @@
  * for functions.
  */
 public class FunctionRequirements implements IEntityRequirements {
+    private static final long serialVersionUID = 1L;
+
     private final Set<DependencyIdentifier> functionRequirements;
     private final FunctionSignature functionSignature;
 
-    // Physically, our requirements are indexed by a UUID. Logically, we ignore this.
-    private final AUUID primaryKeyValue;
+    // Physically, our requirements are indexed by the string below. Logically, we ignore this.
+    private final String primaryKeyValue;
 
-    public FunctionRequirements(FunctionSignature functionSignature, Set<DependencyIdentifier> functionRequirements) {
+    public FunctionRequirements(FunctionSignature functionSignature, Set<DependencyIdentifier> functionRequirements)
+            throws IOException {
         this.functionRequirements = Objects.requireNonNull(functionRequirements);
         this.functionSignature = Objects.requireNonNull(functionSignature);
-        this.primaryKeyValue = new AGeneratedUUID();
+
+        // Generate a unique primary key from a AUUID.
+        StringBuilder sb = new StringBuilder();
+        new AGeneratedUUID().appendLiteralOnly(sb);
+        this.primaryKeyValue = sb.toString();
     }
 
     public FunctionRequirements(FunctionSignature functionSignature, Set<DependencyIdentifier> functionRequirements,
-            AUUID primaryKeyValue) {
+            String primaryKeyValue) {
         this.functionRequirements = Objects.requireNonNull(functionRequirements);
         this.functionSignature = Objects.requireNonNull(functionSignature);
         this.primaryKeyValue = Objects.requireNonNull(primaryKeyValue);
@@ -57,7 +64,7 @@
     }
 
     @Override
-    public AUUID getPrimaryKeyValue() {
+    public String getPrimaryKeyValue() {
         return primaryKeyValue;
     }
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java
index 98c669a..ef4dab2 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -33,7 +34,6 @@
 import org.apache.asterix.lang.common.util.ExpressionUtils;
 import org.apache.asterix.metadata.utils.MetadataUtil;
 import org.apache.asterix.om.base.AGeneratedUUID;
-import org.apache.asterix.om.base.AUUID;
 import org.apache.hyracks.algebricks.common.utils.Triple;
 
 /**
@@ -41,29 +41,35 @@
  * {@link org.apache.asterix.graphix.metadata.entity.schema.Graph} instance.
  */
 public class GraphRequirements implements IEntityRequirements {
+    private static final long serialVersionUID = 1L;
+
     // A graph potentially depends on datasets, synonyms, functions, and graphs.
     private final Set<DependencyIdentifier> graphRequirements;
     private final DataverseName dataverseName;
     private final String graphName;
 
-    // Physically, our requirements are indexed by a UUID. Logically, we ignore this.
-    private AUUID primaryKeyValue;
+    // Physically, our requirements are indexed by the string below. Logically, we ignore this.
+    private String primaryKeyValue;
+
+    public GraphRequirements(DataverseName dataverseName, String graphName) throws IOException {
+        this.graphRequirements = new HashSet<>();
+        this.dataverseName = Objects.requireNonNull(dataverseName);
+        this.graphName = Objects.requireNonNull(graphName);
+
+        // Generate a unique primary key from a AUUID.
+        StringBuilder sb = new StringBuilder();
+        new AGeneratedUUID().appendLiteralOnly(sb);
+        this.primaryKeyValue = sb.toString();
+    }
 
     public GraphRequirements(DataverseName dataverseName, String graphName, Set<DependencyIdentifier> graphRequirements,
-            AUUID primaryKeyValue) {
+            String primaryKeyValue) {
         this.graphRequirements = Objects.requireNonNull(graphRequirements);
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.graphName = Objects.requireNonNull(graphName);
         this.primaryKeyValue = Objects.requireNonNull(primaryKeyValue);
     }
 
-    public GraphRequirements(DataverseName dataverseName, String graphName) {
-        this.graphRequirements = new HashSet<>();
-        this.dataverseName = Objects.requireNonNull(dataverseName);
-        this.graphName = Objects.requireNonNull(graphName);
-        this.primaryKeyValue = new AGeneratedUUID();
-    }
-
     public void loadNonGraphDependencies(Expression body, IQueryRewriter queryRewriter) throws CompilationException {
         // Collect our dependencies as triples.
         List<Triple<DataverseName, String, String>> datasetDependencies = new ArrayList<>();
@@ -88,12 +94,12 @@
         graphRequirements.addAll(graphDependencies);
     }
 
-    public void setPrimaryKeyValue(AUUID primaryKeyValue) {
+    public void setPrimaryKeyValue(String primaryKeyValue) {
         this.primaryKeyValue = primaryKeyValue;
     }
 
     @Override
-    public AUUID getPrimaryKeyValue() {
+    public String getPrimaryKeyValue() {
         return primaryKeyValue;
     }
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java
index 371d4e3..c0e111c 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java
@@ -18,11 +18,12 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.Serializable;
+
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.graphix.metadata.bootstrap.GraphixIndexDetailProvider;
 import org.apache.asterix.metadata.api.ExtensionMetadataDatasetId;
 import org.apache.asterix.metadata.api.IExtensionMetadataEntity;
-import org.apache.asterix.om.base.AUUID;
 
 /**
  * Metadata for describing the pair [entity, list of dependencies for said entity]. This includes the following:
@@ -32,8 +33,8 @@
  * 4. The kind associated with the entity (FUNCTION, GRAPH, or VIEW).
  * 5. An iterator of the dependencies associated with the entity.
  */
-public interface IEntityRequirements extends Iterable<DependencyIdentifier>, IExtensionMetadataEntity {
-    AUUID getPrimaryKeyValue();
+public interface IEntityRequirements extends Iterable<DependencyIdentifier>, IExtensionMetadataEntity, Serializable {
+    String getPrimaryKeyValue();
 
     DataverseName getDataverseName();
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java
index 2e529a6..6c84eab 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.IOException;
 import java.util.Iterator;
 import java.util.Objects;
 import java.util.Set;
@@ -25,29 +26,35 @@
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.metadata.utils.DatasetUtil;
 import org.apache.asterix.om.base.AGeneratedUUID;
-import org.apache.asterix.om.base.AUUID;
 
 /**
  * A collection of {@link org.apache.asterix.graphix.metadata.entity.schema.Graph} dependencies associated with a view
  * instance. This does **not** include non-graph dependencies for views.
  */
 public class ViewRequirements implements IEntityRequirements {
+    private static final long serialVersionUID = 1L;
+
     private final Set<DependencyIdentifier> viewRequirements;
     private final DataverseName dataverseName;
     private final String viewName;
 
-    // Physically, our requirements are indexed by a UUID. Logically, we ignore this.
-    private final AUUID primaryKeyValue;
+    // Physically, our requirements are indexed by the string below. Logically, we ignore this.
+    private final String primaryKeyValue;
 
-    public ViewRequirements(DataverseName dataverseName, String viewName, Set<DependencyIdentifier> viewRequirements) {
+    public ViewRequirements(DataverseName dataverseName, String viewName, Set<DependencyIdentifier> viewRequirements)
+            throws IOException {
         this.viewRequirements = Objects.requireNonNull(viewRequirements);
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.viewName = Objects.requireNonNull(viewName);
-        this.primaryKeyValue = new AGeneratedUUID();
+
+        // Generate a unique primary key from a AUUID.
+        StringBuilder sb = new StringBuilder();
+        new AGeneratedUUID().appendLiteralOnly(sb);
+        this.primaryKeyValue = sb.toString();
     }
 
     public ViewRequirements(DataverseName dataverseName, String viewName, Set<DependencyIdentifier> viewRequirements,
-            AUUID primaryKeyValue) {
+            String primaryKeyValue) {
         this.viewRequirements = Objects.requireNonNull(viewRequirements);
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.viewName = Objects.requireNonNull(viewName);
@@ -55,7 +62,7 @@
     }
 
     @Override
-    public AUUID getPrimaryKeyValue() {
+    public String getPrimaryKeyValue() {
         return primaryKeyValue;
     }
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java
index 77c1637..b59f661 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java
@@ -25,7 +25,6 @@
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DEPENDENCIES;
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_KIND;
 
-import java.io.IOException;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -43,17 +42,14 @@
 import org.apache.asterix.graphix.metadata.entity.dependency.IEntityRequirements;
 import org.apache.asterix.graphix.metadata.entity.dependency.ViewRequirements;
 import org.apache.asterix.metadata.entitytupletranslators.AbstractTupleTranslator;
-import org.apache.asterix.om.base.AMutableUUID;
 import org.apache.asterix.om.base.AOrderedList;
 import org.apache.asterix.om.base.ARecord;
 import org.apache.asterix.om.base.AString;
-import org.apache.asterix.om.base.AUUID;
 import org.apache.asterix.om.base.IACursor;
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
 
@@ -88,14 +84,7 @@
     protected IEntityRequirements createMetadataEntityFromARecord(ARecord requirements) throws AlgebricksException {
         // Read in our primary key value.
         IAObject primaryKeyValueObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_DEPENDENCY_ID);
-        String primaryKeyValueString = ((AString) primaryKeyValueObj).getStringValue();
-        AMutableUUID primaryKeyValue = new AMutableUUID();
-        try {
-            primaryKeyValue.parseUUIDString(primaryKeyValueString.toCharArray(), 0, AUUID.UUID_CHARS);
-
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(ErrorCode.ILLEGAL_STATE, "Could not extract UUID bytes from ARecord.");
-        }
+        String primaryKeyValue = ((AString) primaryKeyValueObj).getStringValue();
 
         // Read in the dataverse name.
         IAObject dataverseNameObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_DATAVERSE_NAME);
@@ -191,20 +180,9 @@
 
     @Override
     public ITupleReference getTupleFromMetadataEntity(IEntityRequirements requirements) throws HyracksDataException {
-        // TODO (GLENN): There is currently a bug where a metadata dataset index cannot have a UUID primary key field.
-        String primaryKeyValue;
-        try {
-            StringBuilder sb = new StringBuilder();
-            requirements.getPrimaryKeyValue().appendLiteralOnly(sb);
-            primaryKeyValue = sb.toString();
-
-        } catch (IOException e) {
-            throw new HyracksDataException(ErrorCode.ILLEGAL_STATE, "Could not extract UUID bytes from AUUID.");
-        }
-
-        // Write our primary key, which is an autogenerated UUID (we serialize this as a string for our tuple).
+        // Write our primary key.
         tupleBuilder.reset();
-        aString.setValue(primaryKeyValue);
+        aString.setValue(requirements.getPrimaryKeyValue());
         stringSerde.serialize(aString, tupleBuilder.getDataOutput());
         tupleBuilder.addFieldEndOffset();
 
@@ -213,7 +191,7 @@
 
         // Write our primary key.
         fieldValue.reset();
-        aString.setValue(primaryKeyValue);
+        aString.setValue(requirements.getPrimaryKeyValue());
         stringSerde.serialize(aString, fieldValue.getDataOutput());
         recordBuilder.addField(GRA_RECORD_DETAIL.getIndexForField(FIELD_NAME_DEPENDENCY_ID), fieldValue);
 

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb-graph/+/16603
To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb-graph
Gerrit-Branch: master
Gerrit-Change-Id: Ia9718d56ef5e1d7dbc80a16e6df0cc67ef689f11
Gerrit-Change-Number: 16603
Gerrit-PatchSet: 1
Gerrit-Owner: Glenn Galvizo <gg...@uci.edu>
Gerrit-MessageType: newchange

Change in asterixdb-graph[master]: [NO-ISSUE][GRAPHIX] Fixing serialization error for requirements.

Posted by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu>.
From Glenn Galvizo <gg...@uci.edu>:

Glenn Galvizo has posted comments on this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb-graph/+/16603 )

Change subject: [NO-ISSUE][GRAPHIX] Fixing serialization error for requirements.
......................................................................


Patch Set 1: Code-Review+2


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb-graph/+/16603
To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb-graph
Gerrit-Branch: master
Gerrit-Change-Id: Ia9718d56ef5e1d7dbc80a16e6df0cc67ef689f11
Gerrit-Change-Number: 16603
Gerrit-PatchSet: 1
Gerrit-Owner: Glenn Galvizo <gg...@uci.edu>
Gerrit-Reviewer: Glenn Galvizo <gg...@uci.edu>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Comment-Date: Sun, 19 Jun 2022 02:04:14 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment

Change in asterixdb-graph[master]: [NO-ISSUE][GRAPHIX] Fixing serialization error for requirements.

Posted by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu>.
From Glenn Galvizo <gg...@uci.edu>:

Glenn Galvizo has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb-graph/+/16603 )


Change subject: [NO-ISSUE][GRAPHIX] Fixing serialization error for requirements.
......................................................................

[NO-ISSUE][GRAPHIX] Fixing serialization error for requirements.

Marking the following as serializable (so as to properly send messages
to the metadata node):
- IEntityRequirements
- DependencyIdentifier
- EdgeDescriptor
- ElementLabel

Change-Id: Ia9718d56ef5e1d7dbc80a16e6df0cc67ef689f11
---
M asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java
M asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java
8 files changed, 67 insertions(+), 59 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb-graph refs/changes/03/16603/1

diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java
index 2898a16..d5f88e4 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/EdgeDescriptor.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.lang.struct;
 
+import java.io.Serializable;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
@@ -36,7 +37,9 @@
  * 5. A maximum number of hops (not allowed to be NULL).
  * 6. An edge direction (left to right, right to left, or undirected).
  */
-public class EdgeDescriptor {
+public class EdgeDescriptor implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     private final Set<ElementLabel> edgeLabels;
     private final Integer minimumHops;
     private final Integer maximumHops;
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java
index 9add17a..a65afc6 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/struct/ElementLabel.java
@@ -18,9 +18,12 @@
  */
 package org.apache.asterix.graphix.lang.struct;
 
+import java.io.Serializable;
 import java.util.Objects;
 
-public class ElementLabel {
+public class ElementLabel implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     private final String labelName;
     private boolean isInferred;
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java
index 7c63de8..8a2ffe5 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/DependencyIdentifier.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.Serializable;
 import java.util.Objects;
 
 import org.apache.asterix.common.functions.FunctionSignature;
@@ -30,7 +31,9 @@
  * A graph may depend on datasets, synonyms, functions, and other graphs. Similarly, functions and views may depend
  * on graphs themselves.
  */
-public class DependencyIdentifier {
+public class DependencyIdentifier implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     private final DataverseName dataverseName;
     private final String entityName;
     private final String entityDetail;
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java
index 5e73325..0b88f27 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/FunctionRequirements.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.IOException;
 import java.util.Iterator;
 import java.util.Objects;
 import java.util.Set;
@@ -25,7 +26,6 @@
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.om.base.AGeneratedUUID;
-import org.apache.asterix.om.base.AUUID;
 
 /**
  * A collection of {@link org.apache.asterix.graphix.metadata.entity.schema.Graph} dependencies associated with a
@@ -33,20 +33,27 @@
  * for functions.
  */
 public class FunctionRequirements implements IEntityRequirements {
+    private static final long serialVersionUID = 1L;
+
     private final Set<DependencyIdentifier> functionRequirements;
     private final FunctionSignature functionSignature;
 
-    // Physically, our requirements are indexed by a UUID. Logically, we ignore this.
-    private final AUUID primaryKeyValue;
+    // Physically, our requirements are indexed by the string below. Logically, we ignore this.
+    private final String primaryKeyValue;
 
-    public FunctionRequirements(FunctionSignature functionSignature, Set<DependencyIdentifier> functionRequirements) {
+    public FunctionRequirements(FunctionSignature functionSignature, Set<DependencyIdentifier> functionRequirements)
+            throws IOException {
         this.functionRequirements = Objects.requireNonNull(functionRequirements);
         this.functionSignature = Objects.requireNonNull(functionSignature);
-        this.primaryKeyValue = new AGeneratedUUID();
+
+        // Generate a unique primary key from a AUUID.
+        StringBuilder sb = new StringBuilder();
+        new AGeneratedUUID().appendLiteralOnly(sb);
+        this.primaryKeyValue = sb.toString();
     }
 
     public FunctionRequirements(FunctionSignature functionSignature, Set<DependencyIdentifier> functionRequirements,
-            AUUID primaryKeyValue) {
+            String primaryKeyValue) {
         this.functionRequirements = Objects.requireNonNull(functionRequirements);
         this.functionSignature = Objects.requireNonNull(functionSignature);
         this.primaryKeyValue = Objects.requireNonNull(primaryKeyValue);
@@ -57,7 +64,7 @@
     }
 
     @Override
-    public AUUID getPrimaryKeyValue() {
+    public String getPrimaryKeyValue() {
         return primaryKeyValue;
     }
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java
index 98c669a..ef4dab2 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/GraphRequirements.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -33,7 +34,6 @@
 import org.apache.asterix.lang.common.util.ExpressionUtils;
 import org.apache.asterix.metadata.utils.MetadataUtil;
 import org.apache.asterix.om.base.AGeneratedUUID;
-import org.apache.asterix.om.base.AUUID;
 import org.apache.hyracks.algebricks.common.utils.Triple;
 
 /**
@@ -41,29 +41,35 @@
  * {@link org.apache.asterix.graphix.metadata.entity.schema.Graph} instance.
  */
 public class GraphRequirements implements IEntityRequirements {
+    private static final long serialVersionUID = 1L;
+
     // A graph potentially depends on datasets, synonyms, functions, and graphs.
     private final Set<DependencyIdentifier> graphRequirements;
     private final DataverseName dataverseName;
     private final String graphName;
 
-    // Physically, our requirements are indexed by a UUID. Logically, we ignore this.
-    private AUUID primaryKeyValue;
+    // Physically, our requirements are indexed by the string below. Logically, we ignore this.
+    private String primaryKeyValue;
+
+    public GraphRequirements(DataverseName dataverseName, String graphName) throws IOException {
+        this.graphRequirements = new HashSet<>();
+        this.dataverseName = Objects.requireNonNull(dataverseName);
+        this.graphName = Objects.requireNonNull(graphName);
+
+        // Generate a unique primary key from a AUUID.
+        StringBuilder sb = new StringBuilder();
+        new AGeneratedUUID().appendLiteralOnly(sb);
+        this.primaryKeyValue = sb.toString();
+    }
 
     public GraphRequirements(DataverseName dataverseName, String graphName, Set<DependencyIdentifier> graphRequirements,
-            AUUID primaryKeyValue) {
+            String primaryKeyValue) {
         this.graphRequirements = Objects.requireNonNull(graphRequirements);
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.graphName = Objects.requireNonNull(graphName);
         this.primaryKeyValue = Objects.requireNonNull(primaryKeyValue);
     }
 
-    public GraphRequirements(DataverseName dataverseName, String graphName) {
-        this.graphRequirements = new HashSet<>();
-        this.dataverseName = Objects.requireNonNull(dataverseName);
-        this.graphName = Objects.requireNonNull(graphName);
-        this.primaryKeyValue = new AGeneratedUUID();
-    }
-
     public void loadNonGraphDependencies(Expression body, IQueryRewriter queryRewriter) throws CompilationException {
         // Collect our dependencies as triples.
         List<Triple<DataverseName, String, String>> datasetDependencies = new ArrayList<>();
@@ -88,12 +94,12 @@
         graphRequirements.addAll(graphDependencies);
     }
 
-    public void setPrimaryKeyValue(AUUID primaryKeyValue) {
+    public void setPrimaryKeyValue(String primaryKeyValue) {
         this.primaryKeyValue = primaryKeyValue;
     }
 
     @Override
-    public AUUID getPrimaryKeyValue() {
+    public String getPrimaryKeyValue() {
         return primaryKeyValue;
     }
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java
index 371d4e3..c0e111c 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/IEntityRequirements.java
@@ -18,11 +18,12 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.Serializable;
+
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.graphix.metadata.bootstrap.GraphixIndexDetailProvider;
 import org.apache.asterix.metadata.api.ExtensionMetadataDatasetId;
 import org.apache.asterix.metadata.api.IExtensionMetadataEntity;
-import org.apache.asterix.om.base.AUUID;
 
 /**
  * Metadata for describing the pair [entity, list of dependencies for said entity]. This includes the following:
@@ -32,8 +33,8 @@
  * 4. The kind associated with the entity (FUNCTION, GRAPH, or VIEW).
  * 5. An iterator of the dependencies associated with the entity.
  */
-public interface IEntityRequirements extends Iterable<DependencyIdentifier>, IExtensionMetadataEntity {
-    AUUID getPrimaryKeyValue();
+public interface IEntityRequirements extends Iterable<DependencyIdentifier>, IExtensionMetadataEntity, Serializable {
+    String getPrimaryKeyValue();
 
     DataverseName getDataverseName();
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java
index 2e529a6..6c84eab 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entity/dependency/ViewRequirements.java
@@ -18,6 +18,7 @@
  */
 package org.apache.asterix.graphix.metadata.entity.dependency;
 
+import java.io.IOException;
 import java.util.Iterator;
 import java.util.Objects;
 import java.util.Set;
@@ -25,29 +26,35 @@
 import org.apache.asterix.common.metadata.DataverseName;
 import org.apache.asterix.metadata.utils.DatasetUtil;
 import org.apache.asterix.om.base.AGeneratedUUID;
-import org.apache.asterix.om.base.AUUID;
 
 /**
  * A collection of {@link org.apache.asterix.graphix.metadata.entity.schema.Graph} dependencies associated with a view
  * instance. This does **not** include non-graph dependencies for views.
  */
 public class ViewRequirements implements IEntityRequirements {
+    private static final long serialVersionUID = 1L;
+
     private final Set<DependencyIdentifier> viewRequirements;
     private final DataverseName dataverseName;
     private final String viewName;
 
-    // Physically, our requirements are indexed by a UUID. Logically, we ignore this.
-    private final AUUID primaryKeyValue;
+    // Physically, our requirements are indexed by the string below. Logically, we ignore this.
+    private final String primaryKeyValue;
 
-    public ViewRequirements(DataverseName dataverseName, String viewName, Set<DependencyIdentifier> viewRequirements) {
+    public ViewRequirements(DataverseName dataverseName, String viewName, Set<DependencyIdentifier> viewRequirements)
+            throws IOException {
         this.viewRequirements = Objects.requireNonNull(viewRequirements);
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.viewName = Objects.requireNonNull(viewName);
-        this.primaryKeyValue = new AGeneratedUUID();
+
+        // Generate a unique primary key from a AUUID.
+        StringBuilder sb = new StringBuilder();
+        new AGeneratedUUID().appendLiteralOnly(sb);
+        this.primaryKeyValue = sb.toString();
     }
 
     public ViewRequirements(DataverseName dataverseName, String viewName, Set<DependencyIdentifier> viewRequirements,
-            AUUID primaryKeyValue) {
+            String primaryKeyValue) {
         this.viewRequirements = Objects.requireNonNull(viewRequirements);
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.viewName = Objects.requireNonNull(viewName);
@@ -55,7 +62,7 @@
     }
 
     @Override
-    public AUUID getPrimaryKeyValue() {
+    public String getPrimaryKeyValue() {
         return primaryKeyValue;
     }
 
diff --git a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java
index 77c1637..b59f661 100644
--- a/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java
+++ b/asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java
@@ -25,7 +25,6 @@
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DEPENDENCIES;
 import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_KIND;
 
-import java.io.IOException;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -43,17 +42,14 @@
 import org.apache.asterix.graphix.metadata.entity.dependency.IEntityRequirements;
 import org.apache.asterix.graphix.metadata.entity.dependency.ViewRequirements;
 import org.apache.asterix.metadata.entitytupletranslators.AbstractTupleTranslator;
-import org.apache.asterix.om.base.AMutableUUID;
 import org.apache.asterix.om.base.AOrderedList;
 import org.apache.asterix.om.base.ARecord;
 import org.apache.asterix.om.base.AString;
-import org.apache.asterix.om.base.AUUID;
 import org.apache.asterix.om.base.IACursor;
 import org.apache.asterix.om.base.IAObject;
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
 
@@ -88,14 +84,7 @@
     protected IEntityRequirements createMetadataEntityFromARecord(ARecord requirements) throws AlgebricksException {
         // Read in our primary key value.
         IAObject primaryKeyValueObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_DEPENDENCY_ID);
-        String primaryKeyValueString = ((AString) primaryKeyValueObj).getStringValue();
-        AMutableUUID primaryKeyValue = new AMutableUUID();
-        try {
-            primaryKeyValue.parseUUIDString(primaryKeyValueString.toCharArray(), 0, AUUID.UUID_CHARS);
-
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(ErrorCode.ILLEGAL_STATE, "Could not extract UUID bytes from ARecord.");
-        }
+        String primaryKeyValue = ((AString) primaryKeyValueObj).getStringValue();
 
         // Read in the dataverse name.
         IAObject dataverseNameObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_DATAVERSE_NAME);
@@ -191,20 +180,9 @@
 
     @Override
     public ITupleReference getTupleFromMetadataEntity(IEntityRequirements requirements) throws HyracksDataException {
-        // TODO (GLENN): There is currently a bug where a metadata dataset index cannot have a UUID primary key field.
-        String primaryKeyValue;
-        try {
-            StringBuilder sb = new StringBuilder();
-            requirements.getPrimaryKeyValue().appendLiteralOnly(sb);
-            primaryKeyValue = sb.toString();
-
-        } catch (IOException e) {
-            throw new HyracksDataException(ErrorCode.ILLEGAL_STATE, "Could not extract UUID bytes from AUUID.");
-        }
-
-        // Write our primary key, which is an autogenerated UUID (we serialize this as a string for our tuple).
+        // Write our primary key.
         tupleBuilder.reset();
-        aString.setValue(primaryKeyValue);
+        aString.setValue(requirements.getPrimaryKeyValue());
         stringSerde.serialize(aString, tupleBuilder.getDataOutput());
         tupleBuilder.addFieldEndOffset();
 
@@ -213,7 +191,7 @@
 
         // Write our primary key.
         fieldValue.reset();
-        aString.setValue(primaryKeyValue);
+        aString.setValue(requirements.getPrimaryKeyValue());
         stringSerde.serialize(aString, fieldValue.getDataOutput());
         recordBuilder.addField(GRA_RECORD_DETAIL.getIndexForField(FIELD_NAME_DEPENDENCY_ID), fieldValue);
 

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb-graph/+/16603
To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb-graph
Gerrit-Branch: master
Gerrit-Change-Id: Ia9718d56ef5e1d7dbc80a16e6df0cc67ef689f11
Gerrit-Change-Number: 16603
Gerrit-PatchSet: 1
Gerrit-Owner: Glenn Galvizo <gg...@uci.edu>
Gerrit-MessageType: newchange