in polaris-synchronizer/api/src/main/java/org/apache/polaris/tools/sync/polaris/PolarisSynchronizer.java [673:803]
public void syncCatalogRoles(String catalogName) {
List<CatalogRole> catalogRolesSource;
try {
catalogRolesSource = source.listCatalogRoles(catalogName);
clientLogger.info(
"Listed {} catalog-roles for catalog {} from source.",
catalogRolesSource.size(),
catalogName);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to list catalog-roles for catalog {} from source.", catalogName, e);
return;
}
List<CatalogRole> catalogRolesTarget;
try {
catalogRolesTarget = target.listCatalogRoles(catalogName);
clientLogger.info(
"Listed {} catalog-roles for catalog {} from target.",
catalogRolesTarget.size(),
catalogName);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to list catalog-roles for catalog {} from target.", catalogName, e);
return;
}
SynchronizationPlan<CatalogRole> catalogRoleSyncPlan =
syncPlanner.planCatalogRoleSync(catalogName, catalogRolesSource, catalogRolesTarget);
catalogRoleSyncPlan
.entitiesToSkip()
.forEach(
catalogRole ->
clientLogger.info(
"Skipping catalog-role {} in catalog {}.", catalogRole.getName(), catalogName));
catalogRoleSyncPlan
.entitiesToSkipAndSkipChildren()
.forEach(
catalogRole ->
clientLogger.info(
"Skipping catalog-role {} in catalog {} and all child entities.",
catalogRole.getName(),
catalogName));
catalogRoleSyncPlan
.entitiesNotModified()
.forEach(
catalogRole ->
clientLogger.info(
"No change detected in catalog-role {} in catalog {}. Skipping.",
catalogRole.getName(),
catalogName));
int syncsCompleted = 0;
int totalSyncsToComplete = totalSyncsToComplete(catalogRoleSyncPlan);
for (CatalogRole catalogRole : catalogRoleSyncPlan.entitiesToCreate()) {
try {
target.createCatalogRole(catalogName, catalogRole);
clientLogger.info(
"Created catalog-role {} for catalog {}. - {}/{}",
catalogRole.getName(),
catalogName,
++syncsCompleted,
totalSyncsToComplete);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to create catalog-role {} for catalog {}. - {}/{}",
catalogRole.getName(),
catalogName,
++syncsCompleted,
totalSyncsToComplete,
e);
}
}
for (CatalogRole catalogRole : catalogRoleSyncPlan.entitiesToOverwrite()) {
try {
target.dropCatalogRole(catalogName, catalogRole.getName());
target.createCatalogRole(catalogName, catalogRole);
clientLogger.info(
"Overwrote catalog-role {} for catalog {}. - {}/{}",
catalogRole.getName(),
catalogName,
++syncsCompleted,
totalSyncsToComplete);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to overwrite catalog-role {} for catalog {}. - {}/{}",
catalogRole.getName(),
catalogName,
++syncsCompleted,
totalSyncsToComplete,
e);
}
}
for (CatalogRole catalogRole : catalogRoleSyncPlan.entitiesToRemove()) {
try {
target.dropCatalogRole(catalogName, catalogRole.getName());
clientLogger.info(
"Removed catalog-role {} for catalog {}. - {}/{}",
catalogRole.getName(),
catalogName,
++syncsCompleted,
totalSyncsToComplete);
} catch (Exception e) {
if (haltOnFailure) throw e;
clientLogger.error(
"Failed to remove catalog-role {} for catalog {}. - {}/{}",
catalogRole.getName(),
catalogName,
++syncsCompleted,
totalSyncsToComplete,
e);
}
}
for (CatalogRole catalogRole : catalogRoleSyncPlan.entitiesToSyncChildren()) {
syncAssigneePrincipalRolesForCatalogRole(catalogName, catalogRole.getName());
syncGrants(catalogName, catalogRole.getName());
}
}