Repository: hive Updated Branches: refs/heads/master 0ffff4040 -> 6af512457
http://git-wip-us.apache.org/repos/asf/hive/blob/6af51245/metastore/src/gen/thrift/gen-php/metastore/Types.php ---------------------------------------------------------------------- diff --git a/metastore/src/gen/thrift/gen-php/metastore/Types.php b/metastore/src/gen/thrift/gen-php/metastore/Types.php index 4a3bf85..74f0028 100644 --- a/metastore/src/gen/thrift/gen-php/metastore/Types.php +++ b/metastore/src/gen/thrift/gen-php/metastore/Types.php @@ -12082,6 +12082,10 @@ class GetOpenTxnsResponse { * @var int */ public $min_open_txn = null; + /** + * @var string + */ + public $abortedBits = null; public function __construct($vals=null) { if (!isset(self::$_TSPEC)) { @@ -12092,7 +12096,7 @@ class GetOpenTxnsResponse { ), 2 => array( 'var' => 'open_txns', - 'type' => TType::SET, + 'type' => TType::LST, 'etype' => TType::I64, 'elem' => array( 'type' => TType::I64, @@ -12102,6 +12106,10 @@ class GetOpenTxnsResponse { 'var' => 'min_open_txn', 'type' => TType::I64, ), + 4 => array( + 'var' => 'abortedBits', + 'type' => TType::STRING, + ), ); } if (is_array($vals)) { @@ -12114,6 +12122,9 @@ class GetOpenTxnsResponse { if (isset($vals['min_open_txn'])) { $this->min_open_txn = $vals['min_open_txn']; } + if (isset($vals['abortedBits'])) { + $this->abortedBits = $vals['abortedBits']; + } } } @@ -12144,22 +12155,18 @@ class GetOpenTxnsResponse { } break; case 2: - if ($ftype == TType::SET) { + if ($ftype == TType::LST) { $this->open_txns = array(); $_size413 = 0; $_etype416 = 0; - $xfer += $input->readSetBegin($_etype416, $_size413); + $xfer += $input->readListBegin($_etype416, $_size413); for ($_i417 = 0; $_i417 < $_size413; ++$_i417) { $elem418 = null; $xfer += $input->readI64($elem418); - if (is_scalar($elem418)) { - $this->open_txns[$elem418] = true; - } else { - $this->open_txns []= $elem418; - } + $this->open_txns []= $elem418; } - $xfer += $input->readSetEnd(); + $xfer += $input->readListEnd(); } else { $xfer += $input->skip($ftype); } @@ -12171,6 +12178,13 @@ class GetOpenTxnsResponse { $xfer += $input->skip($ftype); } break; + case 4: + if ($ftype == TType::STRING) { + $xfer += $input->readString($this->abortedBits); + } else { + $xfer += $input->skip($ftype); + } + break; default: $xfer += $input->skip($ftype); break; @@ -12193,20 +12207,16 @@ class GetOpenTxnsResponse { if (!is_array($this->open_txns)) { throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA); } - $xfer += $output->writeFieldBegin('open_txns', TType::SET, 2); + $xfer += $output->writeFieldBegin('open_txns', TType::LST, 2); { - $output->writeSetBegin(TType::I64, count($this->open_txns)); + $output->writeListBegin(TType::I64, count($this->open_txns)); { - foreach ($this->open_txns as $iter419 => $iter420) + foreach ($this->open_txns as $iter419) { - if (is_scalar($iter420)) { $xfer += $output->writeI64($iter419); - } else { - $xfer += $output->writeI64($iter420); - } } } - $output->writeSetEnd(); + $output->writeListEnd(); } $xfer += $output->writeFieldEnd(); } @@ -12215,6 +12225,11 @@ class GetOpenTxnsResponse { $xfer += $output->writeI64($this->min_open_txn); $xfer += $output->writeFieldEnd(); } + if ($this->abortedBits !== null) { + $xfer += $output->writeFieldBegin('abortedBits', TType::STRING, 4); + $xfer += $output->writeString($this->abortedBits); + $xfer += $output->writeFieldEnd(); + } $xfer += $output->writeFieldStop(); $xfer += $output->writeStructEnd(); return $xfer; @@ -12416,14 +12431,14 @@ class OpenTxnsResponse { case 1: if ($ftype == TType::LST) { $this->txn_ids = array(); - $_size421 = 0; - $_etype424 = 0; - $xfer += $input->readListBegin($_etype424, $_size421); - for ($_i425 = 0; $_i425 < $_size421; ++$_i425) + $_size420 = 0; + $_etype423 = 0; + $xfer += $input->readListBegin($_etype423, $_size420); + for ($_i424 = 0; $_i424 < $_size420; ++$_i424) { - $elem426 = null; - $xfer += $input->readI64($elem426); - $this->txn_ids []= $elem426; + $elem425 = null; + $xfer += $input->readI64($elem425); + $this->txn_ids []= $elem425; } $xfer += $input->readListEnd(); } else { @@ -12451,9 +12466,9 @@ class OpenTxnsResponse { { $output->writeListBegin(TType::I64, count($this->txn_ids)); { - foreach ($this->txn_ids as $iter427) + foreach ($this->txn_ids as $iter426) { - $xfer += $output->writeI64($iter427); + $xfer += $output->writeI64($iter426); } } $output->writeListEnd(); @@ -12592,14 +12607,14 @@ class AbortTxnsRequest { case 1: if ($ftype == TType::LST) { $this->txn_ids = array(); - $_size428 = 0; - $_etype431 = 0; - $xfer += $input->readListBegin($_etype431, $_size428); - for ($_i432 = 0; $_i432 < $_size428; ++$_i432) + $_size427 = 0; + $_etype430 = 0; + $xfer += $input->readListBegin($_etype430, $_size427); + for ($_i431 = 0; $_i431 < $_size427; ++$_i431) { - $elem433 = null; - $xfer += $input->readI64($elem433); - $this->txn_ids []= $elem433; + $elem432 = null; + $xfer += $input->readI64($elem432); + $this->txn_ids []= $elem432; } $xfer += $input->readListEnd(); } else { @@ -12627,9 +12642,9 @@ class AbortTxnsRequest { { $output->writeListBegin(TType::I64, count($this->txn_ids)); { - foreach ($this->txn_ids as $iter434) + foreach ($this->txn_ids as $iter433) { - $xfer += $output->writeI64($iter434); + $xfer += $output->writeI64($iter433); } } $output->writeListEnd(); @@ -13049,15 +13064,15 @@ class LockRequest { case 1: if ($ftype == TType::LST) { $this->component = array(); - $_size435 = 0; - $_etype438 = 0; - $xfer += $input->readListBegin($_etype438, $_size435); - for ($_i439 = 0; $_i439 < $_size435; ++$_i439) + $_size434 = 0; + $_etype437 = 0; + $xfer += $input->readListBegin($_etype437, $_size434); + for ($_i438 = 0; $_i438 < $_size434; ++$_i438) { - $elem440 = null; - $elem440 = new \metastore\LockComponent(); - $xfer += $elem440->read($input); - $this->component []= $elem440; + $elem439 = null; + $elem439 = new \metastore\LockComponent(); + $xfer += $elem439->read($input); + $this->component []= $elem439; } $xfer += $input->readListEnd(); } else { @@ -13113,9 +13128,9 @@ class LockRequest { { $output->writeListBegin(TType::STRUCT, count($this->component)); { - foreach ($this->component as $iter441) + foreach ($this->component as $iter440) { - $xfer += $iter441->write($output); + $xfer += $iter440->write($output); } } $output->writeListEnd(); @@ -14058,15 +14073,15 @@ class ShowLocksResponse { case 1: if ($ftype == TType::LST) { $this->locks = array(); - $_size442 = 0; - $_etype445 = 0; - $xfer += $input->readListBegin($_etype445, $_size442); - for ($_i446 = 0; $_i446 < $_size442; ++$_i446) + $_size441 = 0; + $_etype444 = 0; + $xfer += $input->readListBegin($_etype444, $_size441); + for ($_i445 = 0; $_i445 < $_size441; ++$_i445) { - $elem447 = null; - $elem447 = new \metastore\ShowLocksResponseElement(); - $xfer += $elem447->read($input); - $this->locks []= $elem447; + $elem446 = null; + $elem446 = new \metastore\ShowLocksResponseElement(); + $xfer += $elem446->read($input); + $this->locks []= $elem446; } $xfer += $input->readListEnd(); } else { @@ -14094,9 +14109,9 @@ class ShowLocksResponse { { $output->writeListBegin(TType::STRUCT, count($this->locks)); { - foreach ($this->locks as $iter448) + foreach ($this->locks as $iter447) { - $xfer += $iter448->write($output); + $xfer += $iter447->write($output); } } $output->writeListEnd(); @@ -14371,17 +14386,17 @@ class HeartbeatTxnRangeResponse { case 1: if ($ftype == TType::SET) { $this->aborted = array(); - $_size449 = 0; - $_etype452 = 0; - $xfer += $input->readSetBegin($_etype452, $_size449); - for ($_i453 = 0; $_i453 < $_size449; ++$_i453) + $_size448 = 0; + $_etype451 = 0; + $xfer += $input->readSetBegin($_etype451, $_size448); + for ($_i452 = 0; $_i452 < $_size448; ++$_i452) { - $elem454 = null; - $xfer += $input->readI64($elem454); - if (is_scalar($elem454)) { - $this->aborted[$elem454] = true; + $elem453 = null; + $xfer += $input->readI64($elem453); + if (is_scalar($elem453)) { + $this->aborted[$elem453] = true; } else { - $this->aborted []= $elem454; + $this->aborted []= $elem453; } } $xfer += $input->readSetEnd(); @@ -14392,17 +14407,17 @@ class HeartbeatTxnRangeResponse { case 2: if ($ftype == TType::SET) { $this->nosuch = array(); - $_size455 = 0; - $_etype458 = 0; - $xfer += $input->readSetBegin($_etype458, $_size455); - for ($_i459 = 0; $_i459 < $_size455; ++$_i459) + $_size454 = 0; + $_etype457 = 0; + $xfer += $input->readSetBegin($_etype457, $_size454); + for ($_i458 = 0; $_i458 < $_size454; ++$_i458) { - $elem460 = null; - $xfer += $input->readI64($elem460); - if (is_scalar($elem460)) { - $this->nosuch[$elem460] = true; + $elem459 = null; + $xfer += $input->readI64($elem459); + if (is_scalar($elem459)) { + $this->nosuch[$elem459] = true; } else { - $this->nosuch []= $elem460; + $this->nosuch []= $elem459; } } $xfer += $input->readSetEnd(); @@ -14431,12 +14446,12 @@ class HeartbeatTxnRangeResponse { { $output->writeSetBegin(TType::I64, count($this->aborted)); { - foreach ($this->aborted as $iter461 => $iter462) + foreach ($this->aborted as $iter460 => $iter461) { - if (is_scalar($iter462)) { - $xfer += $output->writeI64($iter461); + if (is_scalar($iter461)) { + $xfer += $output->writeI64($iter460); } else { - $xfer += $output->writeI64($iter462); + $xfer += $output->writeI64($iter461); } } } @@ -14452,12 +14467,12 @@ class HeartbeatTxnRangeResponse { { $output->writeSetBegin(TType::I64, count($this->nosuch)); { - foreach ($this->nosuch as $iter463 => $iter464) + foreach ($this->nosuch as $iter462 => $iter463) { - if (is_scalar($iter464)) { - $xfer += $output->writeI64($iter463); + if (is_scalar($iter463)) { + $xfer += $output->writeI64($iter462); } else { - $xfer += $output->writeI64($iter464); + $xfer += $output->writeI64($iter463); } } } @@ -14616,17 +14631,17 @@ class CompactionRequest { case 6: if ($ftype == TType::MAP) { $this->properties = array(); - $_size465 = 0; - $_ktype466 = 0; - $_vtype467 = 0; - $xfer += $input->readMapBegin($_ktype466, $_vtype467, $_size465); - for ($_i469 = 0; $_i469 < $_size465; ++$_i469) + $_size464 = 0; + $_ktype465 = 0; + $_vtype466 = 0; + $xfer += $input->readMapBegin($_ktype465, $_vtype466, $_size464); + for ($_i468 = 0; $_i468 < $_size464; ++$_i468) { - $key470 = ''; - $val471 = ''; - $xfer += $input->readString($key470); - $xfer += $input->readString($val471); - $this->properties[$key470] = $val471; + $key469 = ''; + $val470 = ''; + $xfer += $input->readString($key469); + $xfer += $input->readString($val470); + $this->properties[$key469] = $val470; } $xfer += $input->readMapEnd(); } else { @@ -14679,10 +14694,10 @@ class CompactionRequest { { $output->writeMapBegin(TType::STRING, TType::STRING, count($this->properties)); { - foreach ($this->properties as $kiter472 => $viter473) + foreach ($this->properties as $kiter471 => $viter472) { - $xfer += $output->writeString($kiter472); - $xfer += $output->writeString($viter473); + $xfer += $output->writeString($kiter471); + $xfer += $output->writeString($viter472); } } $output->writeMapEnd(); @@ -15269,15 +15284,15 @@ class ShowCompactResponse { case 1: if ($ftype == TType::LST) { $this->compacts = array(); - $_size474 = 0; - $_etype477 = 0; - $xfer += $input->readListBegin($_etype477, $_size474); - for ($_i478 = 0; $_i478 < $_size474; ++$_i478) + $_size473 = 0; + $_etype476 = 0; + $xfer += $input->readListBegin($_etype476, $_size473); + for ($_i477 = 0; $_i477 < $_size473; ++$_i477) { - $elem479 = null; - $elem479 = new \metastore\ShowCompactResponseElement(); - $xfer += $elem479->read($input); - $this->compacts []= $elem479; + $elem478 = null; + $elem478 = new \metastore\ShowCompactResponseElement(); + $xfer += $elem478->read($input); + $this->compacts []= $elem478; } $xfer += $input->readListEnd(); } else { @@ -15305,9 +15320,9 @@ class ShowCompactResponse { { $output->writeListBegin(TType::STRUCT, count($this->compacts)); { - foreach ($this->compacts as $iter480) + foreach ($this->compacts as $iter479) { - $xfer += $iter480->write($output); + $xfer += $iter479->write($output); } } $output->writeListEnd(); @@ -15436,14 +15451,14 @@ class AddDynamicPartitions { case 4: if ($ftype == TType::LST) { $this->partitionnames = array(); - $_size481 = 0; - $_etype484 = 0; - $xfer += $input->readListBegin($_etype484, $_size481); - for ($_i485 = 0; $_i485 < $_size481; ++$_i485) + $_size480 = 0; + $_etype483 = 0; + $xfer += $input->readListBegin($_etype483, $_size480); + for ($_i484 = 0; $_i484 < $_size480; ++$_i484) { - $elem486 = null; - $xfer += $input->readString($elem486); - $this->partitionnames []= $elem486; + $elem485 = null; + $xfer += $input->readString($elem485); + $this->partitionnames []= $elem485; } $xfer += $input->readListEnd(); } else { @@ -15493,9 +15508,9 @@ class AddDynamicPartitions { { $output->writeListBegin(TType::STRING, count($this->partitionnames)); { - foreach ($this->partitionnames as $iter487) + foreach ($this->partitionnames as $iter486) { - $xfer += $output->writeString($iter487); + $xfer += $output->writeString($iter486); } } $output->writeListEnd(); @@ -15876,15 +15891,15 @@ class NotificationEventResponse { case 1: if ($ftype == TType::LST) { $this->events = array(); - $_size488 = 0; - $_etype491 = 0; - $xfer += $input->readListBegin($_etype491, $_size488); - for ($_i492 = 0; $_i492 < $_size488; ++$_i492) + $_size487 = 0; + $_etype490 = 0; + $xfer += $input->readListBegin($_etype490, $_size487); + for ($_i491 = 0; $_i491 < $_size487; ++$_i491) { - $elem493 = null; - $elem493 = new \metastore\NotificationEvent(); - $xfer += $elem493->read($input); - $this->events []= $elem493; + $elem492 = null; + $elem492 = new \metastore\NotificationEvent(); + $xfer += $elem492->read($input); + $this->events []= $elem492; } $xfer += $input->readListEnd(); } else { @@ -15912,9 +15927,9 @@ class NotificationEventResponse { { $output->writeListBegin(TType::STRUCT, count($this->events)); { - foreach ($this->events as $iter494) + foreach ($this->events as $iter493) { - $xfer += $iter494->write($output); + $xfer += $iter493->write($output); } } $output->writeListEnd(); @@ -16086,14 +16101,14 @@ class InsertEventRequestData { case 2: if ($ftype == TType::LST) { $this->filesAdded = array(); - $_size495 = 0; - $_etype498 = 0; - $xfer += $input->readListBegin($_etype498, $_size495); - for ($_i499 = 0; $_i499 < $_size495; ++$_i499) + $_size494 = 0; + $_etype497 = 0; + $xfer += $input->readListBegin($_etype497, $_size494); + for ($_i498 = 0; $_i498 < $_size494; ++$_i498) { - $elem500 = null; - $xfer += $input->readString($elem500); - $this->filesAdded []= $elem500; + $elem499 = null; + $xfer += $input->readString($elem499); + $this->filesAdded []= $elem499; } $xfer += $input->readListEnd(); } else { @@ -16103,14 +16118,14 @@ class InsertEventRequestData { case 3: if ($ftype == TType::LST) { $this->filesAddedChecksum = array(); - $_size501 = 0; - $_etype504 = 0; - $xfer += $input->readListBegin($_etype504, $_size501); - for ($_i505 = 0; $_i505 < $_size501; ++$_i505) + $_size500 = 0; + $_etype503 = 0; + $xfer += $input->readListBegin($_etype503, $_size500); + for ($_i504 = 0; $_i504 < $_size500; ++$_i504) { - $elem506 = null; - $xfer += $input->readString($elem506); - $this->filesAddedChecksum []= $elem506; + $elem505 = null; + $xfer += $input->readString($elem505); + $this->filesAddedChecksum []= $elem505; } $xfer += $input->readListEnd(); } else { @@ -16143,9 +16158,9 @@ class InsertEventRequestData { { $output->writeListBegin(TType::STRING, count($this->filesAdded)); { - foreach ($this->filesAdded as $iter507) + foreach ($this->filesAdded as $iter506) { - $xfer += $output->writeString($iter507); + $xfer += $output->writeString($iter506); } } $output->writeListEnd(); @@ -16160,9 +16175,9 @@ class InsertEventRequestData { { $output->writeListBegin(TType::STRING, count($this->filesAddedChecksum)); { - foreach ($this->filesAddedChecksum as $iter508) + foreach ($this->filesAddedChecksum as $iter507) { - $xfer += $output->writeString($iter508); + $xfer += $output->writeString($iter507); } } $output->writeListEnd(); @@ -16380,14 +16395,14 @@ class FireEventRequest { case 5: if ($ftype == TType::LST) { $this->partitionVals = array(); - $_size509 = 0; - $_etype512 = 0; - $xfer += $input->readListBegin($_etype512, $_size509); - for ($_i513 = 0; $_i513 < $_size509; ++$_i513) + $_size508 = 0; + $_etype511 = 0; + $xfer += $input->readListBegin($_etype511, $_size508); + for ($_i512 = 0; $_i512 < $_size508; ++$_i512) { - $elem514 = null; - $xfer += $input->readString($elem514); - $this->partitionVals []= $elem514; + $elem513 = null; + $xfer += $input->readString($elem513); + $this->partitionVals []= $elem513; } $xfer += $input->readListEnd(); } else { @@ -16438,9 +16453,9 @@ class FireEventRequest { { $output->writeListBegin(TType::STRING, count($this->partitionVals)); { - foreach ($this->partitionVals as $iter515) + foreach ($this->partitionVals as $iter514) { - $xfer += $output->writeString($iter515); + $xfer += $output->writeString($iter514); } } $output->writeListEnd(); @@ -16668,18 +16683,18 @@ class GetFileMetadataByExprResult { case 1: if ($ftype == TType::MAP) { $this->metadata = array(); - $_size516 = 0; - $_ktype517 = 0; - $_vtype518 = 0; - $xfer += $input->readMapBegin($_ktype517, $_vtype518, $_size516); - for ($_i520 = 0; $_i520 < $_size516; ++$_i520) + $_size515 = 0; + $_ktype516 = 0; + $_vtype517 = 0; + $xfer += $input->readMapBegin($_ktype516, $_vtype517, $_size515); + for ($_i519 = 0; $_i519 < $_size515; ++$_i519) { - $key521 = 0; - $val522 = new \metastore\MetadataPpdResult(); - $xfer += $input->readI64($key521); - $val522 = new \metastore\MetadataPpdResult(); - $xfer += $val522->read($input); - $this->metadata[$key521] = $val522; + $key520 = 0; + $val521 = new \metastore\MetadataPpdResult(); + $xfer += $input->readI64($key520); + $val521 = new \metastore\MetadataPpdResult(); + $xfer += $val521->read($input); + $this->metadata[$key520] = $val521; } $xfer += $input->readMapEnd(); } else { @@ -16714,10 +16729,10 @@ class GetFileMetadataByExprResult { { $output->writeMapBegin(TType::I64, TType::STRUCT, count($this->metadata)); { - foreach ($this->metadata as $kiter523 => $viter524) + foreach ($this->metadata as $kiter522 => $viter523) { - $xfer += $output->writeI64($kiter523); - $xfer += $viter524->write($output); + $xfer += $output->writeI64($kiter522); + $xfer += $viter523->write($output); } } $output->writeMapEnd(); @@ -16819,14 +16834,14 @@ class GetFileMetadataByExprRequest { case 1: if ($ftype == TType::LST) { $this->fileIds = array(); - $_size525 = 0; - $_etype528 = 0; - $xfer += $input->readListBegin($_etype528, $_size525); - for ($_i529 = 0; $_i529 < $_size525; ++$_i529) + $_size524 = 0; + $_etype527 = 0; + $xfer += $input->readListBegin($_etype527, $_size524); + for ($_i528 = 0; $_i528 < $_size524; ++$_i528) { - $elem530 = null; - $xfer += $input->readI64($elem530); - $this->fileIds []= $elem530; + $elem529 = null; + $xfer += $input->readI64($elem529); + $this->fileIds []= $elem529; } $xfer += $input->readListEnd(); } else { @@ -16875,9 +16890,9 @@ class GetFileMetadataByExprRequest { { $output->writeListBegin(TType::I64, count($this->fileIds)); { - foreach ($this->fileIds as $iter531) + foreach ($this->fileIds as $iter530) { - $xfer += $output->writeI64($iter531); + $xfer += $output->writeI64($iter530); } } $output->writeListEnd(); @@ -16971,17 +16986,17 @@ class GetFileMetadataResult { case 1: if ($ftype == TType::MAP) { $this->metadata = array(); - $_size532 = 0; - $_ktype533 = 0; - $_vtype534 = 0; - $xfer += $input->readMapBegin($_ktype533, $_vtype534, $_size532); - for ($_i536 = 0; $_i536 < $_size532; ++$_i536) + $_size531 = 0; + $_ktype532 = 0; + $_vtype533 = 0; + $xfer += $input->readMapBegin($_ktype532, $_vtype533, $_size531); + for ($_i535 = 0; $_i535 < $_size531; ++$_i535) { - $key537 = 0; - $val538 = ''; - $xfer += $input->readI64($key537); - $xfer += $input->readString($val538); - $this->metadata[$key537] = $val538; + $key536 = 0; + $val537 = ''; + $xfer += $input->readI64($key536); + $xfer += $input->readString($val537); + $this->metadata[$key536] = $val537; } $xfer += $input->readMapEnd(); } else { @@ -17016,10 +17031,10 @@ class GetFileMetadataResult { { $output->writeMapBegin(TType::I64, TType::STRING, count($this->metadata)); { - foreach ($this->metadata as $kiter539 => $viter540) + foreach ($this->metadata as $kiter538 => $viter539) { - $xfer += $output->writeI64($kiter539); - $xfer += $output->writeString($viter540); + $xfer += $output->writeI64($kiter538); + $xfer += $output->writeString($viter539); } } $output->writeMapEnd(); @@ -17088,14 +17103,14 @@ class GetFileMetadataRequest { case 1: if ($ftype == TType::LST) { $this->fileIds = array(); - $_size541 = 0; - $_etype544 = 0; - $xfer += $input->readListBegin($_etype544, $_size541); - for ($_i545 = 0; $_i545 < $_size541; ++$_i545) + $_size540 = 0; + $_etype543 = 0; + $xfer += $input->readListBegin($_etype543, $_size540); + for ($_i544 = 0; $_i544 < $_size540; ++$_i544) { - $elem546 = null; - $xfer += $input->readI64($elem546); - $this->fileIds []= $elem546; + $elem545 = null; + $xfer += $input->readI64($elem545); + $this->fileIds []= $elem545; } $xfer += $input->readListEnd(); } else { @@ -17123,9 +17138,9 @@ class GetFileMetadataRequest { { $output->writeListBegin(TType::I64, count($this->fileIds)); { - foreach ($this->fileIds as $iter547) + foreach ($this->fileIds as $iter546) { - $xfer += $output->writeI64($iter547); + $xfer += $output->writeI64($iter546); } } $output->writeListEnd(); @@ -17265,14 +17280,14 @@ class PutFileMetadataRequest { case 1: if ($ftype == TType::LST) { $this->fileIds = array(); - $_size548 = 0; - $_etype551 = 0; - $xfer += $input->readListBegin($_etype551, $_size548); - for ($_i552 = 0; $_i552 < $_size548; ++$_i552) + $_size547 = 0; + $_etype550 = 0; + $xfer += $input->readListBegin($_etype550, $_size547); + for ($_i551 = 0; $_i551 < $_size547; ++$_i551) { - $elem553 = null; - $xfer += $input->readI64($elem553); - $this->fileIds []= $elem553; + $elem552 = null; + $xfer += $input->readI64($elem552); + $this->fileIds []= $elem552; } $xfer += $input->readListEnd(); } else { @@ -17282,14 +17297,14 @@ class PutFileMetadataRequest { case 2: if ($ftype == TType::LST) { $this->metadata = array(); - $_size554 = 0; - $_etype557 = 0; - $xfer += $input->readListBegin($_etype557, $_size554); - for ($_i558 = 0; $_i558 < $_size554; ++$_i558) + $_size553 = 0; + $_etype556 = 0; + $xfer += $input->readListBegin($_etype556, $_size553); + for ($_i557 = 0; $_i557 < $_size553; ++$_i557) { - $elem559 = null; - $xfer += $input->readString($elem559); - $this->metadata []= $elem559; + $elem558 = null; + $xfer += $input->readString($elem558); + $this->metadata []= $elem558; } $xfer += $input->readListEnd(); } else { @@ -17324,9 +17339,9 @@ class PutFileMetadataRequest { { $output->writeListBegin(TType::I64, count($this->fileIds)); { - foreach ($this->fileIds as $iter560) + foreach ($this->fileIds as $iter559) { - $xfer += $output->writeI64($iter560); + $xfer += $output->writeI64($iter559); } } $output->writeListEnd(); @@ -17341,9 +17356,9 @@ class PutFileMetadataRequest { { $output->writeListBegin(TType::STRING, count($this->metadata)); { - foreach ($this->metadata as $iter561) + foreach ($this->metadata as $iter560) { - $xfer += $output->writeString($iter561); + $xfer += $output->writeString($iter560); } } $output->writeListEnd(); @@ -17462,14 +17477,14 @@ class ClearFileMetadataRequest { case 1: if ($ftype == TType::LST) { $this->fileIds = array(); - $_size562 = 0; - $_etype565 = 0; - $xfer += $input->readListBegin($_etype565, $_size562); - for ($_i566 = 0; $_i566 < $_size562; ++$_i566) + $_size561 = 0; + $_etype564 = 0; + $xfer += $input->readListBegin($_etype564, $_size561); + for ($_i565 = 0; $_i565 < $_size561; ++$_i565) { - $elem567 = null; - $xfer += $input->readI64($elem567); - $this->fileIds []= $elem567; + $elem566 = null; + $xfer += $input->readI64($elem566); + $this->fileIds []= $elem566; } $xfer += $input->readListEnd(); } else { @@ -17497,9 +17512,9 @@ class ClearFileMetadataRequest { { $output->writeListBegin(TType::I64, count($this->fileIds)); { - foreach ($this->fileIds as $iter568) + foreach ($this->fileIds as $iter567) { - $xfer += $output->writeI64($iter568); + $xfer += $output->writeI64($iter567); } } $output->writeListEnd(); @@ -17783,15 +17798,15 @@ class GetAllFunctionsResponse { case 1: if ($ftype == TType::LST) { $this->functions = array(); - $_size569 = 0; - $_etype572 = 0; - $xfer += $input->readListBegin($_etype572, $_size569); - for ($_i573 = 0; $_i573 < $_size569; ++$_i573) + $_size568 = 0; + $_etype571 = 0; + $xfer += $input->readListBegin($_etype571, $_size568); + for ($_i572 = 0; $_i572 < $_size568; ++$_i572) { - $elem574 = null; - $elem574 = new \metastore\Function(); - $xfer += $elem574->read($input); - $this->functions []= $elem574; + $elem573 = null; + $elem573 = new \metastore\Function(); + $xfer += $elem573->read($input); + $this->functions []= $elem573; } $xfer += $input->readListEnd(); } else { @@ -17819,9 +17834,9 @@ class GetAllFunctionsResponse { { $output->writeListBegin(TType::STRUCT, count($this->functions)); { - foreach ($this->functions as $iter575) + foreach ($this->functions as $iter574) { - $xfer += $iter575->write($output); + $xfer += $iter574->write($output); } } $output->writeListEnd(); @@ -17885,14 +17900,14 @@ class ClientCapabilities { case 1: if ($ftype == TType::LST) { $this->values = array(); - $_size576 = 0; - $_etype579 = 0; - $xfer += $input->readListBegin($_etype579, $_size576); - for ($_i580 = 0; $_i580 < $_size576; ++$_i580) + $_size575 = 0; + $_etype578 = 0; + $xfer += $input->readListBegin($_etype578, $_size575); + for ($_i579 = 0; $_i579 < $_size575; ++$_i579) { - $elem581 = null; - $xfer += $input->readI32($elem581); - $this->values []= $elem581; + $elem580 = null; + $xfer += $input->readI32($elem580); + $this->values []= $elem580; } $xfer += $input->readListEnd(); } else { @@ -17920,9 +17935,9 @@ class ClientCapabilities { { $output->writeListBegin(TType::I32, count($this->values)); { - foreach ($this->values as $iter582) + foreach ($this->values as $iter581) { - $xfer += $output->writeI32($iter582); + $xfer += $output->writeI32($iter581); } } $output->writeListEnd(); @@ -18222,14 +18237,14 @@ class GetTablesRequest { case 2: if ($ftype == TType::LST) { $this->tblNames = array(); - $_size583 = 0; - $_etype586 = 0; - $xfer += $input->readListBegin($_etype586, $_size583); - for ($_i587 = 0; $_i587 < $_size583; ++$_i587) + $_size582 = 0; + $_etype585 = 0; + $xfer += $input->readListBegin($_etype585, $_size582); + for ($_i586 = 0; $_i586 < $_size582; ++$_i586) { - $elem588 = null; - $xfer += $input->readString($elem588); - $this->tblNames []= $elem588; + $elem587 = null; + $xfer += $input->readString($elem587); + $this->tblNames []= $elem587; } $xfer += $input->readListEnd(); } else { @@ -18270,9 +18285,9 @@ class GetTablesRequest { { $output->writeListBegin(TType::STRING, count($this->tblNames)); { - foreach ($this->tblNames as $iter589) + foreach ($this->tblNames as $iter588) { - $xfer += $output->writeString($iter589); + $xfer += $output->writeString($iter588); } } $output->writeListEnd(); @@ -18345,15 +18360,15 @@ class GetTablesResult { case 1: if ($ftype == TType::LST) { $this->tables = array(); - $_size590 = 0; - $_etype593 = 0; - $xfer += $input->readListBegin($_etype593, $_size590); - for ($_i594 = 0; $_i594 < $_size590; ++$_i594) + $_size589 = 0; + $_etype592 = 0; + $xfer += $input->readListBegin($_etype592, $_size589); + for ($_i593 = 0; $_i593 < $_size589; ++$_i593) { - $elem595 = null; - $elem595 = new \metastore\Table(); - $xfer += $elem595->read($input); - $this->tables []= $elem595; + $elem594 = null; + $elem594 = new \metastore\Table(); + $xfer += $elem594->read($input); + $this->tables []= $elem594; } $xfer += $input->readListEnd(); } else { @@ -18381,9 +18396,9 @@ class GetTablesResult { { $output->writeListBegin(TType::STRUCT, count($this->tables)); { - foreach ($this->tables as $iter596) + foreach ($this->tables as $iter595) { - $xfer += $iter596->write($output); + $xfer += $iter595->write($output); } } $output->writeListEnd(); http://git-wip-us.apache.org/repos/asf/hive/blob/6af51245/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py ---------------------------------------------------------------------- diff --git a/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py b/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py index 9480c85..f26cb5b 100644 --- a/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py +++ b/metastore/src/gen/thrift/gen-py/hive_metastore/ttypes.py @@ -8315,19 +8315,22 @@ class GetOpenTxnsResponse: - txn_high_water_mark - open_txns - min_open_txn + - abortedBits """ thrift_spec = ( None, # 0 (1, TType.I64, 'txn_high_water_mark', None, None, ), # 1 - (2, TType.SET, 'open_txns', (TType.I64,None), None, ), # 2 + (2, TType.LIST, 'open_txns', (TType.I64,None), None, ), # 2 (3, TType.I64, 'min_open_txn', None, None, ), # 3 + (4, TType.STRING, 'abortedBits', None, None, ), # 4 ) - def __init__(self, txn_high_water_mark=None, open_txns=None, min_open_txn=None,): + def __init__(self, txn_high_water_mark=None, open_txns=None, min_open_txn=None, abortedBits=None,): self.txn_high_water_mark = txn_high_water_mark self.open_txns = open_txns self.min_open_txn = min_open_txn + self.abortedBits = abortedBits 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: @@ -8344,13 +8347,13 @@ class GetOpenTxnsResponse: else: iprot.skip(ftype) elif fid == 2: - if ftype == TType.SET: - self.open_txns = set() - (_etype416, _size413) = iprot.readSetBegin() + if ftype == TType.LIST: + self.open_txns = [] + (_etype416, _size413) = iprot.readListBegin() for _i417 in xrange(_size413): _elem418 = iprot.readI64() - self.open_txns.add(_elem418) - iprot.readSetEnd() + self.open_txns.append(_elem418) + iprot.readListEnd() else: iprot.skip(ftype) elif fid == 3: @@ -8358,6 +8361,11 @@ class GetOpenTxnsResponse: self.min_open_txn = iprot.readI64() else: iprot.skip(ftype) + elif fid == 4: + if ftype == TType.STRING: + self.abortedBits = iprot.readString() + else: + iprot.skip(ftype) else: iprot.skip(ftype) iprot.readFieldEnd() @@ -8373,16 +8381,20 @@ class GetOpenTxnsResponse: oprot.writeI64(self.txn_high_water_mark) oprot.writeFieldEnd() if self.open_txns is not None: - oprot.writeFieldBegin('open_txns', TType.SET, 2) - oprot.writeSetBegin(TType.I64, len(self.open_txns)) + oprot.writeFieldBegin('open_txns', TType.LIST, 2) + oprot.writeListBegin(TType.I64, len(self.open_txns)) for iter419 in self.open_txns: oprot.writeI64(iter419) - oprot.writeSetEnd() + oprot.writeListEnd() oprot.writeFieldEnd() if self.min_open_txn is not None: oprot.writeFieldBegin('min_open_txn', TType.I64, 3) oprot.writeI64(self.min_open_txn) oprot.writeFieldEnd() + if self.abortedBits is not None: + oprot.writeFieldBegin('abortedBits', TType.STRING, 4) + oprot.writeString(self.abortedBits) + oprot.writeFieldEnd() oprot.writeFieldStop() oprot.writeStructEnd() @@ -8391,6 +8403,8 @@ class GetOpenTxnsResponse: raise TProtocol.TProtocolException(message='Required field txn_high_water_mark is unset!') if self.open_txns is None: raise TProtocol.TProtocolException(message='Required field open_txns is unset!') + if self.abortedBits is None: + raise TProtocol.TProtocolException(message='Required field abortedBits is unset!') return @@ -8399,6 +8413,7 @@ class GetOpenTxnsResponse: value = (value * 31) ^ hash(self.txn_high_water_mark) value = (value * 31) ^ hash(self.open_txns) value = (value * 31) ^ hash(self.min_open_txn) + value = (value * 31) ^ hash(self.abortedBits) return value def __repr__(self): http://git-wip-us.apache.org/repos/asf/hive/blob/6af51245/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb ---------------------------------------------------------------------- diff --git a/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb b/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb index 7766071..f1aa9a6 100644 --- a/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb +++ b/metastore/src/gen/thrift/gen-rb/hive_metastore_types.rb @@ -1856,11 +1856,13 @@ class GetOpenTxnsResponse TXN_HIGH_WATER_MARK = 1 OPEN_TXNS = 2 MIN_OPEN_TXN = 3 + ABORTEDBITS = 4 FIELDS = { TXN_HIGH_WATER_MARK => {:type => ::Thrift::Types::I64, :name => 'txn_high_water_mark'}, - OPEN_TXNS => {:type => ::Thrift::Types::SET, :name => 'open_txns', :element => {:type => ::Thrift::Types::I64}}, - MIN_OPEN_TXN => {:type => ::Thrift::Types::I64, :name => 'min_open_txn', :optional => true} + OPEN_TXNS => {:type => ::Thrift::Types::LIST, :name => 'open_txns', :element => {:type => ::Thrift::Types::I64}}, + MIN_OPEN_TXN => {:type => ::Thrift::Types::I64, :name => 'min_open_txn', :optional => true}, + ABORTEDBITS => {:type => ::Thrift::Types::STRING, :name => 'abortedBits', :binary => true} } def struct_fields; FIELDS; end @@ -1868,6 +1870,7 @@ class GetOpenTxnsResponse def validate raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field txn_high_water_mark is unset!') unless @txn_high_water_mark raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field open_txns is unset!') unless @open_txns + raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field abortedBits is unset!') unless @abortedBits end ::Thrift::Struct.generate_accessors self http://git-wip-us.apache.org/repos/asf/hive/blob/6af51245/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java ---------------------------------------------------------------------- diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java index 12d98c5..970038d 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java @@ -52,6 +52,7 @@ import javax.sql.DataSource; import java.io.IOException; import java.io.PrintWriter; +import java.nio.ByteBuffer; import java.sql.*; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -394,23 +395,27 @@ abstract class TxnHandler implements TxnStore, TxnStore.MutexAPI { "initialized, null record found in next_txn_id"); } close(rs); - Set<Long> openList = new HashSet<Long>(); + List<Long> openList = new ArrayList<Long>(); //need the WHERE clause below to ensure consistent results with READ_COMMITTED - s = "select txn_id, txn_state from TXNS where txn_id <= " + hwm; + s = "select txn_id, txn_state from TXNS where txn_id <= " + hwm + " order by txn_id"; LOG.debug("Going to execute query<" + s + ">"); rs = stmt.executeQuery(s); long minOpenTxn = Long.MAX_VALUE; + BitSet abortedBits = new BitSet(); while (rs.next()) { long txnId = rs.getLong(1); openList.add(txnId); char c = rs.getString(2).charAt(0); if(c == TXN_OPEN) { minOpenTxn = Math.min(minOpenTxn, txnId); + } else if (c == TXN_ABORTED) { + abortedBits.set(openList.size() - 1); } } LOG.debug("Going to rollback"); dbConn.rollback(); - GetOpenTxnsResponse otr = new GetOpenTxnsResponse(hwm, openList); + ByteBuffer byteBuffer = ByteBuffer.wrap(abortedBits.toByteArray()); + GetOpenTxnsResponse otr = new GetOpenTxnsResponse(hwm, openList, byteBuffer); if(minOpenTxn < Long.MAX_VALUE) { otr.setMin_open_txn(minOpenTxn); } http://git-wip-us.apache.org/repos/asf/hive/blob/6af51245/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java ---------------------------------------------------------------------- diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java index 2df88fd..6e0070b 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java @@ -32,9 +32,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Arrays; +import java.util.BitSet; import java.util.List; import java.util.Map; -import java.util.Set; public class TxnUtils { private static final Logger LOG = LoggerFactory.getLogger(TxnUtils.class); @@ -55,7 +55,8 @@ public class TxnUtils { * doesn't make sense for Snapshot Isolation. Of course for Read Committed, the list should * inlude the latest committed set.*/ long highWater = txns.getTxn_high_water_mark(); - Set<Long> open = txns.getOpen_txns(); + List<Long> open = txns.getOpen_txns(); + BitSet abortedBits = BitSet.valueOf(txns.getAbortedBits()); long[] exceptions = new long[open.size() - (currentTxn > 0 ? 1 : 0)]; int i = 0; for(long txn: open) { @@ -63,10 +64,10 @@ public class TxnUtils { exceptions[i++] = txn; } if(txns.isSetMin_open_txn()) { - return new ValidReadTxnList(exceptions, highWater, txns.getMin_open_txn()); + return new ValidReadTxnList(exceptions, abortedBits, highWater, txns.getMin_open_txn()); } else { - return new ValidReadTxnList(exceptions, highWater); + return new ValidReadTxnList(exceptions, abortedBits, highWater); } } @@ -97,7 +98,9 @@ public class TxnUtils { exceptions = Arrays.copyOf(exceptions, i); } highWater = minOpenTxn == Long.MAX_VALUE ? highWater : minOpenTxn - 1; - return new ValidCompactorTxnList(exceptions, highWater); + BitSet bitSet = new BitSet(exceptions.length); + bitSet.set(0, bitSet.length()); // for ValidCompactorTxnList, everything in exceptions are aborted + return new ValidCompactorTxnList(exceptions, bitSet, highWater); } /** http://git-wip-us.apache.org/repos/asf/hive/blob/6af51245/metastore/src/test/org/apache/hadoop/hive/metastore/txn/TestValidCompactorTxnList.java ---------------------------------------------------------------------- diff --git a/metastore/src/test/org/apache/hadoop/hive/metastore/txn/TestValidCompactorTxnList.java b/metastore/src/test/org/apache/hadoop/hive/metastore/txn/TestValidCompactorTxnList.java index 79ccc6b..ec653ed 100644 --- a/metastore/src/test/org/apache/hadoop/hive/metastore/txn/TestValidCompactorTxnList.java +++ b/metastore/src/test/org/apache/hadoop/hive/metastore/txn/TestValidCompactorTxnList.java @@ -22,52 +22,64 @@ import org.apache.hadoop.hive.common.ValidTxnList; import org.junit.Assert; import org.junit.Test; +import java.util.BitSet; + public class TestValidCompactorTxnList { @Test public void minTxnHigh() { - ValidTxnList txns = new ValidCompactorTxnList(new long[]{3, 4}, 2); + BitSet bitSet = new BitSet(2); + bitSet.set(0, bitSet.length()); + ValidTxnList txns = new ValidCompactorTxnList(new long[]{3, 4}, bitSet, 2); ValidTxnList.RangeResponse rsp = txns.isTxnRangeValid(7, 9); Assert.assertEquals(ValidTxnList.RangeResponse.NONE, rsp); } @Test public void maxTxnLow() { - ValidTxnList txns = new ValidCompactorTxnList(new long[]{13, 14}, 12); + BitSet bitSet = new BitSet(2); + bitSet.set(0, bitSet.length()); + ValidTxnList txns = new ValidCompactorTxnList(new long[]{13, 14}, bitSet, 12); ValidTxnList.RangeResponse rsp = txns.isTxnRangeValid(7, 9); Assert.assertEquals(ValidTxnList.RangeResponse.ALL, rsp); } @Test public void minTxnHighNoExceptions() { - ValidTxnList txns = new ValidCompactorTxnList(new long[0], 5); + ValidTxnList txns = new ValidCompactorTxnList(new long[0], new BitSet(), 5); ValidTxnList.RangeResponse rsp = txns.isTxnRangeValid(7, 9); Assert.assertEquals(ValidTxnList.RangeResponse.NONE, rsp); } @Test public void maxTxnLowNoExceptions() { - ValidTxnList txns = new ValidCompactorTxnList(new long[0], 15); + ValidTxnList txns = new ValidCompactorTxnList(new long[0], new BitSet(), 15); ValidTxnList.RangeResponse rsp = txns.isTxnRangeValid(7, 9); Assert.assertEquals(ValidTxnList.RangeResponse.ALL, rsp); } @Test public void exceptionsAllBelow() { - ValidTxnList txns = new ValidCompactorTxnList(new long[]{3, 6}, 3); + BitSet bitSet = new BitSet(2); + bitSet.set(0, bitSet.length()); + ValidTxnList txns = new ValidCompactorTxnList(new long[]{3, 6}, bitSet, 3); ValidTxnList.RangeResponse rsp = txns.isTxnRangeValid(7, 9); Assert.assertEquals(ValidTxnList.RangeResponse.NONE, rsp); } @Test public void exceptionsInMidst() { - ValidTxnList txns = new ValidCompactorTxnList(new long[]{8}, 7); + BitSet bitSet = new BitSet(1); + bitSet.set(0, bitSet.length()); + ValidTxnList txns = new ValidCompactorTxnList(new long[]{8}, bitSet, 7); ValidTxnList.RangeResponse rsp = txns.isTxnRangeValid(7, 9); Assert.assertEquals(ValidTxnList.RangeResponse.NONE, rsp); } @Test public void exceptionsAbveHighWaterMark() { - ValidTxnList txns = new ValidCompactorTxnList(new long[]{8, 11, 17, 29}, 15); + BitSet bitSet = new BitSet(4); + bitSet.set(0, bitSet.length()); + ValidTxnList txns = new ValidCompactorTxnList(new long[]{8, 11, 17, 29}, bitSet, 15); Assert.assertArrayEquals("", new long[]{8, 11}, txns.getInvalidTransactions()); ValidTxnList.RangeResponse rsp = txns.isTxnRangeValid(7, 9); Assert.assertEquals(ValidTxnList.RangeResponse.ALL, rsp); @@ -77,17 +89,19 @@ public class TestValidCompactorTxnList { @Test public void writeToString() { - ValidTxnList txns = new ValidCompactorTxnList(new long[]{9, 7, 10, Long.MAX_VALUE}, 8); - Assert.assertEquals("8:" + Long.MAX_VALUE + ":7", txns.writeToString()); + BitSet bitSet = new BitSet(4); + bitSet.set(0, bitSet.length()); + ValidTxnList txns = new ValidCompactorTxnList(new long[]{7, 9, 10, Long.MAX_VALUE}, bitSet, 8); + Assert.assertEquals("8:" + Long.MAX_VALUE + ":7:", txns.writeToString()); txns = new ValidCompactorTxnList(); - Assert.assertEquals(Long.toString(Long.MAX_VALUE) + ":" + Long.MAX_VALUE + ":", txns.writeToString()); - txns = new ValidCompactorTxnList(new long[0], 23); - Assert.assertEquals("23:" + Long.MAX_VALUE + ":", txns.writeToString()); + Assert.assertEquals(Long.toString(Long.MAX_VALUE) + ":" + Long.MAX_VALUE + "::", txns.writeToString()); + txns = new ValidCompactorTxnList(new long[0], new BitSet(), 23); + Assert.assertEquals("23:" + Long.MAX_VALUE + "::", txns.writeToString()); } @Test public void readFromString() { - ValidCompactorTxnList txns = new ValidCompactorTxnList("37:" + Long.MAX_VALUE + ":7:9:10"); + ValidCompactorTxnList txns = new ValidCompactorTxnList("37:" + Long.MAX_VALUE + "::7,9,10"); Assert.assertEquals(37L, txns.getHighWatermark()); Assert.assertEquals(Long.MAX_VALUE, txns.getMinOpenTxn()); Assert.assertArrayEquals(new long[]{7L, 9L, 10L}, txns.getInvalidTransactions()); @@ -96,4 +110,27 @@ public class TestValidCompactorTxnList { Assert.assertEquals(Long.MAX_VALUE, txns.getMinOpenTxn()); Assert.assertEquals(0, txns.getInvalidTransactions().length); } + + @Test + public void testAbortedTxn() throws Exception { + ValidCompactorTxnList txnList = new ValidCompactorTxnList("5:4::1,2,3"); + Assert.assertEquals(5L, txnList.getHighWatermark()); + Assert.assertEquals(4, txnList.getMinOpenTxn()); + Assert.assertArrayEquals(new long[]{1L, 2L, 3L}, txnList.getInvalidTransactions()); + } + + @Test + public void testAbortedRange() throws Exception { + ValidCompactorTxnList txnList = new ValidCompactorTxnList("11:4::5,6,7,8"); + ValidTxnList.RangeResponse rsp = txnList.isTxnRangeAborted(1L, 3L); + Assert.assertEquals(ValidTxnList.RangeResponse.NONE, rsp); + rsp = txnList.isTxnRangeAborted(9L, 10L); + Assert.assertEquals(ValidTxnList.RangeResponse.NONE, rsp); + rsp = txnList.isTxnRangeAborted(6L, 7L); + Assert.assertEquals(ValidTxnList.RangeResponse.ALL, rsp); + rsp = txnList.isTxnRangeAborted(4L, 6L); + Assert.assertEquals(ValidTxnList.RangeResponse.SOME, rsp); + rsp = txnList.isTxnRangeAborted(6L, 13L); + Assert.assertEquals(ValidTxnList.RangeResponse.SOME, rsp); + } } http://git-wip-us.apache.org/repos/asf/hive/blob/6af51245/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Cleaner.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Cleaner.java b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Cleaner.java index 23b1b7f..6adface 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Cleaner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Cleaner.java @@ -41,6 +41,7 @@ import org.apache.hadoop.util.StringUtils; import java.io.IOException; import java.security.PrivilegedExceptionAction; import java.util.ArrayList; +import java.util.BitSet; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -257,7 +258,7 @@ public class Cleaner extends CompactorThread { * unless ValidTxnList is "capped" at highestTxnId. */ final ValidTxnList txnList = ci.highestTxnId > 0 ? - new ValidReadTxnList(new long[0], ci.highestTxnId) : new ValidReadTxnList(); + new ValidReadTxnList(new long[0], new BitSet(), ci.highestTxnId) : new ValidReadTxnList(); if (runJobAsSelf(ci.runAs)) { removeFiles(location, txnList);