You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by zs...@apache.org on 2010/01/21 08:31:27 UTC
svn commit: r901581 [9/10] - in /hadoop/hive/trunk: ./
cli/src/java/org/apache/hadoop/hive/cli/
common/src/java/org/apache/hadoop/hive/common/
common/src/java/org/apache/hadoop/hive/common/io/
contrib/src/java/org/apache/hadoop/hive/contrib/fileformat/...
Modified: hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java?rev=901581&r1=901580&r2=901581&view=diff
==============================================================================
--- hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java (original)
+++ hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java Thu Jan 21 07:29:29 2010
@@ -61,32 +61,30 @@
import org.apache.hadoop.util.StringUtils;
/**
- * This class is the interface between the application logic and the database store that
- * contains the objects.
- * Refrain putting any logic in mode.M* objects or in this file as former could be auto
- * generated and this class would need to be made into a interface that can read both
- * from a database and a filestore.
+ * This class is the interface between the application logic and the database
+ * store that contains the objects. Refrain putting any logic in mode.M* objects
+ * or in this file as former could be auto generated and this class would need
+ * to be made into a interface that can read both from a database and a
+ * filestore.
*/
public class ObjectStore implements RawStore, Configurable {
- @SuppressWarnings("nls")
- private static final String JPOX_CONFIG = "jpox.properties";
private static Properties prop = null;
private static PersistenceManagerFactory pmf = null;
private static final Log LOG = LogFactory.getLog(ObjectStore.class.getName());
+
private static enum TXN_STATUS {
- NO_STATE,
- OPEN,
- COMMITED,
- ROLLBACK
+ NO_STATE, OPEN, COMMITED, ROLLBACK
}
+
private boolean isInitialized = false;
private PersistenceManager pm = null;
private Configuration hiveConf;
private int openTrasactionCalls = 0;
private Transaction currentTransaction = null;
private TXN_STATUS transactionStatus = TXN_STATUS.NO_STATE;
-
- public ObjectStore() {}
+
+ public ObjectStore() {
+ }
public Configuration getConf() {
return hiveConf;
@@ -94,14 +92,15 @@
@SuppressWarnings("nls")
public void setConf(Configuration conf) {
- this.hiveConf = conf;
- if(isInitialized) {
+ hiveConf = conf;
+ if (isInitialized) {
return;
} else {
initialize();
}
- if(!isInitialized) {
- throw new RuntimeException("Unable to create persistence manager. Check dss.log for details");
+ if (!isInitialized) {
+ throw new RuntimeException(
+ "Unable to create persistence manager. Check dss.log for details");
} else {
LOG.info("Initialized ObjectStore");
}
@@ -109,9 +108,9 @@
private ClassLoader classLoader;
{
- this.classLoader = Thread.currentThread().getContextClassLoader();
- if (this.classLoader == null) {
- this.classLoader = ObjectStore.class.getClassLoader();
+ classLoader = Thread.currentThread().getContextClassLoader();
+ if (classLoader == null) {
+ classLoader = ObjectStore.class.getClassLoader();
}
}
@@ -120,47 +119,50 @@
LOG.info("ObjectStore, initialize called");
initDataSourceProps();
pm = getPersistenceManager();
- if(pm != null)
+ if (pm != null) {
isInitialized = true;
+ }
return;
}
/**
- * Properties specified in hive-default.xml override the properties specified in
- * jpox.properties.
+ * Properties specified in hive-default.xml override the properties specified
+ * in jpox.properties.
*/
@SuppressWarnings("nls")
private void initDataSourceProps() {
- if(prop != null) {
+ if (prop != null) {
return;
}
prop = new Properties();
-
+
Iterator<Map.Entry<String, String>> iter = hiveConf.iterator();
- while(iter.hasNext()) {
+ while (iter.hasNext()) {
Map.Entry<String, String> e = iter.next();
- if(e.getKey().contains("datanucleus") || e.getKey().contains("jdo")) {
+ if (e.getKey().contains("datanucleus") || e.getKey().contains("jdo")) {
Object prevVal = prop.setProperty(e.getKey(), e.getValue());
- if(LOG.isDebugEnabled() && !e.getKey().equals(HiveConf.ConfVars.METASTOREPWD.varname)) {
- LOG.debug("Overriding " + e.getKey() + " value " + prevVal
+ if (LOG.isDebugEnabled()
+ && !e.getKey().equals(HiveConf.ConfVars.METASTOREPWD.varname)) {
+ LOG.debug("Overriding " + e.getKey() + " value " + prevVal
+ " from jpox.properties with " + e.getValue());
}
}
}
- if(LOG.isDebugEnabled()) {
- for (Entry<Object, Object> e: prop.entrySet()) {
- if(!e.getKey().equals(HiveConf.ConfVars.METASTOREPWD.varname))
+ if (LOG.isDebugEnabled()) {
+ for (Entry<Object, Object> e : prop.entrySet()) {
+ if (!e.getKey().equals(HiveConf.ConfVars.METASTOREPWD.varname)) {
LOG.debug(e.getKey() + " = " + e.getValue());
+ }
}
}
}
private static PersistenceManagerFactory getPMF() {
- if(pmf == null) {
+ if (pmf == null) {
pmf = JDOHelper.getPersistenceManagerFactory(prop);
DataStoreCache dsc = pmf.getDataStoreCache();
- if(dsc != null) {
+ if (dsc != null) {
dsc.pinAll(true, MTable.class);
dsc.pinAll(true, MStorageDescriptor.class);
dsc.pinAll(true, MSerDeInfo.class);
@@ -173,76 +175,83 @@
}
return pmf;
}
-
+
private PersistenceManager getPersistenceManager() {
return getPMF().getPersistenceManager();
}
-
+
public void shutdown() {
- if(pm != null) {
+ if (pm != null) {
pm.close();
}
}
/**
- * Opens a new one or the one already created
- * Every call of this function must have corresponding commit or rollback function call
+ * Opens a new one or the one already created Every call of this function must
+ * have corresponding commit or rollback function call
+ *
* @return an active transaction
*/
-
+
public boolean openTransaction() {
- this.openTrasactionCalls++;
- if(this.openTrasactionCalls == 1) {
+ openTrasactionCalls++;
+ if (openTrasactionCalls == 1) {
currentTransaction = pm.currentTransaction();
currentTransaction.begin();
transactionStatus = TXN_STATUS.OPEN;
} else {
- // something is wrong since openTransactionCalls is greater than 1 but currentTransaction is not active
- assert((currentTransaction != null) && (currentTransaction.isActive()));
+ // something is wrong since openTransactionCalls is greater than 1 but
+ // currentTransaction is not active
+ assert ((currentTransaction != null) && (currentTransaction.isActive()));
}
return currentTransaction.isActive();
}
-
+
/**
- * if this is the commit of the first open call then an actual commit is called.
+ * if this is the commit of the first open call then an actual commit is
+ * called.
+ *
* @return Always returns true
*/
@SuppressWarnings("nls")
public boolean commitTransaction() {
- assert(this.openTrasactionCalls >= 1);
- if(!currentTransaction.isActive()) {
- throw new RuntimeException("Commit is called, but transaction is not active. Either there are" +
- "mismatching open and close calls or rollback was called in the same trasaction");
+ assert (openTrasactionCalls >= 1);
+ if (!currentTransaction.isActive()) {
+ throw new RuntimeException(
+ "Commit is called, but transaction is not active. Either there are"
+ + "mismatching open and close calls or rollback was called in the same trasaction");
}
- this.openTrasactionCalls--;
- if ((this.openTrasactionCalls == 0) && currentTransaction.isActive()) {
+ openTrasactionCalls--;
+ if ((openTrasactionCalls == 0) && currentTransaction.isActive()) {
transactionStatus = TXN_STATUS.COMMITED;
currentTransaction.commit();
}
return true;
}
-
+
/**
- * @return true if there is an active transaction. If the current transaction is either
- * committed or rolled back it returns false
+ * @return true if there is an active transaction. If the current transaction
+ * is either committed or rolled back it returns false
*/
public boolean isActiveTransaction() {
- if(currentTransaction == null)
+ if (currentTransaction == null) {
return false;
+ }
return currentTransaction.isActive();
}
-
+
/**
* Rolls back the current transaction if it is active
*/
public void rollbackTransaction() {
- if(this.openTrasactionCalls < 1) {
+ if (openTrasactionCalls < 1) {
return;
}
- this.openTrasactionCalls = 0;
- if(currentTransaction.isActive() && transactionStatus != TXN_STATUS.ROLLBACK) {
+ openTrasactionCalls = 0;
+ if (currentTransaction.isActive()
+ && transactionStatus != TXN_STATUS.ROLLBACK) {
transactionStatus = TXN_STATUS.ROLLBACK;
- // could already be rolled back
+ // could already be rolled back
currentTransaction.rollback();
}
}
@@ -250,26 +259,27 @@
public boolean createDatabase(Database db) {
boolean success = false;
boolean commited = false;
- MDatabase mdb = new MDatabase(db.getName().toLowerCase(), db.getDescription());
+ MDatabase mdb = new MDatabase(db.getName().toLowerCase(), db
+ .getDescription());
try {
openTransaction();
pm.makePersistent(mdb);
success = true;
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
return success;
}
-
+
public boolean createDatabase(String name) {
// TODO: get default path
Database db = new Database(name, "default_path");
return this.createDatabase(db);
}
-
+
@SuppressWarnings("nls")
private MDatabase getMDatabase(String name) throws NoSuchObjectException {
MDatabase db = null;
@@ -284,15 +294,16 @@
pm.retrieve(db);
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
- if(db == null) {
+ if (db == null) {
throw new NoSuchObjectException("There is no database named " + name);
}
return db;
}
+
public Database getDatabase(String name) throws NoSuchObjectException {
MDatabase db = null;
boolean commited = false;
@@ -301,7 +312,7 @@
db = getMDatabase(name);
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
@@ -309,12 +320,12 @@
}
public boolean dropDatabase(String dbname) {
-
+
boolean success = false;
boolean commited = false;
try {
openTransaction();
-
+
// first drop tables
dbname = dbname.toLowerCase();
LOG.info("Dropping database along with all tables " + dbname);
@@ -324,23 +335,24 @@
pm.deletePersistentAll(mtbls);
// then drop the database
- Query query = pm.newQuery(MDatabase.class, "name == dbName");
- query.declareParameters("java.lang.String dbName");
- query.setUnique(true);
- MDatabase db = (MDatabase) query.execute(dbname.trim());
+ Query query = pm.newQuery(MDatabase.class, "name == dbName");
+ query.declareParameters("java.lang.String dbName");
+ query.setUnique(true);
+ MDatabase db = (MDatabase) query.execute(dbname.trim());
pm.retrieve(db);
-
- //StringIdentity id = new StringIdentity(MDatabase.class, dbname);
- //MDatabase db = (MDatabase) pm.getObjectById(id);
- if(db != null)
+
+ // StringIdentity id = new StringIdentity(MDatabase.class, dbname);
+ // MDatabase db = (MDatabase) pm.getObjectById(id);
+ if (db != null) {
pm.deletePersistent(db);
+ }
commited = commitTransaction();
success = true;
} catch (JDOObjectNotFoundException e) {
- LOG.debug("database not found " + dbname,e);
+ LOG.debug("database not found " + dbname, e);
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
@@ -359,18 +371,19 @@
dbs = (List) query.execute();
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
return dbs;
}
-
+
private MType getMType(Type type) {
List<MFieldSchema> fields = new ArrayList<MFieldSchema>();
- if(type.getFields() != null) {
+ if (type.getFields() != null) {
for (FieldSchema field : type.getFields()) {
- fields.add(new MFieldSchema(field.getName(), field.getType(), field.getComment()));
+ fields.add(new MFieldSchema(field.getName(), field.getType(), field
+ .getComment()));
}
}
return new MType(type.getName(), type.getType1(), type.getType2(), fields);
@@ -378,9 +391,10 @@
private Type getType(MType mtype) {
List<FieldSchema> fields = new ArrayList<FieldSchema>();
- if(mtype.getFields() != null) {
+ if (mtype.getFields() != null) {
for (MFieldSchema field : mtype.getFields()) {
- fields.add(new FieldSchema(field.getName(), field.getType(), field.getComment()));
+ fields.add(new FieldSchema(field.getName(), field.getType(), field
+ .getComment()));
}
}
return new Type(mtype.getName(), mtype.getType1(), mtype.getType2(), fields);
@@ -396,7 +410,7 @@
commited = commitTransaction();
success = true;
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
@@ -408,17 +422,17 @@
boolean commited = false;
try {
openTransaction();
- Query query = pm.newQuery(MType.class, "name == typeName");
- query.declareParameters("java.lang.String typeName");
- query.setUnique(true);
- MType mtype = (MType) query.execute(typeName.trim());
+ Query query = pm.newQuery(MType.class, "name == typeName");
+ query.declareParameters("java.lang.String typeName");
+ query.setUnique(true);
+ MType mtype = (MType) query.execute(typeName.trim());
pm.retrieve(type);
- if(mtype != null) {
+ if (mtype != null) {
type = getType(mtype);
}
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
@@ -426,15 +440,15 @@
}
public boolean dropType(String typeName) {
-
+
boolean success = false;
boolean commited = false;
try {
openTransaction();
- Query query = pm.newQuery(MType.class, "name == typeName");
- query.declareParameters("java.lang.String typeName");
- query.setUnique(true);
- MType type = (MType) query.execute(typeName.trim());
+ Query query = pm.newQuery(MType.class, "name == typeName");
+ query.declareParameters("java.lang.String typeName");
+ query.setUnique(true);
+ MType type = (MType) query.execute(typeName.trim());
pm.retrieve(type);
pm.deletePersistent(type);
commited = commitTransaction();
@@ -443,14 +457,15 @@
commited = commitTransaction();
LOG.debug("type not found " + typeName, e);
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
return success;
}
- public void createTable(Table tbl) throws InvalidObjectException, MetaException {
+ public void createTable(Table tbl) throws InvalidObjectException,
+ MetaException {
boolean commited = false;
try {
openTransaction();
@@ -458,20 +473,20 @@
pm.makePersistent(mtbl);
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
}
-
+
public boolean dropTable(String dbName, String tableName) {
-
+
boolean success = false;
try {
openTransaction();
- MTable tbl = getMTable(dbName, tableName);
+ MTable tbl = getMTable(dbName, tableName);
pm.retrieve(tbl);
- if(tbl != null) {
+ if (tbl != null) {
// first remove all the partitions
pm.deletePersistentAll(listMPartitions(dbName, tableName, -1));
// then remove the table
@@ -479,7 +494,7 @@
}
success = commitTransaction();
} finally {
- if(!success) {
+ if (!success) {
rollbackTransaction();
}
}
@@ -494,24 +509,26 @@
tbl = convertToTable(getMTable(dbName, tableName));
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
return tbl;
}
-
- public List<String> getTables(String dbName, String pattern) throws MetaException {
+
+ public List<String> getTables(String dbName, String pattern)
+ throws MetaException {
boolean commited = false;
List<String> tbls = null;
try {
openTransaction();
dbName = dbName.toLowerCase();
- // Take the pattern and split it on the | to get all the composing patterns
- String [] subpatterns = pattern.trim().split("\\|");
+ // Take the pattern and split it on the | to get all the composing
+ // patterns
+ String[] subpatterns = pattern.trim().split("\\|");
String query = "select tableName from org.apache.hadoop.hive.metastore.model.MTable where database.name == dbName && (";
boolean first = true;
- for(String subpattern: subpatterns) {
+ for (String subpattern : subpatterns) {
subpattern = "(?i)" + subpattern.replaceAll("\\*", ".*");
if (!first) {
query = query + " || ";
@@ -525,19 +542,19 @@
q.declareParameters("java.lang.String dbName");
q.setResult("tableName");
Collection names = (Collection) q.execute(dbName.trim());
- tbls = new ArrayList<String>();
- for (Iterator i = names.iterator (); i.hasNext ();) {
- tbls.add((String) i.next ());
+ tbls = new ArrayList<String>();
+ for (Iterator i = names.iterator(); i.hasNext();) {
+ tbls.add((String) i.next());
}
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
return tbls;
}
-
+
private MTable getMTable(String db, String table) {
MTable mtbl = null;
boolean commited = false;
@@ -545,14 +562,15 @@
openTransaction();
db = db.toLowerCase();
table = table.toLowerCase();
- Query query = pm.newQuery(MTable.class, "tableName == table && database.name == db");
- query.declareParameters("java.lang.String table, java.lang.String db");
- query.setUnique(true);
- mtbl = (MTable) query.execute(table.trim(), db.trim());
+ Query query = pm.newQuery(MTable.class,
+ "tableName == table && database.name == db");
+ query.declareParameters("java.lang.String table, java.lang.String db");
+ query.setUnique(true);
+ mtbl = (MTable) query.execute(table.trim(), db.trim());
pm.retrieve(mtbl);
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
@@ -560,78 +578,74 @@
}
private Table convertToTable(MTable mtbl) throws MetaException {
- if(mtbl == null) return null;
- return new Table(mtbl.getTableName(),
- mtbl.getDatabase().getName(),
- mtbl.getOwner(),
- mtbl.getCreateTime(),
- mtbl.getLastAccessTime(),
- mtbl.getRetention(),
- convertToStorageDescriptor(mtbl.getSd()),
- convertToFieldSchemas(mtbl.getPartitionKeys()),
- mtbl.getParameters(),
- mtbl.getViewOriginalText(),
- mtbl.getViewExpandedText());
- }
-
- private MTable convertToMTable(Table tbl) throws InvalidObjectException, MetaException {
- if(tbl == null) return null;
+ if (mtbl == null) {
+ return null;
+ }
+ return new Table(mtbl.getTableName(), mtbl.getDatabase().getName(), mtbl
+ .getOwner(), mtbl.getCreateTime(), mtbl.getLastAccessTime(), mtbl
+ .getRetention(), convertToStorageDescriptor(mtbl.getSd()),
+ convertToFieldSchemas(mtbl.getPartitionKeys()), mtbl.getParameters(),
+ mtbl.getViewOriginalText(), mtbl.getViewExpandedText());
+ }
+
+ private MTable convertToMTable(Table tbl) throws InvalidObjectException,
+ MetaException {
+ if (tbl == null) {
+ return null;
+ }
MDatabase mdb = null;
try {
- mdb = this.getMDatabase(tbl.getDbName());
+ mdb = getMDatabase(tbl.getDbName());
} catch (NoSuchObjectException e) {
LOG.error(StringUtils.stringifyException(e));
- throw new InvalidObjectException("Database " + tbl.getDbName() + " doesn't exsit.");
+ throw new InvalidObjectException("Database " + tbl.getDbName()
+ + " doesn't exsit.");
}
- return new MTable(tbl.getTableName().toLowerCase(),
- mdb,
- convertToMStorageDescriptor(tbl.getSd()),
- tbl.getOwner(),
- tbl.getCreateTime(),
- tbl.getLastAccessTime(),
- tbl.getRetention(),
- convertToMFieldSchemas(tbl.getPartitionKeys()),
- tbl.getParameters(),
- tbl.getViewOriginalText(),
- tbl.getViewExpandedText());
+ return new MTable(tbl.getTableName().toLowerCase(), mdb,
+ convertToMStorageDescriptor(tbl.getSd()), tbl.getOwner(), tbl
+ .getCreateTime(), tbl.getLastAccessTime(), tbl.getRetention(),
+ convertToMFieldSchemas(tbl.getPartitionKeys()), tbl.getParameters(),
+ tbl.getViewOriginalText(), tbl.getViewExpandedText());
}
-
+
private List<MFieldSchema> convertToMFieldSchemas(List<FieldSchema> keys) {
List<MFieldSchema> mkeys = null;
- if(keys != null) {
+ if (keys != null) {
mkeys = new ArrayList<MFieldSchema>(keys.size());
for (FieldSchema part : keys) {
- mkeys.add(new MFieldSchema(part.getName().toLowerCase(), part.getType(), part.getComment()));
+ mkeys.add(new MFieldSchema(part.getName().toLowerCase(),
+ part.getType(), part.getComment()));
}
}
return mkeys;
- }
-
+ }
+
private List<FieldSchema> convertToFieldSchemas(List<MFieldSchema> mkeys) {
List<FieldSchema> keys = null;
- if(mkeys != null) {
+ if (mkeys != null) {
keys = new ArrayList<FieldSchema>(mkeys.size());
for (MFieldSchema part : mkeys) {
- keys.add(new FieldSchema(part.getName(), part.getType(), part.getComment()));
+ keys.add(new FieldSchema(part.getName(), part.getType(), part
+ .getComment()));
}
}
return keys;
}
-
+
private List<MOrder> convertToMOrders(List<Order> keys) {
List<MOrder> mkeys = null;
- if(keys != null) {
+ if (keys != null) {
mkeys = new ArrayList<MOrder>(keys.size());
for (Order part : keys) {
mkeys.add(new MOrder(part.getCol().toLowerCase(), part.getOrder()));
}
}
return mkeys;
- }
-
+ }
+
private List<Order> convertToOrders(List<MOrder> mkeys) {
List<Order> keys = null;
- if(mkeys != null) {
+ if (mkeys != null) {
keys = new ArrayList<Order>();
for (MOrder part : mkeys) {
keys.add(new Order(part.getCol(), part.getOrder()));
@@ -639,54 +653,51 @@
}
return keys;
}
-
+
private SerDeInfo converToSerDeInfo(MSerDeInfo ms) throws MetaException {
- if(ms == null) throw new MetaException("Invalid SerDeInfo object");
- return new SerDeInfo(ms.getName(),
- ms.getSerializationLib(),
- ms.getParameters());
+ if (ms == null) {
+ throw new MetaException("Invalid SerDeInfo object");
+ }
+ return new SerDeInfo(ms.getName(), ms.getSerializationLib(), ms
+ .getParameters());
}
-
+
private MSerDeInfo converToMSerDeInfo(SerDeInfo ms) throws MetaException {
- if(ms == null) throw new MetaException("Invalid SerDeInfo object");
- return new MSerDeInfo(ms.getName(),
- ms.getSerializationLib(),
- ms.getParameters());
- }
-
+ if (ms == null) {
+ throw new MetaException("Invalid SerDeInfo object");
+ }
+ return new MSerDeInfo(ms.getName(), ms.getSerializationLib(), ms
+ .getParameters());
+ }
+
// MSD and SD should be same objects. Not sure how to make then same right now
// MSerdeInfo *& SerdeInfo should be same as well
- private StorageDescriptor convertToStorageDescriptor(MStorageDescriptor msd) throws MetaException {
- if(msd == null) return null;
- return new StorageDescriptor(
- convertToFieldSchemas(msd.getCols()),
- msd.getLocation(),
- msd.getInputFormat(),
- msd.getOutputFormat(),
- msd.isCompressed(),
- msd.getNumBuckets(),
- converToSerDeInfo(msd.getSerDeInfo()),
- msd.getBucketCols(),
- convertToOrders(msd.getSortCols()),
- msd.getParameters());
- }
-
- private MStorageDescriptor convertToMStorageDescriptor(StorageDescriptor sd) throws MetaException {
- if(sd == null) return null;
- return new MStorageDescriptor(
- convertToMFieldSchemas(sd.getCols()),
- sd.getLocation(),
- sd.getInputFormat(),
- sd.getOutputFormat(),
- sd.isCompressed(),
- sd.getNumBuckets(),
- converToMSerDeInfo(sd.getSerdeInfo()),
- sd.getBucketCols(),
- convertToMOrders(sd.getSortCols()),
- sd.getParameters());
+ private StorageDescriptor convertToStorageDescriptor(MStorageDescriptor msd)
+ throws MetaException {
+ if (msd == null) {
+ return null;
+ }
+ return new StorageDescriptor(convertToFieldSchemas(msd.getCols()), msd
+ .getLocation(), msd.getInputFormat(), msd.getOutputFormat(), msd
+ .isCompressed(), msd.getNumBuckets(), converToSerDeInfo(msd
+ .getSerDeInfo()), msd.getBucketCols(), convertToOrders(msd
+ .getSortCols()), msd.getParameters());
+ }
+
+ private MStorageDescriptor convertToMStorageDescriptor(StorageDescriptor sd)
+ throws MetaException {
+ if (sd == null) {
+ return null;
+ }
+ return new MStorageDescriptor(convertToMFieldSchemas(sd.getCols()), sd
+ .getLocation(), sd.getInputFormat(), sd.getOutputFormat(), sd
+ .isCompressed(), sd.getNumBuckets(), converToMSerDeInfo(sd
+ .getSerdeInfo()), sd.getBucketCols(),
+ convertToMOrders(sd.getSortCols()), sd.getParameters());
}
-
- public boolean addPartition(Partition part) throws InvalidObjectException, MetaException {
+
+ public boolean addPartition(Partition part) throws InvalidObjectException,
+ MetaException {
boolean success = false;
boolean commited = false;
try {
@@ -696,114 +707,120 @@
commited = commitTransaction();
success = true;
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
return success;
}
-
- public Partition getPartition(String dbName, String tableName, List<String> part_vals) throws MetaException {
- this.openTransaction();
- Partition part = convertToPart(this.getMPartition(dbName, tableName, part_vals));
- this.commitTransaction();
+
+ public Partition getPartition(String dbName, String tableName,
+ List<String> part_vals) throws MetaException {
+ openTransaction();
+ Partition part = convertToPart(getMPartition(dbName, tableName, part_vals));
+ commitTransaction();
return part;
}
-
- private MPartition getMPartition(String dbName, String tableName, List<String> part_vals) throws MetaException {
+
+ private MPartition getMPartition(String dbName, String tableName,
+ List<String> part_vals) throws MetaException {
MPartition mpart = null;
boolean commited = false;
try {
openTransaction();
dbName = dbName.toLowerCase();
tableName = tableName.toLowerCase();
- MTable mtbl = this.getMTable(dbName, tableName);
- if(mtbl == null) {
+ MTable mtbl = getMTable(dbName, tableName);
+ if (mtbl == null) {
commited = commitTransaction();
return null;
}
- // Change the query to use part_vals instead of the name which is redundant
- String name = Warehouse.makePartName(convertToFieldSchemas(mtbl.getPartitionKeys()), part_vals);
- Query query = pm.newQuery(MPartition.class, "table.tableName == t1 && table.database.name == t2 && partitionName == t3");
- query.declareParameters("java.lang.String t1, java.lang.String t2, java.lang.String t3");
- query.setUnique(true);
- mpart = (MPartition) query.execute(tableName.trim(), dbName.trim(), name);
+ // Change the query to use part_vals instead of the name which is
+ // redundant
+ String name = Warehouse.makePartName(convertToFieldSchemas(mtbl
+ .getPartitionKeys()), part_vals);
+ Query query = pm
+ .newQuery(MPartition.class,
+ "table.tableName == t1 && table.database.name == t2 && partitionName == t3");
+ query
+ .declareParameters("java.lang.String t1, java.lang.String t2, java.lang.String t3");
+ query.setUnique(true);
+ mpart = (MPartition) query.execute(tableName.trim(), dbName.trim(), name);
pm.retrieve(mpart);
commited = commitTransaction();
} finally {
- if(!commited) {
+ if (!commited) {
rollbackTransaction();
}
}
return mpart;
}
-
- private MPartition convertToMPart(Partition part) throws InvalidObjectException, MetaException {
- if(part == null) {
+
+ private MPartition convertToMPart(Partition part)
+ throws InvalidObjectException, MetaException {
+ if (part == null) {
return null;
}
MTable mt = getMTable(part.getDbName(), part.getTableName());
- if(mt == null) {
- throw new InvalidObjectException("Partition doesn't have a valid table or database name");
- }
- return new MPartition(
- Warehouse.makePartName(convertToFieldSchemas(mt.getPartitionKeys()), part.getValues()),
- mt,
- part.getValues(),
- part.getCreateTime(),
- part.getLastAccessTime(),
- convertToMStorageDescriptor(part.getSd()),
- part.getParameters());
+ if (mt == null) {
+ throw new InvalidObjectException(
+ "Partition doesn't have a valid table or database name");
+ }
+ return new MPartition(Warehouse.makePartName(convertToFieldSchemas(mt
+ .getPartitionKeys()), part.getValues()), mt, part.getValues(), part
+ .getCreateTime(), part.getLastAccessTime(),
+ convertToMStorageDescriptor(part.getSd()), part.getParameters());
}
-
+
private Partition convertToPart(MPartition mpart) throws MetaException {
- if(mpart == null) {
+ if (mpart == null) {
return null;
}
- return new Partition(
- mpart.getValues(),
- mpart.getTable().getDatabase().getName(),
- mpart.getTable().getTableName(),
- mpart.getCreateTime(),
- mpart.getLastAccessTime(),
- convertToStorageDescriptor(mpart.getSd()),
+ return new Partition(mpart.getValues(), mpart.getTable().getDatabase()
+ .getName(), mpart.getTable().getTableName(), mpart.getCreateTime(),
+ mpart.getLastAccessTime(), convertToStorageDescriptor(mpart.getSd()),
mpart.getParameters());
}
- public boolean dropPartition(String dbName, String tableName, List<String> part_vals) throws MetaException {
+ public boolean dropPartition(String dbName, String tableName,
+ List<String> part_vals) throws MetaException {
boolean success = false;
try {
openTransaction();
- MPartition part = this.getMPartition(dbName, tableName, part_vals);
- if(part != null)
+ MPartition part = getMPartition(dbName, tableName, part_vals);
+ if (part != null) {
pm.deletePersistent(part);
+ }
success = commitTransaction();
} finally {
- if(!success) {
+ if (!success) {
rollbackTransaction();
}
}
return success;
}
-
- public List<Partition> getPartitions(String dbName, String tableName, int max) throws MetaException {
- this.openTransaction();
- List<Partition> parts = convertToParts(this.listMPartitions(dbName, tableName, max));
- this.commitTransaction();
+
+ public List<Partition> getPartitions(String dbName, String tableName, int max)
+ throws MetaException {
+ openTransaction();
+ List<Partition> parts = convertToParts(listMPartitions(dbName, tableName,
+ max));
+ commitTransaction();
return parts;
}
-
- private List<Partition> convertToParts(List<MPartition> mparts) throws MetaException {
+
+ private List<Partition> convertToParts(List<MPartition> mparts)
+ throws MetaException {
List<Partition> parts = new ArrayList<Partition>(mparts.size());
for (MPartition mp : mparts) {
- parts.add(this.convertToPart(mp));
+ parts.add(convertToPart(mp));
}
return parts;
}
-
- //TODO:pc implement max
- public List<String> listPartitionNames(String dbName, String tableName, short max) throws MetaException {
+ // TODO:pc implement max
+ public List<String> listPartitionNames(String dbName, String tableName,
+ short max) throws MetaException {
List<String> pns = new ArrayList<String>();
boolean success = false;
try {
@@ -811,25 +828,28 @@
LOG.debug("Executing getPartitionNames");
dbName = dbName.toLowerCase();
tableName = tableName.toLowerCase();
- Query q = pm.newQuery("select partitionName from org.apache.hadoop.hive.metastore.model.MPartition where table.database.name == t1 && table.tableName == t2 order by partitionName asc");
+ Query q = pm
+ .newQuery("select partitionName from org.apache.hadoop.hive.metastore.model.MPartition where table.database.name == t1 && table.tableName == t2 order by partitionName asc");
q.declareParameters("java.lang.String t1, java.lang.String t2");
q.setResult("partitionName");
- Collection names = (Collection) q.execute(dbName.trim(), tableName.trim());
- pns = new ArrayList<String>();
- for (Iterator i = names.iterator (); i.hasNext ();) {
- pns.add((String) i.next ());
+ Collection names = (Collection) q
+ .execute(dbName.trim(), tableName.trim());
+ pns = new ArrayList<String>();
+ for (Iterator i = names.iterator(); i.hasNext();) {
+ pns.add((String) i.next());
}
success = commitTransaction();
} finally {
- if(!success) {
+ if (!success) {
rollbackTransaction();
}
}
return pns;
}
-
+
// TODO:pc implement max
- private List<MPartition> listMPartitions(String dbName, String tableName, int max) {
+ private List<MPartition> listMPartitions(String dbName, String tableName,
+ int max) {
boolean success = false;
List<MPartition> mparts = null;
try {
@@ -837,37 +857,40 @@
LOG.debug("Executing listMPartitions");
dbName = dbName.toLowerCase();
tableName = tableName.toLowerCase();
- Query query = pm.newQuery(MPartition.class, "table.tableName == t1 && table.database.name == t2");
- query.declareParameters("java.lang.String t1, java.lang.String t2");
- mparts = (List<MPartition>) query.execute(tableName.trim(), dbName.trim());
+ Query query = pm.newQuery(MPartition.class,
+ "table.tableName == t1 && table.database.name == t2");
+ query.declareParameters("java.lang.String t1, java.lang.String t2");
+ mparts = (List<MPartition>) query
+ .execute(tableName.trim(), dbName.trim());
LOG.debug("Done executing query for listMPartitions");
pm.retrieveAll(mparts);
success = commitTransaction();
LOG.debug("Done retrieving all objects for listMPartitions");
} finally {
- if(!success) {
+ if (!success) {
rollbackTransaction();
}
}
return mparts;
}
- public void alterTable(String dbname, String name, Table newTable) throws InvalidObjectException, MetaException {
+ public void alterTable(String dbname, String name, Table newTable)
+ throws InvalidObjectException, MetaException {
boolean success = false;
try {
openTransaction();
name = name.toLowerCase();
dbname = dbname.toLowerCase();
MTable newt = convertToMTable(newTable);
- if(newt == null) {
+ if (newt == null) {
throw new InvalidObjectException("new table is invalid");
}
-
- MTable oldt = this.getMTable(dbname, name);
- if(oldt == null) {
+
+ MTable oldt = getMTable(dbname, name);
+ if (oldt == null) {
throw new MetaException("table " + name + " doesn't exist");
}
-
+
// For now only alter name, owner, paramters, cols, bucketcols are allowed
oldt.setTableName(newt.getTableName().toLowerCase());
oldt.setParameters(newt.getParameters());
@@ -875,19 +898,19 @@
oldt.setSd(newt.getSd());
oldt.setDatabase(newt.getDatabase());
oldt.setRetention(newt.getRetention());
- oldt.setPartitionKeys(newt.getPartitionKeys());
-
+ oldt.setPartitionKeys(newt.getPartitionKeys());
+
// commit the changes
success = commitTransaction();
} finally {
- if(!success) {
+ if (!success) {
rollbackTransaction();
}
}
}
public void alterPartition(String dbname, String name, Partition newPart)
- throws InvalidObjectException, MetaException {
+ throws InvalidObjectException, MetaException {
boolean success = false;
try {
openTransaction();
@@ -900,14 +923,16 @@
}
oldp.setParameters(newPart.getParameters());
copyMSD(newp.getSd(), oldp.getSd());
- if (newp.getCreateTime() != oldp.getCreateTime())
+ if (newp.getCreateTime() != oldp.getCreateTime()) {
oldp.setCreateTime(newp.getCreateTime());
- if (newp.getLastAccessTime() != oldp.getLastAccessTime())
+ }
+ if (newp.getLastAccessTime() != oldp.getLastAccessTime()) {
oldp.setLastAccessTime(newp.getLastAccessTime());
+ }
// commit the changes
success = commitTransaction();
} finally {
- if(!success) {
+ if (!success) {
rollbackTransaction();
}
}
@@ -922,7 +947,8 @@
oldSd.setOutputFormat(newSd.getOutputFormat());
oldSd.setNumBuckets(newSd.getNumBuckets());
oldSd.getSerDeInfo().setName(newSd.getSerDeInfo().getName());
- oldSd.getSerDeInfo().setSerializationLib(newSd.getSerDeInfo().getSerializationLib());
+ oldSd.getSerDeInfo().setSerializationLib(
+ newSd.getSerDeInfo().getSerializationLib());
oldSd.getSerDeInfo().setParameters(newSd.getSerDeInfo().getParameters());
}
}
Modified: hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RawStore.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RawStore.java?rev=901581&r1=901580&r2=901581&view=diff
==============================================================================
--- hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RawStore.java (original)
+++ hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/RawStore.java Thu Jan 21 07:29:29 2010
@@ -34,15 +34,18 @@
public abstract void shutdown();
/**
- * Opens a new one or the one already created
- * Every call of this function must have corresponding commit or rollback function call
+ * Opens a new one or the one already created Every call of this function must
+ * have corresponding commit or rollback function call
+ *
* @return an active transaction
*/
public abstract boolean openTransaction();
/**
- * if this is the commit of the first open call then an actual commit is called.
+ * if this is the commit of the first open call then an actual commit is
+ * called.
+ *
* @return true or false
*/
public abstract boolean commitTransaction();
@@ -56,7 +59,8 @@
public abstract boolean createDatabase(String name) throws MetaException;
- public abstract Database getDatabase(String name) throws NoSuchObjectException;
+ public abstract Database getDatabase(String name)
+ throws NoSuchObjectException;
public abstract boolean dropDatabase(String dbname);
@@ -68,30 +72,35 @@
public abstract boolean dropType(String typeName);
- public abstract void createTable(Table tbl) throws InvalidObjectException, MetaException;
+ public abstract void createTable(Table tbl) throws InvalidObjectException,
+ MetaException;
- public abstract boolean dropTable(String dbName, String tableName) throws MetaException;
+ public abstract boolean dropTable(String dbName, String tableName)
+ throws MetaException;
- public abstract Table getTable(String dbName, String tableName) throws MetaException;
+ public abstract Table getTable(String dbName, String tableName)
+ throws MetaException;
- public abstract boolean addPartition(Partition part) throws InvalidObjectException, MetaException;
+ public abstract boolean addPartition(Partition part)
+ throws InvalidObjectException, MetaException;
- public abstract Partition getPartition(String dbName, String tableName, List<String> part_vals)
- throws MetaException;
+ public abstract Partition getPartition(String dbName, String tableName,
+ List<String> part_vals) throws MetaException;
- public abstract boolean dropPartition(String dbName, String tableName, List<String> part_vals)
- throws MetaException;
+ public abstract boolean dropPartition(String dbName, String tableName,
+ List<String> part_vals) throws MetaException;
- public abstract List<Partition> getPartitions(String dbName, String tableName, int max)
- throws MetaException;
+ public abstract List<Partition> getPartitions(String dbName,
+ String tableName, int max) throws MetaException;
public abstract void alterTable(String dbname, String name, Table newTable)
throws InvalidObjectException, MetaException;
- public List<String> getTables(String dbName, String pattern) throws MetaException;
+ public List<String> getTables(String dbName, String pattern)
+ throws MetaException;
- public abstract List<String> listPartitionNames(String db_name, String tbl_name, short max_parts)
- throws MetaException;
+ public abstract List<String> listPartitionNames(String db_name,
+ String tbl_name, short max_parts) throws MetaException;
public abstract void alterPartition(String db_name, String tbl_name,
Partition new_part) throws InvalidObjectException, MetaException;
Modified: hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java?rev=901581&r1=901580&r2=901581&view=diff
==============================================================================
--- hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java (original)
+++ hadoop/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/Warehouse.java Thu Jan 21 07:29:29 2010
@@ -46,17 +46,17 @@
*/
public class Warehouse {
private Path whRoot;
- private Configuration conf;
+ private final Configuration conf;
String whRootString;
public static final Log LOG = LogFactory.getLog("hive.metastore.warehouse");
public Warehouse(Configuration conf) throws MetaException {
this.conf = conf;
- whRootString = HiveConf.getVar(conf, HiveConf.ConfVars.METASTOREWAREHOUSE);
- if(StringUtils.isBlank(whRootString)) {
+ whRootString = HiveConf.getVar(conf, HiveConf.ConfVars.METASTOREWAREHOUSE);
+ if (StringUtils.isBlank(whRootString)) {
throw new MetaException(HiveConf.ConfVars.METASTOREWAREHOUSE.varname
- + " is not set in the config or blank");
+ + " is not set in the config or blank");
}
}
@@ -73,30 +73,29 @@
}
/**
- * Hadoop File System reverse lookups paths with raw ip addresses
- * The File System URI always contains the canonical DNS name of the
- * Namenode. Subsequently, operations on paths with raw ip addresses
- * cause an exception since they don't match the file system URI.
- *
- * This routine solves this problem by replacing the scheme and authority
- * of a path with the scheme and authority of the FileSystem that it
- * maps to.
- *
- * @param path Path to be canonicalized
+ * Hadoop File System reverse lookups paths with raw ip addresses The File
+ * System URI always contains the canonical DNS name of the Namenode.
+ * Subsequently, operations on paths with raw ip addresses cause an exception
+ * since they don't match the file system URI.
+ *
+ * This routine solves this problem by replacing the scheme and authority of a
+ * path with the scheme and authority of the FileSystem that it maps to.
+ *
+ * @param path
+ * Path to be canonicalized
* @return Path with canonical scheme and authority
*/
public Path getDnsPath(Path path) throws MetaException {
- FileSystem fs = getFs(path);
- return (new Path(fs.getUri().getScheme(), fs.getUri().getAuthority(),
- path.toUri().getPath()));
+ FileSystem fs = getFs(path);
+ return (new Path(fs.getUri().getScheme(), fs.getUri().getAuthority(), path
+ .toUri().getPath()));
}
-
/**
* Resolve the configured warehouse root dir with respect to the configuration
- * This involves opening the FileSystem corresponding to the warehouse root dir
- * (but that should be ok given that this is only called during DDL statements
- * for non-external tables).
+ * This involves opening the FileSystem corresponding to the warehouse root
+ * dir (but that should be ok given that this is only called during DDL
+ * statements for non-external tables).
*/
private Path getWhRoot() throws MetaException {
if (whRoot != null) {
@@ -112,8 +111,9 @@
}
return new Path(getWhRoot(), dbName.toLowerCase() + ".db");
}
-
- public Path getDefaultTablePath(String dbName, String tableName) throws MetaException {
+
+ public Path getDefaultTablePath(String dbName, String tableName)
+ throws MetaException {
return new Path(getDefaultDatabasePath(dbName), tableName.toLowerCase());
}
@@ -127,16 +127,16 @@
}
return false;
}
-
+
public boolean deleteDir(Path f, boolean recursive) throws MetaException {
LOG.info("deleting " + f);
try {
FileSystem fs = getFs(f);
- if(!fs.exists(f)) {
+ if (!fs.exists(f)) {
return false;
}
- // older versions of Hadoop don't have a Trash constructor based on the
+ // older versions of Hadoop don't have a Trash constructor based on the
// Path or FileSystem. So need to achieve this by creating a dummy conf.
// this needs to be filtered out based on version
Configuration dupConf = new Configuration(conf);
@@ -151,11 +151,11 @@
LOG.info("Deleted the diretory " + f);
return true;
}
- if(fs.exists(f)) {
+ if (fs.exists(f)) {
throw new MetaException("Unable to delete directory: " + f);
}
} catch (FileNotFoundException e) {
- return true; //ok even if there is not data
+ return true; // ok even if there is not data
} catch (IOException e) {
MetaStoreUtils.logAndThrowMetaException(e);
}
@@ -164,7 +164,7 @@
// NOTE: This is for generating the internal path name for partitions. Users
// should always use the MetaStore API to get the path name for a partition.
- // Users should not directly take partition values and turn it into a path
+ // Users should not directly take partition values and turn it into a path
// name by themselves, because the logic below may change in the future.
//
// In the future, it's OK to add new chars to the escape list, and old data
@@ -173,34 +173,34 @@
// new partitions, it will use new names.
static BitSet charToEscape = new BitSet(128);
static {
- for (char c = 0; c < ' ' ; c++) {
+ for (char c = 0; c < ' '; c++) {
charToEscape.set(c);
}
- char[] clist = new char[] { '"', '#', '%', '\'', '*', '/', ':',
- '=', '?', '\\', '\u00FF'
- };
+ char[] clist = new char[] { '"', '#', '%', '\'', '*', '/', ':', '=', '?',
+ '\\', '\u00FF' };
for (char c : clist) {
charToEscape.set(c);
}
}
+
static boolean needsEscaping(char c) {
- return c >= 0 && c < charToEscape.size()
- && charToEscape.get(c);
+ return c >= 0 && c < charToEscape.size() && charToEscape.get(c);
}
-
+
static String escapePathName(String path) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < path.length(); i++) {
char c = path.charAt(i);
if (needsEscaping(c)) {
sb.append('%');
- sb.append(String.format("%1$02X", (int)c));
+ sb.append(String.format("%1$02X", (int) c));
} else {
sb.append(c);
}
}
return sb.toString();
}
+
static String unescapePathName(String path) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < path.length(); i++) {
@@ -208,25 +208,26 @@
if (c == '%' && i + 2 < path.length()) {
int code = -1;
try {
- code = Integer.valueOf(path.substring(i+1, i+3), 16);
+ code = Integer.valueOf(path.substring(i + 1, i + 3), 16);
} catch (Exception e) {
code = -1;
}
if (code >= 0) {
- sb.append((char)code);
+ sb.append((char) code);
i += 2;
continue;
}
}
sb.append(c);
- }
+ }
return sb.toString();
}
-
- public static String makePartName(Map<String, String> spec) throws MetaException {
+
+ public static String makePartName(Map<String, String> spec)
+ throws MetaException {
StringBuffer suffixBuf = new StringBuffer();
- for(Entry<String, String> e: spec.entrySet()) {
- if(e.getValue() == null || e.getValue().length() == 0) {
+ for (Entry<String, String> e : spec.entrySet()) {
+ if (e.getValue() == null || e.getValue().length() == 0) {
throw new MetaException("Partition spec is incorrect. " + spec);
}
suffixBuf.append(escapePathName(e.getKey()));
@@ -236,9 +237,11 @@
}
return suffixBuf.toString();
}
-
+
static final Pattern pat = Pattern.compile("([^/]+)=([^/]+)");
- public static LinkedHashMap<String, String> makeSpecFromName(String name) throws MetaException {
+
+ public static LinkedHashMap<String, String> makeSpecFromName(String name)
+ throws MetaException {
LinkedHashMap<String, String> partSpec = new LinkedHashMap<String, String>();
if (name == null || name.isEmpty()) {
throw new MetaException("Partition name is invalid. " + name);
@@ -253,40 +256,42 @@
String v = unescapePathName(m.group(2));
if (partSpec.containsKey(k)) {
- throw new MetaException("Partition name is invalid. Key " + k + " defined at two levels");
+ throw new MetaException("Partition name is invalid. Key " + k
+ + " defined at two levels");
}
String[] kv = new String[2];
kv[0] = k;
kv[1] = v;
kvs.add(kv);
- }
- else {
+ } else {
throw new MetaException("Partition name is invalid. " + name);
}
currPath = currPath.getParent();
- } while(currPath != null && !currPath.getName().isEmpty());
-
- // reverse the list since we checked the part from leaf dir to table's base dir
- for(int i = kvs.size(); i > 0; i--) {
- partSpec.put(kvs.get(i-1)[0], kvs.get(i-1)[1]);
+ } while (currPath != null && !currPath.getName().isEmpty());
+
+ // reverse the list since we checked the part from leaf dir to table's base
+ // dir
+ for (int i = kvs.size(); i > 0; i--) {
+ partSpec.put(kvs.get(i - 1)[0], kvs.get(i - 1)[1]);
}
return partSpec;
}
-
- public Path getPartitionPath(String dbName, String tableName, LinkedHashMap<String, String> pm) throws MetaException {
- return new Path(getDefaultTablePath(dbName, tableName), makePartName(pm));
+ public Path getPartitionPath(String dbName, String tableName,
+ LinkedHashMap<String, String> pm) throws MetaException {
+ return new Path(getDefaultTablePath(dbName, tableName), makePartName(pm));
}
-
- public Path getPartitionPath(Path tblPath, LinkedHashMap<String, String> pm) throws MetaException {
- return new Path(tblPath, makePartName(pm));
+
+ public Path getPartitionPath(Path tblPath, LinkedHashMap<String, String> pm)
+ throws MetaException {
+ return new Path(tblPath, makePartName(pm));
}
-
+
public boolean isDir(Path f) throws MetaException {
try {
FileSystem fs = getFs(f);
FileStatus fstatus = fs.getFileStatus(f);
- if(!fstatus.isDir()) {
+ if (!fstatus.isDir()) {
return false;
}
} catch (FileNotFoundException e) {
@@ -297,13 +302,14 @@
return true;
}
- public static String makePartName(List<FieldSchema> partCols, List<String> vals) throws MetaException {
+ public static String makePartName(List<FieldSchema> partCols,
+ List<String> vals) throws MetaException {
if ((partCols.size() != vals.size()) || (partCols.size() == 0)) {
throw new MetaException("Invalid partition key & values");
}
StringBuilder name = new StringBuilder();
- for(int i=0; i< partCols.size(); i++) {
- if(i > 0) {
+ for (int i = 0; i < partCols.size(); i++) {
+ if (i > 0) {
name.append(Path.SEPARATOR);
}
name.append(escapePathName((partCols.get(i)).getName().toLowerCase()));