laserninja opened a new issue, #12901:
URL: https://github.com/apache/gravitino/issues/12901
### Version
main branch
### Describe what's wrong
`MetadataAuthzHelper.preloadOwner` is a best-effort cache warm-up - its
`catch (Exception e)` logs and ignores any failure. But the entity-store lookup
sits *outside* that `try`:
```java
private static void preloadOwner(Entity.EntityType entityType,
NameIdentifier[] nameIdentifiers) {
if (!GravitinoEnv.getInstance().cacheEnabled()) {
return;
}
EntityStore entityStore = GravitinoEnv.getInstance().entityStore(); //
<-- outside the try
try {
entityStore.relationOperations().batchListEntitiesByRelation(...);
} catch (Exception e) {
LOG.warn("Ignore preloadOwner error:{}", e.getMessage(), e);
}
}
```
`GravitinoEnv.entityStore()` has `Preconditions.checkArgument(initialized,
"GravitinoEnv is not initialized.")`, so when the environment is not
initialized that `IllegalArgumentException` escapes the warm-up, propagates out
of `MetadataAuthzHelper.filterByExpression`, and fails the entire list request
with HTTP 400 - even though nothing about the requested listing actually failed.
### Error message and/or stacktrace
```
{"code":1001,"type":"IllegalArgumentException",
"message":"Failed to operate tag(s) operation [LIST] under object
[object1.object2], reason [GravitinoEnv is not initialized.]"}
java.lang.IllegalArgumentException: GravitinoEnv is not initialized.
at
com.google.common.base.Preconditions.checkArgument(Preconditions.java:143)
at org.apache.gravitino.GravitinoEnv.entityStore(GravitinoEnv.java:261)
at
org.apache.gravitino.server.authorization.MetadataAuthzHelper.preloadOwner(MetadataAuthzHelper.java:552)
at
org.apache.gravitino.server.authorization.MetadataAuthzHelper.filterByExpression(MetadataAuthzHelper.java:364)
at
org.apache.gravitino.server.web.rest.MetadataObjectTagOperations.lambda$listTagsForMetadataObject$9(MetadataObjectTagOperations.java:217)
```
### How to reproduce
Version: main branch. Any list endpoint that routes through
`MetadataAuthzHelper.filterByExpression` while `GravitinoEnv` is uninitialized
returns 400. Observable on `main` with:
```bash
./gradlew :server:test -PskipITs --tests
"org.apache.gravitino.server.web.rest.TestMetadataObjectTagOperations"
```
Three tests fail with 400 instead of 200: `testListTagsForObject`,
`testListTagsForObjectUnderHierarchicalSchema`,
`testListTagsDeduplicatesDifferentAssignmentValues`.
A booted server initializes `GravitinoEnv`, so production traffic does not
hit this today - the defect is that a helper documented and coded as ignorable
can still abort the request.
### Additional context
Found while adding tag support for Semantic Models (#12615). The fix is to
move the lookup inside the existing `try`.
--
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]