Copilot commented on code in PR #13791:
URL: https://github.com/apache/gravitino/pull/13791#discussion_r4247997809
##########
core/src/main/java/org/apache/gravitino/hook/SemanticModelHookDispatcher.java:
##########
@@ -86,19 +89,22 @@ public SemanticModel createSemanticModel(
IllegalSemanticModelException {
SemanticModel semanticModel =
dispatcher.createSemanticModel(ident, comment, definition, properties);
+ setCreatorAsOwner(ident);
+ return semanticModel;
Review Comment:
`setCreatorAsOwner()` fetches `PrincipalUtils.getCurrentUserName()` at the
time ownership is set, not necessarily the initiating user at the start of the
operation. To keep ownership consistent with the operation initiator (and
consistent with how `SemanticModelEventDispatcher` captures the user once),
capture the username once in `createSemanticModel(...)` /
`importSemanticModel(...)` and pass it into `setCreatorAsOwner(...)` (e.g.,
`setCreatorAsOwner(ident, user)`), rather than calling `PrincipalUtils` inside
the helper.
##########
core/src/main/java/org/apache/gravitino/hook/SemanticModelHookDispatcher.java:
##########
@@ -123,4 +129,15 @@ public boolean dropSemanticModel(NameIdentifier ident) {
}
return dropped;
}
+
+ private void setCreatorAsOwner(NameIdentifier ident) {
+ OwnerDispatcher ownerManager = ownerDispatcher.get();
+ if (ownerManager != null) {
+ ownerManager.setOwner(
+ ident.namespace().level(0),
+ NameIdentifierUtil.toMetadataObject(ident,
Entity.EntityType.SEMANTIC_MODEL),
+ PrincipalUtils.getCurrentUserName(),
+ Owner.Type.USER);
+ }
+ }
Review Comment:
`setCreatorAsOwner()` fetches `PrincipalUtils.getCurrentUserName()` at the
time ownership is set, not necessarily the initiating user at the start of the
operation. To keep ownership consistent with the operation initiator (and
consistent with how `SemanticModelEventDispatcher` captures the user once),
capture the username once in `createSemanticModel(...)` /
`importSemanticModel(...)` and pass it into `setCreatorAsOwner(...)` (e.g.,
`setCreatorAsOwner(ident, user)`), rather than calling `PrincipalUtils` inside
the helper.
##########
core/src/main/java/org/apache/gravitino/hook/SemanticModelHookDispatcher.java:
##########
@@ -86,19 +89,22 @@ public SemanticModel createSemanticModel(
IllegalSemanticModelException {
SemanticModel semanticModel =
dispatcher.createSemanticModel(ident, comment, definition, properties);
+ setCreatorAsOwner(ident);
+ return semanticModel;
+ }
- // Set the creator as the owner of the Semantic Model.
- OwnerDispatcher ownerManager = ownerDispatcher.get();
- if (ownerManager != null) {
- ownerManager.setOwner(
- ident.namespace().level(0),
- NameIdentifierUtil.toMetadataObject(ident,
Entity.EntityType.SEMANTIC_MODEL),
- PrincipalUtils.getCurrentUserName(),
- Owner.Type.USER);
- }
+ @Override
+ public SemanticModel importSemanticModel(NameIdentifier ident,
ImportedSemanticModel model) {
+ SemanticModel semanticModel = dispatcher.importSemanticModel(ident, model);
+ setCreatorAsOwner(ident);
return semanticModel;
Review Comment:
`setCreatorAsOwner()` fetches `PrincipalUtils.getCurrentUserName()` at the
time ownership is set, not necessarily the initiating user at the start of the
operation. To keep ownership consistent with the operation initiator (and
consistent with how `SemanticModelEventDispatcher` captures the user once),
capture the username once in `createSemanticModel(...)` /
`importSemanticModel(...)` and pass it into `setCreatorAsOwner(...)` (e.g.,
`setCreatorAsOwner(ident, user)`), rather than calling `PrincipalUtils` inside
the helper.
##########
core/src/main/java/org/apache/gravitino/listener/api/event/semantic/ExportSemanticModelEvent.java:
##########
@@ -0,0 +1,60 @@
+/*
+ * 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 org.apache.gravitino.listener.api.event.semantic;
+
+import javax.annotation.Nullable;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.event.OperationType;
+import org.apache.gravitino.semantic.OssieFormat;
+
+/** Successful event for exporting a Semantic Model as an Ossie document. */
+@DeveloperApi
+public final class ExportSemanticModelEvent extends SemanticModelEvent {
+ @Nullable private final OssieFormat format;
+
+ /**
+ * Constructs a {@code ExportSemanticModelEvent}.
+ *
+ * @param user The username of the individual who initiated the operation.
+ * @param identifier The Semantic Model identifier.
+ * @param format The document format, or null for an invalid request.
+ */
Review Comment:
Same concern as the import success event: for a successful export event, the
Javadoc stating `format` may be null “for an invalid request” is inconsistent
with the event semantics. Please clarify the contract (success implies a valid
request) or adjust the nullability/documentation accordingly.
##########
core/src/main/java/org/apache/gravitino/listener/api/event/semantic/ImportSemanticModelEvent.java:
##########
@@ -0,0 +1,76 @@
+/*
+ * 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 org.apache.gravitino.listener.api.event.semantic;
+
+import javax.annotation.Nullable;
+import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.annotation.DeveloperApi;
+import org.apache.gravitino.listener.api.event.OperationType;
+import org.apache.gravitino.listener.api.info.SemanticModelInfo;
+import org.apache.gravitino.semantic.OssieFormat;
+
+/** Successful event for importing an Ossie document as a Semantic Model. */
+@DeveloperApi
+public final class ImportSemanticModelEvent extends SemanticModelEvent {
+ @Nullable private final OssieFormat format;
+ private final SemanticModelInfo importedSemanticModelInfo;
+
+ /**
+ * Constructs a {@code ImportSemanticModelEvent}.
+ *
+ * @param user The username of the individual who initiated the operation.
+ * @param identifier The Semantic Model identifier.
+ * @param format The document format, or null for an invalid request.
+ * @param importedSemanticModelInfo The imported Semantic Model information.
+ */
Review Comment:
This is a *success* event, but the constructor Javadoc says `format` can be
null “for an invalid request”. For a successful import, “invalid request”
shouldn’t apply; please update the Javadoc to reflect when `format` can
actually be null (if ever), or tighten the API contract (e.g., document it as
non-null on success).
--
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]