You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sw...@apache.org on 2014/01/25 00:22:31 UTC

git commit: AMBARI-4420. ORA-01795: maximum number of expressions in a list is 1000 in Ambari Server log. (swagle)

Updated Branches:
  refs/heads/branch-1.4.4 1ac860878 -> 70c9163ce


AMBARI-4420. ORA-01795: maximum number of expressions in a list is 1000 in Ambari Server log. (swagle)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/70c9163c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/70c9163c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/70c9163c

Branch: refs/heads/branch-1.4.4
Commit: 70c9163cee723adb38945ed5692b73ab77bd7ef8
Parents: 1ac8608
Author: Siddharth Wagle <sw...@hortonworks.com>
Authored: Fri Jan 24 14:40:50 2014 -0800
Committer: Siddharth Wagle <sw...@hortonworks.com>
Committed: Fri Jan 24 14:40:50 2014 -0800

----------------------------------------------------------------------
 .../apache/ambari/server/orm/dao/DaoUtils.java  |  4 +++-
 .../server/orm/dao/HostRoleCommandDAO.java      | 23 +++++++++++++++-----
 2 files changed, 21 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/70c9163c/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/DaoUtils.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/DaoUtils.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/DaoUtils.java
index f35b483..f181706 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/DaoUtils.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/DaoUtils.java
@@ -29,6 +29,8 @@ import java.util.List;
 @Singleton
 class DaoUtils {
 
+  public static final int ORACLE_LIST_LIMIT = 999;
+
   public <T> List<T> selectList(TypedQuery<T> query, Object... parameters) {
     setParameters(query, parameters);
     try {
@@ -63,7 +65,7 @@ class DaoUtils {
 
   public void setParameters(Query query, Object... parameters) {
     for (int i = 0; i < parameters.length; i++) {
-      query.setParameter(i+1, parameters[i]);
+      query.setParameter(i + 1, parameters[i]);
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/70c9163c/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
index 5678887..e70f5c7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
@@ -18,11 +18,11 @@
 
 package org.apache.ambari.server.orm.dao;
 
+import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import com.google.inject.persist.Transactional;
-import org.apache.ambari.server.Role;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.orm.entities.HostEntity;
 import org.apache.ambari.server.orm.entities.HostRoleCommandEntity;
@@ -31,9 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 import javax.persistence.TypedQuery;
-
 import java.util.*;
 
 @Singleton
@@ -52,12 +50,27 @@ public class HostRoleCommandDAO {
   }
 
   @Transactional
-  public List<HostRoleCommandEntity> findByPKs(Collection<Long> taskIds) {
+  public List<HostRoleCommandEntity> findByPKs(List<Long> taskIds) {
     TypedQuery<HostRoleCommandEntity> query = entityManagerProvider.get().createQuery(
         "SELECT task FROM HostRoleCommandEntity task WHERE task.taskId IN ?1 " +
             "ORDER BY task.taskId",
         HostRoleCommandEntity.class);
-    return daoUtils.selectList(query, taskIds);
+
+
+    //TODO temp fix unnecessary for dbms different from oracle
+    List<HostRoleCommandEntity> result;
+
+    if (taskIds.size() > DaoUtils.ORACLE_LIST_LIMIT) {
+      result = new ArrayList<HostRoleCommandEntity>();
+      List<List<Long>> lists = Lists.partition(taskIds, DaoUtils.ORACLE_LIST_LIMIT);
+      for (List<Long> list : lists) {
+        result.addAll(daoUtils.selectList(query, list));
+      }
+    } else {
+      result = daoUtils.selectList(query, taskIds);
+    }
+
+    return result;
   }
 
   @Transactional