public void syncCatalogRoles()

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