This is an automated email from the ASF dual-hosted git repository.

ggalvizo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb-graph.git


The following commit(s) were added to refs/heads/master by this push:
     new 8be2c90  [NO-ISSUE][GRAPHIX] Fixing serialization error for 
requirements.
8be2c90 is described below

commit 8be2c9068e9895894a90105a0f7ff432817382b8
Author: ggalvizo <[email protected]>
AuthorDate: Sat Jun 18 18:51:11 2022 -0700

    [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
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb-graph/+/16603
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Glenn Galvizo <[email protected]>
---
 .../graphix/lang/struct/EdgeDescriptor.java        |  5 +++-
 .../asterix/graphix/lang/struct/ElementLabel.java  |  5 +++-
 .../entity/dependency/DependencyIdentifier.java    |  5 +++-
 .../entity/dependency/FunctionRequirements.java    | 21 ++++++++++-----
 .../entity/dependency/GraphRequirements.java       | 30 +++++++++++++---------
 .../entity/dependency/IEntityRequirements.java     |  7 ++---
 .../entity/dependency/ViewRequirements.java        | 21 ++++++++++-----
 .../DependencyTupleTranslator.java                 | 30 +++-------------------
 8 files changed, 66 insertions(+), 58 deletions(-)

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 @@ import org.apache.asterix.lang.common.expression.VariableExpr;
  * 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 @@ import org.apache.asterix.metadata.utils.MetadataUtil;
  * 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 java.util.Set;
 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 @@ import org.apache.asterix.om.base.AUUID;
  * 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 @@ public class FunctionRequirements implements 
IEntityRequirements {
     }
 
     @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.base.IQueryRewriter;
 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,27 +41,33 @@ import org.apache.hyracks.algebricks.common.utils.Triple;
  * {@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, 
Set<DependencyIdentifier> graphRequirements,
-            AUUID primaryKeyValue) {
-        this.graphRequirements = Objects.requireNonNull(graphRequirements);
+    public GraphRequirements(DataverseName dataverseName, String graphName) 
throws IOException {
+        this.graphRequirements = new HashSet<>();
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.graphName = Objects.requireNonNull(graphName);
-        this.primaryKeyValue = Objects.requireNonNull(primaryKeyValue);
+
+        // 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) {
-        this.graphRequirements = new HashSet<>();
+    public GraphRequirements(DataverseName dataverseName, String graphName, 
Set<DependencyIdentifier> graphRequirements,
+            String primaryKeyValue) {
+        this.graphRequirements = Objects.requireNonNull(graphRequirements);
         this.dataverseName = Objects.requireNonNull(dataverseName);
         this.graphName = Objects.requireNonNull(graphName);
-        this.primaryKeyValue = new AGeneratedUUID();
+        this.primaryKeyValue = Objects.requireNonNull(primaryKeyValue);
     }
 
     public void loadNonGraphDependencies(Expression body, IQueryRewriter 
queryRewriter) throws CompilationException {
@@ -88,12 +94,12 @@ public class GraphRequirements implements 
IEntityRequirements {
         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 @@ import org.apache.asterix.om.base.AUUID;
  * 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 java.util.Set;
 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 @@ public class ViewRequirements implements IEntityRequirements {
     }
 
     @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_NA
 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.GraphRequirements;
 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 @@ public class DependencyTupleTranslator extends 
AbstractTupleTranslator<IEntityRe
     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 @@ public class DependencyTupleTranslator extends 
AbstractTupleTranslator<IEntityRe
 
     @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 @@ public class DependencyTupleTranslator extends 
AbstractTupleTranslator<IEntityRe
 
         // 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);
 

Reply via email to