in polaris-synchronizer/api/src/main/java/org/apache/polaris/tools/sync/polaris/PolarisSynchronizer.java [389:528]
public void syncAssigneePrincipalRolesForCatalogRole(String catalogName, String catalogRoleName) {
List<PrincipalRole> principalRolesSource;
try {
principalRolesSource =
source.listAssigneePrincipalRolesForCatalogRole(catalogName, catalogRoleName);
clientLogger.info(
"Listed {} assignee principal-roles for catalog-role {} in catalog {} from source.",
principalRolesSource.size(),
catalogRoleName,
catalogName);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to list assignee principal-roles for catalog-role {} in catalog {} from source.",
catalogRoleName,
catalogName,
e);
return;
}
List<PrincipalRole> principalRolesTarget;
try {
principalRolesTarget =
target.listAssigneePrincipalRolesForCatalogRole(catalogName, catalogRoleName);
clientLogger.info(
"Listed {} assignee principal-roles for catalog-role {} in catalog {} from target.",
principalRolesTarget.size(),
catalogRoleName,
catalogName);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to list assignee principal-roles for catalog-role {} in catalog {} from target.",
catalogRoleName,
catalogName,
e);
return;
}
SynchronizationPlan<PrincipalRole> assignedPrincipalRoleSyncPlan =
syncPlanner.planAssignPrincipalRolesToCatalogRolesSync(
catalogName, catalogRoleName, principalRolesSource, principalRolesTarget);
assignedPrincipalRoleSyncPlan
.entitiesToSkip()
.forEach(
principalRole ->
clientLogger.info(
"Skipping assignment of principal-role {} to catalog-role {} in catalog {}.",
principalRole.getName(),
catalogRoleName,
catalogName));
assignedPrincipalRoleSyncPlan
.entitiesNotModified()
.forEach(
principalRole ->
clientLogger.info(
"Principal-role {} is already assigned to catalog-role {} in catalog {}. Skipping.",
principalRole.getName(),
catalogRoleName,
catalogName));
int syncsCompleted = 0;
int totalSyncsToComplete = totalSyncsToComplete(assignedPrincipalRoleSyncPlan);
for (PrincipalRole principalRole : assignedPrincipalRoleSyncPlan.entitiesToCreate()) {
try {
target.assignCatalogRole(
principalRole.getName(), catalogName, catalogRoleName);
clientLogger.info(
"Assigned principal-role {} to catalog-role {} in catalog {}. - {}/{}",
principalRole.getName(),
catalogRoleName,
catalogName,
++syncsCompleted,
totalSyncsToComplete);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to assign principal-role {} to catalog-role {} in catalog {}. - {}/{}",
principalRole.getName(),
catalogRoleName,
catalogName,
++syncsCompleted,
totalSyncsToComplete,
e);
}
}
for (PrincipalRole principalRole : assignedPrincipalRoleSyncPlan.entitiesToOverwrite()) {
try {
target.assignCatalogRole(
principalRole.getName(), catalogName, catalogRoleName);
clientLogger.info(
"Assigned principal-role {} to catalog-role {} in catalog {}. - {}/{}",
principalRole.getName(),
catalogRoleName,
catalogName,
++syncsCompleted,
totalSyncsToComplete);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to assign principal-role {} to catalog-role {} in catalog {}. - {}/{}",
principalRole.getName(),
catalogRoleName,
catalogName,
++syncsCompleted,
totalSyncsToComplete,
e);
}
}
for (PrincipalRole principalRole : assignedPrincipalRoleSyncPlan.entitiesToRemove()) {
try {
target.revokeCatalogRole(
principalRole.getName(), catalogName, catalogRoleName);
clientLogger.info(
"Revoked principal-role {} from catalog-role {} in catalog {}. - {}/{}",
principalRole.getName(),
catalogRoleName,
catalogName,
++syncsCompleted,
totalSyncsToComplete);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to revoke principal-role {} from catalog-role {} in catalog {}. - {}/{}",
principalRole.getName(),
catalogRoleName,
catalogName,
++syncsCompleted,
totalSyncsToComplete,
e);
}
}
}