public void syncAssigneePrincipalRolesForCatalogRole()

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);
      }
    }
  }