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/07/20 20:25:50 UTC
svn commit: r1148878 [5/5] - in /hive/trunk/metastore: if/
src/gen/thrift/gen-cpp/
src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/
src/gen/thrift/gen-php/hive_metastore/
src/gen/thrift/gen-py/hive_metastore/ src/gen/thrift/gen-rb/ src...
Modified: hive/trunk/metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore.py
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore.py?rev=1148878&r1=1148877&r2=1148878&view=diff
==============================================================================
--- hive/trunk/metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore.py (original)
+++ hive/trunk/metastore/src/gen/thrift/gen-py/hive_metastore/ThriftHiveMetastore.py Wed Jul 20 18:25:45 2011
@@ -168,6 +168,13 @@ class Iface(fb303.FacebookService.Iface)
"""
pass
+ def add_partitions(self, new_parts):
+ """
+ Parameters:
+ - new_parts
+ """
+ pass
+
def append_partition(self, db_name, tbl_name, part_vals):
"""
Parameters:
@@ -1224,6 +1231,42 @@ class Client(fb303.FacebookService.Clien
raise result.o3
raise TApplicationException(TApplicationException.MISSING_RESULT, "add_partition failed: unknown result");
+ def add_partitions(self, new_parts):
+ """
+ Parameters:
+ - new_parts
+ """
+ self.send_add_partitions(new_parts)
+ return self.recv_add_partitions()
+
+ def send_add_partitions(self, new_parts):
+ self._oprot.writeMessageBegin('add_partitions', TMessageType.CALL, self._seqid)
+ args = add_partitions_args()
+ args.new_parts = new_parts
+ args.write(self._oprot)
+ self._oprot.writeMessageEnd()
+ self._oprot.trans.flush()
+
+ def recv_add_partitions(self, ):
+ (fname, mtype, rseqid) = self._iprot.readMessageBegin()
+ if mtype == TMessageType.EXCEPTION:
+ x = TApplicationException()
+ x.read(self._iprot)
+ self._iprot.readMessageEnd()
+ raise x
+ result = add_partitions_result()
+ result.read(self._iprot)
+ self._iprot.readMessageEnd()
+ if result.success != None:
+ return result.success
+ if result.o1 != None:
+ raise result.o1
+ if result.o2 != None:
+ raise result.o2
+ if result.o3 != None:
+ raise result.o3
+ raise TApplicationException(TApplicationException.MISSING_RESULT, "add_partitions failed: unknown result");
+
def append_partition(self, db_name, tbl_name, part_vals):
"""
Parameters:
@@ -2731,6 +2774,7 @@ class Processor(fb303.FacebookService.Pr
self._processMap["get_table_objects_by_name"] = Processor.process_get_table_objects_by_name
self._processMap["alter_table"] = Processor.process_alter_table
self._processMap["add_partition"] = Processor.process_add_partition
+ self._processMap["add_partitions"] = Processor.process_add_partitions
self._processMap["append_partition"] = Processor.process_append_partition
self._processMap["append_partition_by_name"] = Processor.process_append_partition_by_name
self._processMap["drop_partition"] = Processor.process_drop_partition
@@ -3115,6 +3159,24 @@ class Processor(fb303.FacebookService.Pr
oprot.writeMessageEnd()
oprot.trans.flush()
+ def process_add_partitions(self, seqid, iprot, oprot):
+ args = add_partitions_args()
+ args.read(iprot)
+ iprot.readMessageEnd()
+ result = add_partitions_result()
+ try:
+ result.success = self._handler.add_partitions(args.new_parts)
+ except InvalidObjectException, o1:
+ result.o1 = o1
+ except AlreadyExistsException, o2:
+ result.o2 = o2
+ except MetaException, o3:
+ result.o3 = o3
+ oprot.writeMessageBegin("add_partitions", TMessageType.REPLY, seqid)
+ result.write(oprot)
+ oprot.writeMessageEnd()
+ oprot.trans.flush()
+
def process_append_partition(self, seqid, iprot, oprot):
args = append_partition_args()
args.read(iprot)
@@ -6800,6 +6862,171 @@ class add_partition_result:
def __ne__(self, other):
return not (self == other)
+class add_partitions_args:
+ """
+ Attributes:
+ - new_parts
+ """
+
+ thrift_spec = (
+ None, # 0
+ (1, TType.LIST, 'new_parts', (TType.STRUCT,(Partition, Partition.thrift_spec)), None, ), # 1
+ )
+
+ def __init__(self, new_parts=None,):
+ self.new_parts = new_parts
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 1:
+ if ftype == TType.LIST:
+ self.new_parts = []
+ (_etype242, _size239) = iprot.readListBegin()
+ for _i243 in xrange(_size239):
+ _elem244 = Partition()
+ _elem244.read(iprot)
+ self.new_parts.append(_elem244)
+ iprot.readListEnd()
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('add_partitions_args')
+ if self.new_parts != None:
+ oprot.writeFieldBegin('new_parts', TType.LIST, 1)
+ oprot.writeListBegin(TType.STRUCT, len(self.new_parts))
+ for iter245 in self.new_parts:
+ iter245.write(oprot)
+ oprot.writeListEnd()
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+ def validate(self):
+ return
+
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
+class add_partitions_result:
+ """
+ Attributes:
+ - success
+ - o1
+ - o2
+ - o3
+ """
+
+ thrift_spec = (
+ (0, TType.I32, 'success', None, None, ), # 0
+ (1, TType.STRUCT, 'o1', (InvalidObjectException, InvalidObjectException.thrift_spec), None, ), # 1
+ (2, TType.STRUCT, 'o2', (AlreadyExistsException, AlreadyExistsException.thrift_spec), None, ), # 2
+ (3, TType.STRUCT, 'o3', (MetaException, MetaException.thrift_spec), None, ), # 3
+ )
+
+ def __init__(self, success=None, o1=None, o2=None, o3=None,):
+ self.success = success
+ self.o1 = o1
+ self.o2 = o2
+ self.o3 = o3
+
+ def read(self, iprot):
+ if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+ fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+ return
+ iprot.readStructBegin()
+ while True:
+ (fname, ftype, fid) = iprot.readFieldBegin()
+ if ftype == TType.STOP:
+ break
+ if fid == 0:
+ if ftype == TType.I32:
+ self.success = iprot.readI32();
+ else:
+ iprot.skip(ftype)
+ elif fid == 1:
+ if ftype == TType.STRUCT:
+ self.o1 = InvalidObjectException()
+ self.o1.read(iprot)
+ else:
+ iprot.skip(ftype)
+ elif fid == 2:
+ if ftype == TType.STRUCT:
+ self.o2 = AlreadyExistsException()
+ self.o2.read(iprot)
+ else:
+ iprot.skip(ftype)
+ elif fid == 3:
+ if ftype == TType.STRUCT:
+ self.o3 = MetaException()
+ self.o3.read(iprot)
+ else:
+ iprot.skip(ftype)
+ else:
+ iprot.skip(ftype)
+ iprot.readFieldEnd()
+ iprot.readStructEnd()
+
+ def write(self, oprot):
+ if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+ oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+ return
+ oprot.writeStructBegin('add_partitions_result')
+ if self.success != None:
+ oprot.writeFieldBegin('success', TType.I32, 0)
+ oprot.writeI32(self.success)
+ oprot.writeFieldEnd()
+ if self.o1 != None:
+ oprot.writeFieldBegin('o1', TType.STRUCT, 1)
+ self.o1.write(oprot)
+ oprot.writeFieldEnd()
+ if self.o2 != None:
+ oprot.writeFieldBegin('o2', TType.STRUCT, 2)
+ self.o2.write(oprot)
+ oprot.writeFieldEnd()
+ if self.o3 != None:
+ oprot.writeFieldBegin('o3', TType.STRUCT, 3)
+ self.o3.write(oprot)
+ oprot.writeFieldEnd()
+ oprot.writeFieldStop()
+ oprot.writeStructEnd()
+ def validate(self):
+ return
+
+
+ def __repr__(self):
+ L = ['%s=%r' % (key, value)
+ for key, value in self.__dict__.iteritems()]
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+ def __eq__(self, other):
+ return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not (self == other)
+
class append_partition_args:
"""
Attributes:
@@ -6842,10 +7069,10 @@ class append_partition_args:
elif fid == 3:
if ftype == TType.LIST:
self.part_vals = []
- (_etype242, _size239) = iprot.readListBegin()
- for _i243 in xrange(_size239):
- _elem244 = iprot.readString();
- self.part_vals.append(_elem244)
+ (_etype249, _size246) = iprot.readListBegin()
+ for _i250 in xrange(_size246):
+ _elem251 = iprot.readString();
+ self.part_vals.append(_elem251)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -6870,8 +7097,8 @@ class append_partition_args:
if self.part_vals != None:
oprot.writeFieldBegin('part_vals', TType.LIST, 3)
oprot.writeListBegin(TType.STRING, len(self.part_vals))
- for iter245 in self.part_vals:
- oprot.writeString(iter245)
+ for iter252 in self.part_vals:
+ oprot.writeString(iter252)
oprot.writeListEnd()
oprot.writeFieldEnd()
oprot.writeFieldStop()
@@ -7215,10 +7442,10 @@ class drop_partition_args:
elif fid == 3:
if ftype == TType.LIST:
self.part_vals = []
- (_etype249, _size246) = iprot.readListBegin()
- for _i250 in xrange(_size246):
- _elem251 = iprot.readString();
- self.part_vals.append(_elem251)
+ (_etype256, _size253) = iprot.readListBegin()
+ for _i257 in xrange(_size253):
+ _elem258 = iprot.readString();
+ self.part_vals.append(_elem258)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -7248,8 +7475,8 @@ class drop_partition_args:
if self.part_vals != None:
oprot.writeFieldBegin('part_vals', TType.LIST, 3)
oprot.writeListBegin(TType.STRING, len(self.part_vals))
- for iter252 in self.part_vals:
- oprot.writeString(iter252)
+ for iter259 in self.part_vals:
+ oprot.writeString(iter259)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.deleteData != None:
@@ -7578,10 +7805,10 @@ class get_partition_args:
elif fid == 3:
if ftype == TType.LIST:
self.part_vals = []
- (_etype256, _size253) = iprot.readListBegin()
- for _i257 in xrange(_size253):
- _elem258 = iprot.readString();
- self.part_vals.append(_elem258)
+ (_etype263, _size260) = iprot.readListBegin()
+ for _i264 in xrange(_size260):
+ _elem265 = iprot.readString();
+ self.part_vals.append(_elem265)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -7606,8 +7833,8 @@ class get_partition_args:
if self.part_vals != None:
oprot.writeFieldBegin('part_vals', TType.LIST, 3)
oprot.writeListBegin(TType.STRING, len(self.part_vals))
- for iter259 in self.part_vals:
- oprot.writeString(iter259)
+ for iter266 in self.part_vals:
+ oprot.writeString(iter266)
oprot.writeListEnd()
oprot.writeFieldEnd()
oprot.writeFieldStop()
@@ -7760,10 +7987,10 @@ class get_partition_with_auth_args:
elif fid == 3:
if ftype == TType.LIST:
self.part_vals = []
- (_etype263, _size260) = iprot.readListBegin()
- for _i264 in xrange(_size260):
- _elem265 = iprot.readString();
- self.part_vals.append(_elem265)
+ (_etype270, _size267) = iprot.readListBegin()
+ for _i271 in xrange(_size267):
+ _elem272 = iprot.readString();
+ self.part_vals.append(_elem272)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -7775,10 +8002,10 @@ class get_partition_with_auth_args:
elif fid == 5:
if ftype == TType.LIST:
self.group_names = []
- (_etype269, _size266) = iprot.readListBegin()
- for _i270 in xrange(_size266):
- _elem271 = iprot.readString();
- self.group_names.append(_elem271)
+ (_etype276, _size273) = iprot.readListBegin()
+ for _i277 in xrange(_size273):
+ _elem278 = iprot.readString();
+ self.group_names.append(_elem278)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -7803,8 +8030,8 @@ class get_partition_with_auth_args:
if self.part_vals != None:
oprot.writeFieldBegin('part_vals', TType.LIST, 3)
oprot.writeListBegin(TType.STRING, len(self.part_vals))
- for iter272 in self.part_vals:
- oprot.writeString(iter272)
+ for iter279 in self.part_vals:
+ oprot.writeString(iter279)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.user_name != None:
@@ -7814,8 +8041,8 @@ class get_partition_with_auth_args:
if self.group_names != None:
oprot.writeFieldBegin('group_names', TType.LIST, 5)
oprot.writeListBegin(TType.STRING, len(self.group_names))
- for iter273 in self.group_names:
- oprot.writeString(iter273)
+ for iter280 in self.group_names:
+ oprot.writeString(iter280)
oprot.writeListEnd()
oprot.writeFieldEnd()
oprot.writeFieldStop()
@@ -8202,11 +8429,11 @@ class get_partitions_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype277, _size274) = iprot.readListBegin()
- for _i278 in xrange(_size274):
- _elem279 = Partition()
- _elem279.read(iprot)
- self.success.append(_elem279)
+ (_etype284, _size281) = iprot.readListBegin()
+ for _i285 in xrange(_size281):
+ _elem286 = Partition()
+ _elem286.read(iprot)
+ self.success.append(_elem286)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -8235,8 +8462,8 @@ class get_partitions_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRUCT, len(self.success))
- for iter280 in self.success:
- iter280.write(oprot)
+ for iter287 in self.success:
+ iter287.write(oprot)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -8322,10 +8549,10 @@ class get_partitions_with_auth_args:
elif fid == 5:
if ftype == TType.LIST:
self.group_names = []
- (_etype284, _size281) = iprot.readListBegin()
- for _i285 in xrange(_size281):
- _elem286 = iprot.readString();
- self.group_names.append(_elem286)
+ (_etype291, _size288) = iprot.readListBegin()
+ for _i292 in xrange(_size288):
+ _elem293 = iprot.readString();
+ self.group_names.append(_elem293)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -8358,8 +8585,8 @@ class get_partitions_with_auth_args:
if self.group_names != None:
oprot.writeFieldBegin('group_names', TType.LIST, 5)
oprot.writeListBegin(TType.STRING, len(self.group_names))
- for iter287 in self.group_names:
- oprot.writeString(iter287)
+ for iter294 in self.group_names:
+ oprot.writeString(iter294)
oprot.writeListEnd()
oprot.writeFieldEnd()
oprot.writeFieldStop()
@@ -8410,11 +8637,11 @@ class get_partitions_with_auth_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype291, _size288) = iprot.readListBegin()
- for _i292 in xrange(_size288):
- _elem293 = Partition()
- _elem293.read(iprot)
- self.success.append(_elem293)
+ (_etype298, _size295) = iprot.readListBegin()
+ for _i299 in xrange(_size295):
+ _elem300 = Partition()
+ _elem300.read(iprot)
+ self.success.append(_elem300)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -8443,8 +8670,8 @@ class get_partitions_with_auth_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRUCT, len(self.success))
- for iter294 in self.success:
- iter294.write(oprot)
+ for iter301 in self.success:
+ iter301.write(oprot)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -8583,10 +8810,10 @@ class get_partition_names_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype298, _size295) = iprot.readListBegin()
- for _i299 in xrange(_size295):
- _elem300 = iprot.readString();
- self.success.append(_elem300)
+ (_etype305, _size302) = iprot.readListBegin()
+ for _i306 in xrange(_size302):
+ _elem307 = iprot.readString();
+ self.success.append(_elem307)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -8609,8 +8836,8 @@ class get_partition_names_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRING, len(self.success))
- for iter301 in self.success:
- oprot.writeString(iter301)
+ for iter308 in self.success:
+ oprot.writeString(iter308)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o2 != None:
@@ -8679,10 +8906,10 @@ class get_partitions_ps_args:
elif fid == 3:
if ftype == TType.LIST:
self.part_vals = []
- (_etype305, _size302) = iprot.readListBegin()
- for _i306 in xrange(_size302):
- _elem307 = iprot.readString();
- self.part_vals.append(_elem307)
+ (_etype312, _size309) = iprot.readListBegin()
+ for _i313 in xrange(_size309):
+ _elem314 = iprot.readString();
+ self.part_vals.append(_elem314)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -8712,8 +8939,8 @@ class get_partitions_ps_args:
if self.part_vals != None:
oprot.writeFieldBegin('part_vals', TType.LIST, 3)
oprot.writeListBegin(TType.STRING, len(self.part_vals))
- for iter308 in self.part_vals:
- oprot.writeString(iter308)
+ for iter315 in self.part_vals:
+ oprot.writeString(iter315)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.max_parts != None:
@@ -8765,11 +8992,11 @@ class get_partitions_ps_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype312, _size309) = iprot.readListBegin()
- for _i313 in xrange(_size309):
- _elem314 = Partition()
- _elem314.read(iprot)
- self.success.append(_elem314)
+ (_etype319, _size316) = iprot.readListBegin()
+ for _i320 in xrange(_size316):
+ _elem321 = Partition()
+ _elem321.read(iprot)
+ self.success.append(_elem321)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -8792,8 +9019,8 @@ class get_partitions_ps_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRUCT, len(self.success))
- for iter315 in self.success:
- iter315.write(oprot)
+ for iter322 in self.success:
+ iter322.write(oprot)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -8868,10 +9095,10 @@ class get_partitions_ps_with_auth_args:
elif fid == 3:
if ftype == TType.LIST:
self.part_vals = []
- (_etype319, _size316) = iprot.readListBegin()
- for _i320 in xrange(_size316):
- _elem321 = iprot.readString();
- self.part_vals.append(_elem321)
+ (_etype326, _size323) = iprot.readListBegin()
+ for _i327 in xrange(_size323):
+ _elem328 = iprot.readString();
+ self.part_vals.append(_elem328)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -8888,10 +9115,10 @@ class get_partitions_ps_with_auth_args:
elif fid == 6:
if ftype == TType.LIST:
self.group_names = []
- (_etype325, _size322) = iprot.readListBegin()
- for _i326 in xrange(_size322):
- _elem327 = iprot.readString();
- self.group_names.append(_elem327)
+ (_etype332, _size329) = iprot.readListBegin()
+ for _i333 in xrange(_size329):
+ _elem334 = iprot.readString();
+ self.group_names.append(_elem334)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -8916,8 +9143,8 @@ class get_partitions_ps_with_auth_args:
if self.part_vals != None:
oprot.writeFieldBegin('part_vals', TType.LIST, 3)
oprot.writeListBegin(TType.STRING, len(self.part_vals))
- for iter328 in self.part_vals:
- oprot.writeString(iter328)
+ for iter335 in self.part_vals:
+ oprot.writeString(iter335)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.max_parts != None:
@@ -8931,8 +9158,8 @@ class get_partitions_ps_with_auth_args:
if self.group_names != None:
oprot.writeFieldBegin('group_names', TType.LIST, 6)
oprot.writeListBegin(TType.STRING, len(self.group_names))
- for iter329 in self.group_names:
- oprot.writeString(iter329)
+ for iter336 in self.group_names:
+ oprot.writeString(iter336)
oprot.writeListEnd()
oprot.writeFieldEnd()
oprot.writeFieldStop()
@@ -8983,11 +9210,11 @@ class get_partitions_ps_with_auth_result
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype333, _size330) = iprot.readListBegin()
- for _i334 in xrange(_size330):
- _elem335 = Partition()
- _elem335.read(iprot)
- self.success.append(_elem335)
+ (_etype340, _size337) = iprot.readListBegin()
+ for _i341 in xrange(_size337):
+ _elem342 = Partition()
+ _elem342.read(iprot)
+ self.success.append(_elem342)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -9016,8 +9243,8 @@ class get_partitions_ps_with_auth_result
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRUCT, len(self.success))
- for iter336 in self.success:
- iter336.write(oprot)
+ for iter343 in self.success:
+ iter343.write(oprot)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -9090,10 +9317,10 @@ class get_partition_names_ps_args:
elif fid == 3:
if ftype == TType.LIST:
self.part_vals = []
- (_etype340, _size337) = iprot.readListBegin()
- for _i341 in xrange(_size337):
- _elem342 = iprot.readString();
- self.part_vals.append(_elem342)
+ (_etype347, _size344) = iprot.readListBegin()
+ for _i348 in xrange(_size344):
+ _elem349 = iprot.readString();
+ self.part_vals.append(_elem349)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -9123,8 +9350,8 @@ class get_partition_names_ps_args:
if self.part_vals != None:
oprot.writeFieldBegin('part_vals', TType.LIST, 3)
oprot.writeListBegin(TType.STRING, len(self.part_vals))
- for iter343 in self.part_vals:
- oprot.writeString(iter343)
+ for iter350 in self.part_vals:
+ oprot.writeString(iter350)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.max_parts != None:
@@ -9176,10 +9403,10 @@ class get_partition_names_ps_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype347, _size344) = iprot.readListBegin()
- for _i348 in xrange(_size344):
- _elem349 = iprot.readString();
- self.success.append(_elem349)
+ (_etype354, _size351) = iprot.readListBegin()
+ for _i355 in xrange(_size351):
+ _elem356 = iprot.readString();
+ self.success.append(_elem356)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -9202,8 +9429,8 @@ class get_partition_names_ps_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRING, len(self.success))
- for iter350 in self.success:
- oprot.writeString(iter350)
+ for iter357 in self.success:
+ oprot.writeString(iter357)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -9353,11 +9580,11 @@ class get_partitions_by_filter_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype354, _size351) = iprot.readListBegin()
- for _i355 in xrange(_size351):
- _elem356 = Partition()
- _elem356.read(iprot)
- self.success.append(_elem356)
+ (_etype361, _size358) = iprot.readListBegin()
+ for _i362 in xrange(_size358):
+ _elem363 = Partition()
+ _elem363.read(iprot)
+ self.success.append(_elem363)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -9386,8 +9613,8 @@ class get_partitions_by_filter_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRUCT, len(self.success))
- for iter357 in self.success:
- iter357.write(oprot)
+ for iter364 in self.success:
+ iter364.write(oprot)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -9457,10 +9684,10 @@ class get_partitions_by_names_args:
elif fid == 3:
if ftype == TType.LIST:
self.names = []
- (_etype361, _size358) = iprot.readListBegin()
- for _i362 in xrange(_size358):
- _elem363 = iprot.readString();
- self.names.append(_elem363)
+ (_etype368, _size365) = iprot.readListBegin()
+ for _i369 in xrange(_size365):
+ _elem370 = iprot.readString();
+ self.names.append(_elem370)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -9485,8 +9712,8 @@ class get_partitions_by_names_args:
if self.names != None:
oprot.writeFieldBegin('names', TType.LIST, 3)
oprot.writeListBegin(TType.STRING, len(self.names))
- for iter364 in self.names:
- oprot.writeString(iter364)
+ for iter371 in self.names:
+ oprot.writeString(iter371)
oprot.writeListEnd()
oprot.writeFieldEnd()
oprot.writeFieldStop()
@@ -9537,11 +9764,11 @@ class get_partitions_by_names_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype368, _size365) = iprot.readListBegin()
- for _i369 in xrange(_size365):
- _elem370 = Partition()
- _elem370.read(iprot)
- self.success.append(_elem370)
+ (_etype375, _size372) = iprot.readListBegin()
+ for _i376 in xrange(_size372):
+ _elem377 = Partition()
+ _elem377.read(iprot)
+ self.success.append(_elem377)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -9570,8 +9797,8 @@ class get_partitions_by_names_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRUCT, len(self.success))
- for iter371 in self.success:
- iter371.write(oprot)
+ for iter378 in self.success:
+ iter378.write(oprot)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -9985,10 +10212,10 @@ class partition_name_to_vals_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype375, _size372) = iprot.readListBegin()
- for _i376 in xrange(_size372):
- _elem377 = iprot.readString();
- self.success.append(_elem377)
+ (_etype382, _size379) = iprot.readListBegin()
+ for _i383 in xrange(_size379):
+ _elem384 = iprot.readString();
+ self.success.append(_elem384)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -10011,8 +10238,8 @@ class partition_name_to_vals_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRING, len(self.success))
- for iter378 in self.success:
- oprot.writeString(iter378)
+ for iter385 in self.success:
+ oprot.writeString(iter385)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -10123,11 +10350,11 @@ class partition_name_to_spec_result:
if fid == 0:
if ftype == TType.MAP:
self.success = {}
- (_ktype380, _vtype381, _size379 ) = iprot.readMapBegin()
- for _i383 in xrange(_size379):
- _key384 = iprot.readString();
- _val385 = iprot.readString();
- self.success[_key384] = _val385
+ (_ktype387, _vtype388, _size386 ) = iprot.readMapBegin()
+ for _i390 in xrange(_size386):
+ _key391 = iprot.readString();
+ _val392 = iprot.readString();
+ self.success[_key391] = _val392
iprot.readMapEnd()
else:
iprot.skip(ftype)
@@ -10150,9 +10377,9 @@ class partition_name_to_spec_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.MAP, 0)
oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.success))
- for kiter386,viter387 in self.success.items():
- oprot.writeString(kiter386)
- oprot.writeString(viter387)
+ for kiter393,viter394 in self.success.items():
+ oprot.writeString(kiter393)
+ oprot.writeString(viter394)
oprot.writeMapEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -10221,11 +10448,11 @@ class markPartitionForEvent_args:
elif fid == 3:
if ftype == TType.MAP:
self.part_vals = {}
- (_ktype389, _vtype390, _size388 ) = iprot.readMapBegin()
- for _i392 in xrange(_size388):
- _key393 = iprot.readString();
- _val394 = iprot.readString();
- self.part_vals[_key393] = _val394
+ (_ktype396, _vtype397, _size395 ) = iprot.readMapBegin()
+ for _i399 in xrange(_size395):
+ _key400 = iprot.readString();
+ _val401 = iprot.readString();
+ self.part_vals[_key400] = _val401
iprot.readMapEnd()
else:
iprot.skip(ftype)
@@ -10255,9 +10482,9 @@ class markPartitionForEvent_args:
if self.part_vals != None:
oprot.writeFieldBegin('part_vals', TType.MAP, 3)
oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.part_vals))
- for kiter395,viter396 in self.part_vals.items():
- oprot.writeString(kiter395)
- oprot.writeString(viter396)
+ for kiter402,viter403 in self.part_vals.items():
+ oprot.writeString(kiter402)
+ oprot.writeString(viter403)
oprot.writeMapEnd()
oprot.writeFieldEnd()
if self.eventType != None:
@@ -10451,11 +10678,11 @@ class isPartitionMarkedForEvent_args:
elif fid == 3:
if ftype == TType.MAP:
self.part_vals = {}
- (_ktype398, _vtype399, _size397 ) = iprot.readMapBegin()
- for _i401 in xrange(_size397):
- _key402 = iprot.readString();
- _val403 = iprot.readString();
- self.part_vals[_key402] = _val403
+ (_ktype405, _vtype406, _size404 ) = iprot.readMapBegin()
+ for _i408 in xrange(_size404):
+ _key409 = iprot.readString();
+ _val410 = iprot.readString();
+ self.part_vals[_key409] = _val410
iprot.readMapEnd()
else:
iprot.skip(ftype)
@@ -10485,9 +10712,9 @@ class isPartitionMarkedForEvent_args:
if self.part_vals != None:
oprot.writeFieldBegin('part_vals', TType.MAP, 3)
oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.part_vals))
- for kiter404,viter405 in self.part_vals.items():
- oprot.writeString(kiter404)
- oprot.writeString(viter405)
+ for kiter411,viter412 in self.part_vals.items():
+ oprot.writeString(kiter411)
+ oprot.writeString(viter412)
oprot.writeMapEnd()
oprot.writeFieldEnd()
if self.eventType != None:
@@ -11448,11 +11675,11 @@ class get_indexes_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype409, _size406) = iprot.readListBegin()
- for _i410 in xrange(_size406):
- _elem411 = Index()
- _elem411.read(iprot)
- self.success.append(_elem411)
+ (_etype416, _size413) = iprot.readListBegin()
+ for _i417 in xrange(_size413):
+ _elem418 = Index()
+ _elem418.read(iprot)
+ self.success.append(_elem418)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -11481,8 +11708,8 @@ class get_indexes_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRUCT, len(self.success))
- for iter412 in self.success:
- iter412.write(oprot)
+ for iter419 in self.success:
+ iter419.write(oprot)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -11621,10 +11848,10 @@ class get_index_names_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype416, _size413) = iprot.readListBegin()
- for _i417 in xrange(_size413):
- _elem418 = iprot.readString();
- self.success.append(_elem418)
+ (_etype423, _size420) = iprot.readListBegin()
+ for _i424 in xrange(_size420):
+ _elem425 = iprot.readString();
+ self.success.append(_elem425)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -11647,8 +11874,8 @@ class get_index_names_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRING, len(self.success))
- for iter419 in self.success:
- oprot.writeString(iter419)
+ for iter426 in self.success:
+ oprot.writeString(iter426)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o2 != None:
@@ -12002,10 +12229,10 @@ class get_role_names_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype423, _size420) = iprot.readListBegin()
- for _i424 in xrange(_size420):
- _elem425 = iprot.readString();
- self.success.append(_elem425)
+ (_etype430, _size427) = iprot.readListBegin()
+ for _i431 in xrange(_size427):
+ _elem432 = iprot.readString();
+ self.success.append(_elem432)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -12028,8 +12255,8 @@ class get_role_names_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRING, len(self.success))
- for iter426 in self.success:
- oprot.writeString(iter426)
+ for iter433 in self.success:
+ oprot.writeString(iter433)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -12496,11 +12723,11 @@ class list_roles_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype430, _size427) = iprot.readListBegin()
- for _i431 in xrange(_size427):
- _elem432 = Role()
- _elem432.read(iprot)
- self.success.append(_elem432)
+ (_etype437, _size434) = iprot.readListBegin()
+ for _i438 in xrange(_size434):
+ _elem439 = Role()
+ _elem439.read(iprot)
+ self.success.append(_elem439)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -12523,8 +12750,8 @@ class list_roles_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRUCT, len(self.success))
- for iter433 in self.success:
- iter433.write(oprot)
+ for iter440 in self.success:
+ iter440.write(oprot)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
@@ -12591,10 +12818,10 @@ class get_privilege_set_args:
elif fid == 3:
if ftype == TType.LIST:
self.group_names = []
- (_etype437, _size434) = iprot.readListBegin()
- for _i438 in xrange(_size434):
- _elem439 = iprot.readString();
- self.group_names.append(_elem439)
+ (_etype444, _size441) = iprot.readListBegin()
+ for _i445 in xrange(_size441):
+ _elem446 = iprot.readString();
+ self.group_names.append(_elem446)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -12619,8 +12846,8 @@ class get_privilege_set_args:
if self.group_names != None:
oprot.writeFieldBegin('group_names', TType.LIST, 3)
oprot.writeListBegin(TType.STRING, len(self.group_names))
- for iter440 in self.group_names:
- oprot.writeString(iter440)
+ for iter447 in self.group_names:
+ oprot.writeString(iter447)
oprot.writeListEnd()
oprot.writeFieldEnd()
oprot.writeFieldStop()
@@ -12824,11 +13051,11 @@ class list_privileges_result:
if fid == 0:
if ftype == TType.LIST:
self.success = []
- (_etype444, _size441) = iprot.readListBegin()
- for _i445 in xrange(_size441):
- _elem446 = HiveObjectPrivilege()
- _elem446.read(iprot)
- self.success.append(_elem446)
+ (_etype451, _size448) = iprot.readListBegin()
+ for _i452 in xrange(_size448):
+ _elem453 = HiveObjectPrivilege()
+ _elem453.read(iprot)
+ self.success.append(_elem453)
iprot.readListEnd()
else:
iprot.skip(ftype)
@@ -12851,8 +13078,8 @@ class list_privileges_result:
if self.success != None:
oprot.writeFieldBegin('success', TType.LIST, 0)
oprot.writeListBegin(TType.STRUCT, len(self.success))
- for iter447 in self.success:
- iter447.write(oprot)
+ for iter454 in self.success:
+ iter454.write(oprot)
oprot.writeListEnd()
oprot.writeFieldEnd()
if self.o1 != None:
Modified: hive/trunk/metastore/src/gen/thrift/gen-rb/thrift_hive_metastore.rb
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/gen/thrift/gen-rb/thrift_hive_metastore.rb?rev=1148878&r1=1148877&r2=1148878&view=diff
==============================================================================
--- hive/trunk/metastore/src/gen/thrift/gen-rb/thrift_hive_metastore.rb (original)
+++ hive/trunk/metastore/src/gen/thrift/gen-rb/thrift_hive_metastore.rb Wed Jul 20 18:25:45 2011
@@ -350,6 +350,24 @@ module ThriftHiveMetastore
raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'add_partition failed: unknown result')
end
+ def add_partitions(new_parts)
+ send_add_partitions(new_parts)
+ return recv_add_partitions()
+ end
+
+ def send_add_partitions(new_parts)
+ send_message('add_partitions', Add_partitions_args, :new_parts => new_parts)
+ end
+
+ def recv_add_partitions()
+ result = receive_message(Add_partitions_result)
+ return result.success unless result.success.nil?
+ raise result.o1 unless result.o1.nil?
+ raise result.o2 unless result.o2.nil?
+ raise result.o3 unless result.o3.nil?
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'add_partitions failed: unknown result')
+ end
+
def append_partition(db_name, tbl_name, part_vals)
send_append_partition(db_name, tbl_name, part_vals)
return recv_append_partition()
@@ -1290,6 +1308,21 @@ module ThriftHiveMetastore
write_result(result, oprot, 'add_partition', seqid)
end
+ def process_add_partitions(seqid, iprot, oprot)
+ args = read_args(iprot, Add_partitions_args)
+ result = Add_partitions_result.new()
+ begin
+ result.success = @handler.add_partitions(args.new_parts)
+ rescue InvalidObjectException => o1
+ result.o1 = o1
+ rescue AlreadyExistsException => o2
+ result.o2 = o2
+ rescue MetaException => o3
+ result.o3 = o3
+ end
+ write_result(result, oprot, 'add_partitions', seqid)
+ end
+
def process_append_partition(seqid, iprot, oprot)
args = read_args(iprot, Append_partition_args)
result = Append_partition_result.new()
@@ -2535,6 +2568,44 @@ module ThriftHiveMetastore
::Thrift::Struct.generate_accessors self
end
+ class Add_partitions_args
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ NEW_PARTS = 1
+
+ FIELDS = {
+ NEW_PARTS => {:type => ::Thrift::Types::LIST, :name => 'new_parts', :element => {:type => ::Thrift::Types::STRUCT, :class => Partition}}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
+ class Add_partitions_result
+ include ::Thrift::Struct, ::Thrift::Struct_Union
+ SUCCESS = 0
+ O1 = 1
+ O2 = 2
+ O3 = 3
+
+ FIELDS = {
+ SUCCESS => {:type => ::Thrift::Types::I32, :name => 'success'},
+ O1 => {:type => ::Thrift::Types::STRUCT, :name => 'o1', :class => InvalidObjectException},
+ O2 => {:type => ::Thrift::Types::STRUCT, :name => 'o2', :class => AlreadyExistsException},
+ O3 => {:type => ::Thrift::Types::STRUCT, :name => 'o3', :class => MetaException}
+ }
+
+ def struct_fields; FIELDS; end
+
+ def validate
+ end
+
+ ::Thrift::Struct.generate_accessors self
+ end
+
class Append_partition_args
include ::Thrift::Struct, ::Thrift::Struct_Union
DB_NAME = 1
Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java?rev=1148878&r1=1148877&r2=1148878&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java Wed Jul 20 18:25:45 2011
@@ -31,6 +31,7 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Timer;
import java.util.regex.Pattern;
@@ -1344,16 +1345,24 @@ public class HiveMetaStore extends Thrif
logInfo("add_partitions : db=" + db + " tbl=" + tbl);
boolean success = false;
+ Map<Partition,Boolean> addedPartitions = new HashMap<Partition,Boolean>();
try {
ms.openTransaction();
for (Partition part : parts) {
- add_partition(part);
+ Entry<Partition, Boolean> e = add_partition_core_notxn(ms,part);
+ addedPartitions.put(e.getKey(),e.getValue());
}
success = true;
ms.commitTransaction();
} finally {
if (!success) {
ms.rollbackTransaction();
+ for (Entry<Partition,Boolean> e : addedPartitions.entrySet()){
+ if (e.getValue()){
+ wh.deleteDir(new Path(e.getKey().getSd().getLocation()), true);
+ // we just created this directory - it's not a case of pre-creation, so we nuke
+ }
+ }
}
}
return parts.size();
@@ -1390,12 +1399,23 @@ public class HiveMetaStore extends Thrif
return ret;
}
- private Partition add_partition_core(final RawStore ms, final Partition part)
- throws InvalidObjectException, AlreadyExistsException, MetaException {
+ /**
+ * An implementation of add_partition_core that does not commit
+ * transaction or rollback transaction as part of its operation
+ * - it is assumed that will be tended to from outside this call
+ * @param ms
+ * @param part
+ * @return
+ * @throws InvalidObjectException
+ * @throws AlreadyExistsException
+ * @throws MetaException
+ */
+ private Entry<Partition,Boolean> add_partition_core_notxn(
+ final RawStore ms, final Partition part)
+ throws InvalidObjectException, AlreadyExistsException, MetaException {
boolean success = false, madeDir = false;
Path partLocation = null;
try {
- ms.openTransaction();
Partition old_part = null;
try {
old_part = ms.getPartition(part.getDbName(), part
@@ -1456,20 +1476,39 @@ public class HiveMetaStore extends Thrif
part.getParameters().get(Constants.DDL_TIME) == null) {
part.putToParameters(Constants.DDL_TIME, Long.toString(time));
}
- success = ms.addPartition(part) && ms.commitTransaction();
+ success = ms.addPartition(part);
} finally {
if (!success) {
- ms.rollbackTransaction();
if (madeDir) {
wh.deleteDir(partLocation, true);
}
}
for(MetaStoreEventListener listener : listeners){
listener.onAddPartition(new AddPartitionEvent(part, success, this));
+ }
}
+ Map<Partition,Boolean> returnVal = new HashMap<Partition,Boolean>();
+ returnVal.put(part, madeDir);
+ return returnVal.entrySet().iterator().next();
+ }
+
+ private Partition add_partition_core(final RawStore ms, final Partition part)
+ throws InvalidObjectException, AlreadyExistsException, MetaException {
+ boolean success = false;
+ Partition retPtn = null;
+ try{
+ ms.openTransaction();
+ retPtn = add_partition_core_notxn(ms,part).getKey();
+ // we proceed only if we'd actually succeeded anyway, otherwise,
+ // we'd have thrown an exception
+ success = ms.commitTransaction();
+ }finally{
+ if (!success){
+ ms.rollbackTransaction();
+ }
}
- return part;
+ return retPtn;
}
public Partition add_partition(final Partition part)
Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java?rev=1148878&r1=1148877&r2=1148878&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java Wed Jul 20 18:25:45 2011
@@ -292,6 +292,20 @@ public class HiveMetaStoreClient impleme
}
/**
+ * @param new_parts
+ * @throws InvalidObjectException
+ * @throws AlreadyExistsException
+ * @throws MetaException
+ * @throws TException
+ * @see org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore.Iface#add_partitions(List<org.apache.hadoop.hive.metastore.api.Partition>)
+ */
+ public int add_partitions(List<Partition> new_parts)
+ throws InvalidObjectException, AlreadyExistsException, MetaException,
+ TException {
+ return client.add_partitions(new_parts);
+ }
+
+ /**
* @param table_name
* @param db_name
* @param part_vals
Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java?rev=1148878&r1=1148877&r2=1148878&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java Wed Jul 20 18:25:45 2011
@@ -249,6 +249,7 @@ public interface IMetaStoreClient {
public Partition appendPartition(String tableName, String dbName, String name)
throws InvalidObjectException, AlreadyExistsException, MetaException, TException;
+
/**
* Add a partition to the table.
*
@@ -269,6 +270,24 @@ public interface IMetaStoreClient {
TException;
/**
+ * Add partitions to the table.
+ *
+ * @param partitions
+ * The partitions to add
+ * @throws InvalidObjectException
+ * Could not find table to add to
+ * @throws AlreadyExistsException
+ * Partition already exists
+ * @throws MetaException
+ * Could not add partition
+ * @throws TException
+ * Thrift exception
+ */
+ public int add_partitions(List<Partition> partitions)
+ throws InvalidObjectException, AlreadyExistsException, MetaException,
+ TException;
+
+ /**
* @param tblName
* @param dbName
* @param partVals
Modified: hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java?rev=1148878&r1=1148877&r2=1148878&view=diff
==============================================================================
--- hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java (original)
+++ hive/trunk/metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java Wed Jul 20 18:25:45 2011
@@ -19,6 +19,7 @@
package org.apache.hadoop.hive.metastore;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
@@ -116,20 +117,10 @@ public abstract class TestHiveMetaStore
String dbName = "compdb";
String tblName = "comptbl";
String typeName = "Person";
- List<String> vals = new ArrayList<String>(2);
- vals.add("2008-07-01 14:13:12");
- vals.add("14");
- List <String> vals2 = new ArrayList<String>(2);
- vals2.add("2008-07-01 14:13:12");
- vals2.add("15");
- List <String> vals3 = new ArrayList<String>(2);
- vals3 = new ArrayList<String>(2);
- vals3.add("2008-07-02 14:13:12");
- vals3.add("15");
- List <String> vals4 = new ArrayList<String>(2);
- vals4 = new ArrayList<String>(2);
- vals4.add("2008-07-03 14:13:12");
- vals4.add("151");
+ List<String> vals = makeVals("2008-07-01 14:13:12", "14");
+ List<String> vals2 = makeVals("2008-07-01 14:13:12", "15");
+ List<String> vals3 = makeVals("2008-07-02 14:13:12", "15");
+ List<String> vals4 = makeVals("2008-07-03 14:13:12", "151");
client.dropTable(dbName, tblName);
silentDropDatabase(dbName);
@@ -182,43 +173,12 @@ public abstract class TestHiveMetaStore
tbl = client.getTable(dbName, tblName);
}
- Partition part = new Partition();
- part.setDbName(dbName);
- part.setTableName(tblName);
- part.setValues(vals);
- part.setParameters(new HashMap<String, String>());
- part.setSd(tbl.getSd());
- part.getSd().setSerdeInfo(tbl.getSd().getSerdeInfo());
- part.getSd().setLocation(tbl.getSd().getLocation() + "/part1");
-
- Partition part2 = new Partition();
- part2.setDbName(dbName);
- part2.setTableName(tblName);
- part2.setValues(vals2);
- part2.setParameters(new HashMap<String, String>());
- part2.setSd(tbl.getSd());
- part2.getSd().setSerdeInfo(tbl.getSd().getSerdeInfo());
- part2.getSd().setLocation(tbl.getSd().getLocation() + "/part2");
-
- Partition part3 = new Partition();
- part3.setDbName(dbName);
- part3.setTableName(tblName);
- part3.setValues(vals3);
- part3.setParameters(new HashMap<String, String>());
- part3.setSd(tbl.getSd());
- part3.getSd().setSerdeInfo(tbl.getSd().getSerdeInfo());
- part3.getSd().setLocation(tbl.getSd().getLocation() + "/part3");
-
- Partition part4 = new Partition();
- part4.setDbName(dbName);
- part4.setTableName(tblName);
- part4.setValues(vals4);
- part4.setParameters(new HashMap<String, String>());
- part4.setSd(tbl.getSd());
- part4.getSd().setSerdeInfo(tbl.getSd().getSerdeInfo());
- part4.getSd().setLocation(tbl.getSd().getLocation() + "/part4");
+ Partition part = makePartitionObject(dbName, tblName, vals, tbl, "/part1");
+ Partition part2 = makePartitionObject(dbName, tblName, vals2, tbl, "/part2");
+ Partition part3 = makePartitionObject(dbName, tblName, vals3, tbl, "/part3");
+ Partition part4 = makePartitionObject(dbName, tblName, vals4, tbl, "/part4");
- // check if the partition exists (it shouldn;t)
+ // check if the partition exists (it shouldn't)
boolean exceptionThrown = false;
try {
Partition p = client.getPartition(dbName, tblName, vals);
@@ -237,6 +197,8 @@ public abstract class TestHiveMetaStore
Partition retp4 = client.add_partition(part4);
assertNotNull("Unable to create partition " + part4, retp4);
+
+
Partition part_get = client.getPartition(dbName, tblName, part.getValues());
if(isThriftClient) {
// since we are using thrift, 'part' will not have the create time and
@@ -316,7 +278,7 @@ public abstract class TestHiveMetaStore
}
assertTrue("Bad partition spec should have thrown an exception", exceptionThrown);
- Path partPath = new Path(part2.getSd().getLocation());
+ Path partPath = new Path(part.getSd().getLocation());
FileSystem fs = FileSystem.get(partPath.toUri(), hiveConf);
@@ -341,6 +303,71 @@ public abstract class TestHiveMetaStore
retp = client.add_partition(part);
assertNotNull("Unable to create partition " + part, retp);
+ // test add_partitions
+
+ List<String> mvals1 = makeVals("2008-07-04 14:13:12", "14641");
+ List<String> mvals2 = makeVals("2008-07-04 14:13:12", "14642");
+ List<String> mvals3 = makeVals("2008-07-04 14:13:12", "14643");
+ List<String> mvals4 = makeVals("2008-07-04 14:13:12", "14643"); // equal to 3
+ List<String> mvals5 = makeVals("2008-07-04 14:13:12", "14645");
+
+ Exception savedException;
+
+ // add_partitions(empty list) : ok, normal operation
+ client.add_partitions(new ArrayList<Partition>());
+
+ // add_partitions(1,2,3) : ok, normal operation
+ Partition mpart1 = makePartitionObject(dbName, tblName, mvals1, tbl, "/mpart1");
+ Partition mpart2 = makePartitionObject(dbName, tblName, mvals2, tbl, "/mpart2");
+ Partition mpart3 = makePartitionObject(dbName, tblName, mvals3, tbl, "/mpart3");
+ client.add_partitions(Arrays.asList(mpart1,mpart2,mpart3));
+
+ if(isThriftClient) {
+ // do DDL time munging if thrift mode
+ adjust(client, mpart1, dbName, tblName);
+ adjust(client, mpart2, dbName, tblName);
+ adjust(client, mpart3, dbName, tblName);
+ }
+ verifyPartitionsPublished(client, dbName, tblName,
+ Arrays.asList(mvals1.get(0)),
+ Arrays.asList(mpart1,mpart2,mpart3));
+
+ Partition mpart4 = makePartitionObject(dbName, tblName, mvals4, tbl, "/mpart4");
+ Partition mpart5 = makePartitionObject(dbName, tblName, mvals5, tbl, "/mpart5");
+
+ // create dir for /mpart5
+ Path mp5Path = new Path(mpart5.getSd().getLocation());
+ warehouse.mkdirs(mp5Path);
+ assertTrue(fs.exists(mp5Path));
+
+ // add_partitions(5,4) : err = duplicate keyvals on mpart4
+ savedException = null;
+ try {
+ client.add_partitions(Arrays.asList(mpart5,mpart4));
+ } catch (Exception e) {
+ savedException = e;
+ } finally {
+ assertNotNull(savedException);
+ }
+
+ // check that /mpart4 does not exist, but /mpart5 still does.
+ assertTrue(fs.exists(mp5Path));
+ assertFalse(fs.exists(new Path(mpart4.getSd().getLocation())));
+
+ // add_partitions(5) : ok
+ client.add_partitions(Arrays.asList(mpart5));
+
+ if(isThriftClient) {
+ // do DDL time munging if thrift mode
+ adjust(client, mpart5, dbName, tblName);
+ }
+
+ verifyPartitionsPublished(client, dbName, tblName,
+ Arrays.asList(mvals1.get(0)),
+ Arrays.asList(mpart1,mpart2,mpart3,mpart5));
+
+ //// end add_partitions tests
+
client.dropTable(dbName, tblName);
client.dropType(typeName);
@@ -368,6 +395,41 @@ public abstract class TestHiveMetaStore
}
}
+ private static void verifyPartitionsPublished(HiveMetaStoreClient client,
+ String dbName, String tblName, List<String> partialSpec,
+ List<Partition> expectedPartitions)
+ throws NoSuchObjectException, MetaException, TException {
+ // Test partition listing with a partial spec
+
+ List<Partition> mpartial = client.listPartitions(dbName, tblName, partialSpec,
+ (short) -1);
+ assertEquals("Should have returned "+expectedPartitions.size()+
+ " partitions, returned " + mpartial.size(),
+ expectedPartitions.size(), mpartial.size());
+ assertTrue("Not all parts returned", mpartial.containsAll(expectedPartitions));
+ }
+
+ private static List<String> makeVals(String ds, String id) {
+ List <String> vals4 = new ArrayList<String>(2);
+ vals4 = new ArrayList<String>(2);
+ vals4.add(ds);
+ vals4.add(id);
+ return vals4;
+ }
+
+ private static Partition makePartitionObject(String dbName, String tblName,
+ List<String> ptnVals, Table tbl, String ptnLocationSuffix) {
+ Partition part4 = new Partition();
+ part4.setDbName(dbName);
+ part4.setTableName(tblName);
+ part4.setValues(ptnVals);
+ part4.setParameters(new HashMap<String, String>());
+ part4.setSd(tbl.getSd().deepCopy());
+ part4.getSd().setSerdeInfo(tbl.getSd().getSerdeInfo().deepCopy());
+ part4.getSd().setLocation(tbl.getSd().getLocation() + ptnLocationSuffix);
+ return part4;
+ }
+
public void testAlterPartition() throws Throwable {
try {