AMBARI-25629: For kerberos service check IN clause must be split into batches (#3575)

diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/KerberosKeytabPrincipalDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/KerberosKeytabPrincipalDAO.java
index bb8ac6c..eb43439 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/KerberosKeytabPrincipalDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/KerberosKeytabPrincipalDAO.java
@@ -36,6 +36,8 @@
 import org.apache.ambari.server.orm.entities.KerberosKeytabPrincipalEntity;
 import org.apache.ambari.server.orm.entities.KerberosKeytabServiceMappingEntity;
 import org.apache.ambari.server.orm.entities.KerberosPrincipalEntity;
+import org.apache.ambari.server.orm.helpers.SQLConstants;
+import org.apache.ambari.server.orm.helpers.SQLOperations;
 import org.apache.commons.collections.CollectionUtils;
 
 import com.google.inject.Inject;
@@ -242,8 +244,17 @@
       }
     }
 
+    //Split principals into batches and combine them using OR
     if (CollectionUtils.isNotEmpty(filter.getPrincipals())) {
-      predicates.add(root.get("principalName").in(filter.getPrincipals()));
+      ArrayList<Predicate> principalPredicates = new ArrayList<>();
+      SQLOperations.batch(filter.getPrincipals(), SQLConstants.IN_ARGUMENT_MAX_SIZE,
+        (chunk, currentBatch, totalBatches, totalSize) -> {
+          principalPredicates.add(root.get("principalName").in(chunk));
+          return 0;
+        });
+
+      Predicate principalCombinedPredicate = cb.or(principalPredicates.toArray(new Predicate[0]));
+      predicates.add(principalCombinedPredicate);
     }
     cq.where(cb.and(predicates.toArray(new Predicate[0])));