public SynchronizationPlan planCatalogRoleSync()

in polaris-synchronizer/api/src/main/java/org/apache/polaris/tools/sync/polaris/planning/AccessControlAwarePlanner.java [200:250]


  public SynchronizationPlan<CatalogRole> planCatalogRoleSync(
      String catalogName,
      List<CatalogRole> catalogRolesOnSource,
      List<CatalogRole> catalogRolesOnTarget) {
    List<CatalogRole> skippedRoles = new ArrayList<>();
    List<CatalogRole> filteredRolesSource = new ArrayList<>();
    List<CatalogRole> filteredRolesTarget = new ArrayList<>();

    for (CatalogRole role : catalogRolesOnSource) {
      // filter out omnipotent catalog role
      if (role.getProperties() != null
          && role.getProperties().containsKey(AccessControlConstants.OMNIPOTENCE_PROPERTY)) {
        skippedRoles.add(role);
        continue;
      }

      // filter out catalog admin
      if (role.getName().equals("catalog_admin")) {
        skippedRoles.add(role);
        continue;
      }

      filteredRolesSource.add(role);
    }

    for (CatalogRole role : catalogRolesOnTarget) {
      // filter out omnipotent catalog role
      if (role.getProperties() != null
          && role.getProperties().containsKey(AccessControlConstants.OMNIPOTENCE_PROPERTY)) {
        skippedRoles.add(role);
        continue;
      }

      // filter out catalog admin
      if (role.getName().equals("catalog_admin")) {
        skippedRoles.add(role);
        continue;
      }

      filteredRolesTarget.add(role);
    }

    SynchronizationPlan<CatalogRole> delegatedPlan =
        this.delegate.planCatalogRoleSync(catalogName, filteredRolesSource, filteredRolesTarget);

    for (CatalogRole role : skippedRoles) {
      delegatedPlan.skipEntityAndSkipChildren(role);
    }

    return delegatedPlan;
  }