xloya commented on code in PR #4109:
URL: https://github.com/apache/gravitino/pull/4109#discussion_r1671503400


##########
core/src/main/java/com/datastrato/gravitino/tag/TagManager.java:
##########
@@ -61,6 +71,16 @@ public TagManager(IdGenerator idGenerator, EntityStore 
entityStore) {
       throw new RuntimeException(errorMsg);
     }
 
+    if (!(entityStore instanceof SupportsExtraOperations)) {

Review Comment:
   From my current understanding, the addition of `SupportsExtraOperations` in 
this PR means that these may be an optional feature? If so, is it appropriate 
to throw an exception here?



##########
core/src/main/java/com/datastrato/gravitino/storage/relational/po/TagMetadataObjectRelPO.java:
##########
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.datastrato.gravitino.storage.relational.po;
+
+import com.google.common.base.Preconditions;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+@Getter
+public class TagMetadataObjectRelPO {
+  private Long tagId;
+  private Long metadataObjectId;
+  private String metadataObjectType;
+  private String auditInfo;
+  private Long currentVersion;
+  private Long lastVersion;
+  private Long deletedAt;
+
+  public static Builder builder() {
+    return new Builder();
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof TagMetadataObjectRelPO)) {
+      return false;
+    }
+    TagMetadataObjectRelPO tagRelPO = (TagMetadataObjectRelPO) o;
+    return java.util.Objects.equals(tagId, tagRelPO.tagId)
+        && java.util.Objects.equals(metadataObjectId, 
tagRelPO.metadataObjectId)
+        && java.util.Objects.equals(metadataObjectType, 
tagRelPO.metadataObjectType)
+        && java.util.Objects.equals(auditInfo, tagRelPO.auditInfo)
+        && java.util.Objects.equals(currentVersion, tagRelPO.currentVersion)
+        && java.util.Objects.equals(lastVersion, tagRelPO.lastVersion)
+        && java.util.Objects.equals(deletedAt, tagRelPO.deletedAt);
+  }
+
+  @Override
+  public int hashCode() {
+    return java.util.Objects.hash(

Review Comment:
   I think we're better off aligning here, most other POs use 
`Objects.hashCode()`.



##########
core/src/main/java/com/datastrato/gravitino/SupportsExtraOperations.java:
##########
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.datastrato.gravitino;
+
+import com.datastrato.gravitino.exceptions.NoSuchEntityException;
+import com.datastrato.gravitino.meta.TagEntity;
+import java.io.IOException;
+
+/**
+ * An interface to support extra entity store operations, this interface 
should be mixed with {@link
+ * EntityStore} to provide extra operations.
+ *
+ * <p>Any operations that can be done by the entity store should be added here.
+ */
+public interface SupportsExtraOperations {
+
+  /**
+   * List all the metadata objects that are associated with the given tag.
+   *
+   * @param tagIdent The identifier of the tag.
+   * @return The list of metadata objects associated with the given tag.
+   */
+  MetadataObject[] listAssociatedMetadataObjectsForTag(NameIdentifier 
tagIdent) throws IOException;
+
+  /**
+   * List all the tags that are associated with the given metadata object.
+   *
+   * @param objectIdent The identifier of the metadata object.
+   * @param objectType The type of the metadata object.
+   * @return The list of tags associated with the given metadata object.
+   * @throws NoSuchEntityException if the metadata object does not exist.
+   */
+  TagEntity[] listAssociatedTagsForMetadataObject(

Review Comment:
   How about using `List<TagEntity>` directly? It seems that we will get a list 
from the `TagMetaService`, is it necessary to convert to an `Array`?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to