You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by pa...@apache.org on 2011/10/25 22:16:40 UTC

svn commit: r1188886 - /hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java

Author: pauly
Date: Tue Oct 25 20:16:39 2011
New Revision: 1188886

URL: http://svn.apache.org/viewvc?rev=1188886&view=rev
Log:
HIVE-2368. Slow dropping of partitions caused by full listing of storage descriptors (Sohan Jain via pauly)


Modified:
    hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java?rev=1188886&r1=1188885&r2=1188886&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java Tue Oct 25 20:16:39 2011
@@ -1980,7 +1980,7 @@ public class ObjectStore implements RawS
     try {
       openTransaction();
       LOG.debug("execute removeUnusedColumnDescriptor");
-      List<MStorageDescriptor> referencedSDs = listStorageDescriptorsWithCD(oldCD);
+      List<MStorageDescriptor> referencedSDs = listStorageDescriptorsWithCD(oldCD, 1);
       //if no other SD references this CD, we can throw it out.
       if (referencedSDs != null && referencedSDs.isEmpty()) {
         pm.retrieve(oldCD);
@@ -2017,9 +2017,11 @@ public class ObjectStore implements RawS
   /**
    * Get a list of storage descriptors that reference a particular Column Descriptor
    * @param oldCD the column descriptor to get storage descriptors for
+   * @param maxSDs the maximum number of SDs to return
    * @return a list of storage descriptors
    */
-  private List<MStorageDescriptor> listStorageDescriptorsWithCD(MColumnDescriptor oldCD) {
+  private List<MStorageDescriptor> listStorageDescriptorsWithCD(MColumnDescriptor oldCD,
+      long maxSDs) {
     boolean success = false;
     List<MStorageDescriptor> sds = null;
     try {
@@ -2028,6 +2030,10 @@ public class ObjectStore implements RawS
       Query query = pm.newQuery(MStorageDescriptor.class,
           "this.cd == inCD");
       query.declareParameters("MColumnDescriptor inCD");
+      if(maxSDs >= 0) {
+        //User specified a row limit, set it on the Query
+        query.setRange(0, maxSDs);
+      }
       sds = (List<MStorageDescriptor>) query.execute(oldCD);
       LOG.debug("Done executing query for listStorageDescriptorsWithCD");
       pm.retrieveAll(sds);