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);


Reply via email to