diff --git a/pom.xml b/pom.xml
index 46f44ea..70ab604 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
tech.stackable
hdfs-utils
- 0.1.0
+ 0.1.1
Apache Hadoop HDFS utils
https://github.com/stackabletech/hdfs-utils/
diff --git a/src/main/java/tech/stackable/hadoop/OpaAllowQuery.java b/src/main/java/tech/stackable/hadoop/OpaAllowQuery.java
index 1c6737c..df170d6 100644
--- a/src/main/java/tech/stackable/hadoop/OpaAllowQuery.java
+++ b/src/main/java/tech/stackable/hadoop/OpaAllowQuery.java
@@ -1,6 +1,7 @@
package tech.stackable.hadoop;
import org.apache.hadoop.hdfs.server.namenode.INodeAttributeProvider;
+import org.apache.hadoop.security.UserGroupInformation;
public class OpaAllowQuery {
public final OpaAllowQueryInput input;
@@ -9,9 +10,14 @@ public OpaAllowQuery(OpaAllowQueryInput input) {
this.input = input;
}
+ /**
+ * Wrapper around {@link INodeAttributeProvider.AuthorizationContext}, which uses our custom wrapper around
+ * {@link UserGroupInformation}, {@link OpaQueryUgi}.
+ */
public static class OpaAllowQueryInput {
public java.lang.String fsOwner;
public java.lang.String supergroup;
+ // Wrapping this
public OpaQueryUgi callerUgi;
public org.apache.hadoop.hdfs.server.namenode.INodeAttributes[] inodeAttrs;
public org.apache.hadoop.hdfs.server.namenode.INode[] inodes;
diff --git a/src/main/java/tech/stackable/hadoop/OpaQueryUgi.java b/src/main/java/tech/stackable/hadoop/OpaQueryUgi.java
index a3e5c3b..84f3b0d 100644
--- a/src/main/java/tech/stackable/hadoop/OpaQueryUgi.java
+++ b/src/main/java/tech/stackable/hadoop/OpaQueryUgi.java
@@ -6,7 +6,8 @@
import java.util.List;
public class OpaQueryUgi {
- public UserGroupInformation realUser;
+ // Wrapping this
+ public OpaQueryUgi realUser;
public String userName;
public String shortUserName;
@@ -16,8 +17,18 @@ public class OpaQueryUgi {
public UserGroupInformation.AuthenticationMethod authenticationMethod;
public UserGroupInformation.AuthenticationMethod realAuthenticationMethod;
+ /**
+ * Wrapper around {@link UserGroupInformation}, which does not throw random errors during serialization when no primary
+ * group is known for the user.
+ * "Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected IOException (of type java.io.IOException): There is no primary group for UGI hive/hive-iceberg.default.svc.cluster.local@KNAB.COM (auth:KERBEROS)"
+ */
public OpaQueryUgi(UserGroupInformation ugi) {
- this.realUser = ugi.getRealUser();
+ UserGroupInformation realUser = ugi.getRealUser();
+ if (realUser != null) {
+ this.realUser = new OpaQueryUgi(ugi.getRealUser());
+ } else {
+ this.realUser = null;
+ }
this.userName = ugi.getUserName();
this.shortUserName = ugi.getShortUserName();
try {