errose28 commented on a change in pull request #3051:
URL: https://github.com/apache/ozone/pull/3051#discussion_r812469110



##########
File path: 
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
##########
@@ -3000,6 +3010,10 @@ public TenantUserInfoValue tenantGetUserInfo(String 
userPrincipal)
 
     final List<TenantAccessIdInfo> accessIdInfoList = new ArrayList<>();
 
+    // Won't iterate cache here for a similar reason as in OM#listTenant
+    //  tenantGetUserInfo lists all accessIds assigned to a user across
+    //  multiple tenants.
+

Review comment:
       Since we aren't taking a lock here, the info we got on line 3018 may be 
stale by the time we iterate it and re-check the database with it on line 3031. 
We need more graceful handling of this legit case instead of the error log and 
NPE. Possibly skip processing for that access ID, with a comment in the code 
acknowledging that we aren't taking a lock so it is ok that the expected access 
ID is not present in the DB anymore.

##########
File path: 
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMultiTenantManagerImpl.java
##########
@@ -374,10 +374,15 @@ public void deactivateUser(String accessID)
   }
 
   @Override
-  public boolean isTenantAdmin(String user, String tenantName) {
+  public boolean isTenantAdmin(String user, String tenantId) {

Review comment:
       There's a lot of problematic method stubs and unused methods in this 
class, and this is probably one of the worst examples. We must be sure to purge 
anything like this stub before the merge.
   
   For admin checks specifically, it's a bit of a mess. At the top level, we 
have this method in `OMMultiTenantManager`, and 
`OMTenantRequestHelper#checkTenantAdmin`. There's one in the `OzoneManager` as 
well that `OMTenantRequestHelper#checkTenantAdmin` delegates to, but I don't 
think that belongs there because it does not use any OM instance fields and is 
only called from outside the OM.
   
   As it is I'm not sure the difference between `OMMultiTenantManager` and 
`OMTenantRequestHelper`. `OMTenantRequestHelper` is not useful as a static 
utility class because it is called from requests which can already access 
`OMMultiTenantManager` through their OM instance. I think the two should be 
consolidated to reduce code duplication, bugs, and confusion. With these admin 
checks, for example, we have all three of those.
   
   I think a follow up Jira is necessary to consolidate these two classes and 
clean them out so they only contain methods that are both needed and correctly 
implemented.

##########
File path: 
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java
##########
@@ -380,19 +372,19 @@ public OMClientResponse validateAndUpdateCache(
 
     // Audit
     auditMap.put(OzoneConsts.TENANT, tenantId);
-    auditMap.put("user", principal);
+    auditMap.put("user", userPrincipal);
     auditMap.put("accessId", accessId);
     auditLog(ozoneManager.getAuditLogger(), buildAuditMessage(
         OMAction.TENANT_ASSIGN_USER_ACCESSID, auditMap, exception,
             getOmRequest().getUserInfo()));
 
     if (exception == null) {
       LOG.info("Assigned user '{}' to tenant '{}' with accessId '{}'",
-          principal, tenantId, accessId);
+          userPrincipal, tenantId, accessId);
       // TODO: omMetrics.incNumTenantAssignUser()
     } else {
       LOG.error("Failed to assign '{}' to tenant '{}' with accessId '{}': {}",
-          principal, tenantId, accessId, exception.getMessage());
+          userPrincipal, tenantId, accessId, exception.getMessage());

Review comment:
       The message here should be sufficient, since we are returning the error 
response. We can remove the todo on the line below this.

##########
File path: 
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java
##########
@@ -380,19 +372,19 @@ public OMClientResponse validateAndUpdateCache(
 
     // Audit
     auditMap.put(OzoneConsts.TENANT, tenantId);
-    auditMap.put("user", principal);
+    auditMap.put("user", userPrincipal);
     auditMap.put("accessId", accessId);
     auditLog(ozoneManager.getAuditLogger(), buildAuditMessage(
         OMAction.TENANT_ASSIGN_USER_ACCESSID, auditMap, exception,
             getOmRequest().getUserInfo()));
 
     if (exception == null) {
       LOG.info("Assigned user '{}' to tenant '{}' with accessId '{}'",
-          principal, tenantId, accessId);
+          userPrincipal, tenantId, accessId);
       // TODO: omMetrics.incNumTenantAssignUser()

Review comment:
       Do we have jiras for these metrics related TODOs? We should file some 
and link them here if not already.

##########
File path: 
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java
##########
@@ -308,20 +302,20 @@ public OMClientResponse validateAndUpdateCache(
         principalInfo.addAccessId(accessId);
       }
       omMetadataManager.getPrincipalToAccessIdsTable().addCacheEntry(
-          new CacheKey<>(principal),
+          new CacheKey<>(userPrincipal),
           new CacheValue<>(Optional.of(principalInfo),
               transactionLogIndex));
 
       // Add to tenantGroupTable
-      // TODO: DOUBLE CHECK GROUP NAME USAGE
+      // TODO: TenantGroupTable is unused for now.
       final String defaultGroupName =
           tenantId + OzoneConsts.DEFAULT_TENANT_USER_GROUP_SUFFIX;
       omMetadataManager.getTenantGroupTable().addCacheEntry(
           new CacheKey<>(accessId),
           new CacheValue<>(Optional.of(defaultGroupName), 
transactionLogIndex));
 
       // Add to tenantRoleTable
-      // TODO: DOUBLE CHECK ROLENAME
+      // TODO: TenantRoleTable is unused for now.

Review comment:
       Do we have plans to use this later? maybe as part of the Ranger 
background sync?

##########
File path: 
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
##########
@@ -3054,17 +3068,30 @@ public TenantUserList listUsersInTenant(String 
tenantId, String prefix)
       return null;
     }
 
+    if (!multiTenantManager.tenantExists(tenantId)) {
+      // Throw exception to the client, which will handle this gracefully
+      throw new IOException("Tenant '" + tenantId + "' not found!");

Review comment:
       Would an OMException with result code be better here?

##########
File path: 
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java
##########
@@ -308,20 +302,20 @@ public OMClientResponse validateAndUpdateCache(
         principalInfo.addAccessId(accessId);
       }
       omMetadataManager.getPrincipalToAccessIdsTable().addCacheEntry(
-          new CacheKey<>(principal),
+          new CacheKey<>(userPrincipal),
           new CacheValue<>(Optional.of(principalInfo),
               transactionLogIndex));
 
       // Add to tenantGroupTable
-      // TODO: DOUBLE CHECK GROUP NAME USAGE
+      // TODO: TenantGroupTable is unused for now.

Review comment:
       If it is unused we should remove it. Once it is released we will need to 
keep it forever. Also, we are using roles, not groups now, so I'm not sure what 
purpose this table would serve.




-- 
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]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to