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