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