public void syncPrincipalRoles()

in polaris-synchronizer/api/src/main/java/org/apache/polaris/tools/sync/polaris/PolarisSynchronizer.java [281:381]


  public void syncPrincipalRoles() {
    List<PrincipalRole> principalRolesSource;

    try {
      principalRolesSource = source.listPrincipalRoles();
      clientLogger.info("Listed {} principal-roles from source.", principalRolesSource.size());
    } catch (Exception e) {
      if (haltOnFailure) throw e;
      clientLogger.error("Failed to list principal-roles from source.", e);
      return;
    }

    List<PrincipalRole> principalRolesTarget;

    try {
      principalRolesTarget = target.listPrincipalRoles();
      clientLogger.info("Listed {} principal-roles from target.", principalRolesTarget.size());
    } catch (Exception e) {
      if (haltOnFailure) throw e;
      clientLogger.error("Failed to list principal-roles from target.", e);
      return;
    }

    SynchronizationPlan<PrincipalRole> principalRoleSyncPlan =
        syncPlanner.planPrincipalRoleSync(principalRolesSource, principalRolesTarget);

    principalRoleSyncPlan
        .entitiesToSkip()
        .forEach(
            principalRole ->
                clientLogger.info("Skipping principal-role {}.", principalRole.getName()));

    principalRoleSyncPlan
        .entitiesNotModified()
        .forEach(
            principalRole ->
                clientLogger.info(
                    "No change detected for principal-role {}, skipping.",
                    principalRole.getName()));

    int syncsCompleted = 0;
    final int totalSyncsToComplete = totalSyncsToComplete(principalRoleSyncPlan);

    for (PrincipalRole principalRole : principalRoleSyncPlan.entitiesToCreate()) {
      try {
        target.createPrincipalRole(principalRole);
        clientLogger.info(
            "Created principal-role {} on target. - {}/{}",
            principalRole.getName(),
            ++syncsCompleted,
            totalSyncsToComplete);
      } catch (Exception e) {
        if (haltOnFailure) throw e;
        clientLogger.error(
            "Failed to create principal-role {} on target. - {}/{}",
            principalRole.getName(),
            ++syncsCompleted,
            totalSyncsToComplete,
            e);
      }
    }

    for (PrincipalRole principalRole : principalRoleSyncPlan.entitiesToOverwrite()) {
      try {
        target.dropPrincipalRole(principalRole.getName());
        target.createPrincipalRole(principalRole);
        clientLogger.info(
            "Overwrote principal-role {} on target. - {}/{}",
            principalRole.getName(),
            ++syncsCompleted,
            totalSyncsToComplete);
      } catch (Exception e) {
        if (haltOnFailure) throw e;
        clientLogger.error(
            "Failed to overwrite principal-role {} on target. - {}/{}",
            principalRole.getName(),
            ++syncsCompleted,
            totalSyncsToComplete,
            e);
      }
    }

    for (PrincipalRole principalRole : principalRoleSyncPlan.entitiesToRemove()) {
      try {
        target.dropPrincipalRole(principalRole.getName());
        clientLogger.info(
            "Removed principal-role {} on target. - {}/{}",
            principalRole.getName(),
            ++syncsCompleted,
            totalSyncsToComplete);
      } catch (Exception e) {
        if (haltOnFailure) throw e;
        clientLogger.error(
            "Failed to remove principal-role {} on target. - {}/{}",
            principalRole.getName(),
            ++syncsCompleted,
            totalSyncsToComplete,
            e);
      }
    }
  }