in polaris-synchronizer/api/src/main/java/org/apache/polaris/tools/sync/polaris/PolarisSynchronizer.java [196:278]
public void syncAssignedPrincipalRolesForPrincipal(String principalName) {
List<PrincipalRole> assignedPrincipalRolesSource;
try {
assignedPrincipalRolesSource = source.listPrincipalRolesAssigned(principalName);
clientLogger.info("Listed {} assigned principal-roles for principal {} from source.",
assignedPrincipalRolesSource.size(), principalName);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error("Failed to list assigned principal-roles for principal {} from source.", principalName, e);
return;
}
List<PrincipalRole> assignedPrincipalRolesTarget;
try {
assignedPrincipalRolesTarget = target.listPrincipalRolesAssigned(principalName);
clientLogger.info("Listed {} assigned principal-roles for principal {} from target.",
assignedPrincipalRolesTarget.size(), principalName);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error("Failed to list assigned principal-roles for principal {} from target.", principalName, e);
return;
}
SynchronizationPlan<PrincipalRole> assignedPrincipalRoleSyncPlan =
syncPlanner.planAssignPrincipalsToPrincipalRolesSync(
principalName, assignedPrincipalRolesSource, assignedPrincipalRolesTarget);
assignedPrincipalRoleSyncPlan
.entitiesToSkip()
.forEach(
principalRole ->
clientLogger.info("Skipping assignment of principal-role {} to principal {}.",
principalName, principalRole.getName()));
assignedPrincipalRoleSyncPlan
.entitiesNotModified()
.forEach(
principalRole ->
clientLogger.info(
"Principal {} is already assigned to principal-role {}, skipping.",
principalName, principalRole.getName()));
int syncsCompleted = 0;
final int totalSyncsToComplete = totalSyncsToComplete(assignedPrincipalRoleSyncPlan);
for (PrincipalRole principalRole : assignedPrincipalRoleSyncPlan.entitiesToCreate()) {
try {
target.assignPrincipalRole(principalName, principalRole.getName());
clientLogger.info("Assigned principal-role {} to principal {}. - {}/{}",
principalRole.getName(), principalName, ++syncsCompleted, totalSyncsToComplete);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error("Failed to assign principal-role {} to principal {}. - {}/{}",
principalRole.getName(), principalName, ++syncsCompleted, totalSyncsToComplete);
}
}
for (PrincipalRole principalRole : assignedPrincipalRoleSyncPlan.entitiesToOverwrite()) {
try {
target.assignPrincipalRole(principalName, principalRole.getName());
clientLogger.info("Assigned principal-role {} to principal {}. - {}/{}",
principalRole.getName(), principalName, ++syncsCompleted, totalSyncsToComplete);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error("Failed to assign principal-role {} to principal {}. - {}/{}",
principalRole.getName(), principalName, ++syncsCompleted, totalSyncsToComplete);
}
}
for (PrincipalRole principalRole : assignedPrincipalRoleSyncPlan.entitiesToRemove()) {
try {
target.revokePrincipalRole(principalName, principalRole.getName());
clientLogger.info("Revoked principal-role {} from principal {}. - {}/{}",
principalRole.getName(), principalName, ++syncsCompleted, totalSyncsToComplete);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error("Failed to revoke principal-role {} to principal {}. - {}/{}",
principalRole.getName(), principalName, ++syncsCompleted, totalSyncsToComplete);
}
}
}