Does not throw.
| 512 | |
| 513 | // Does not throw. |
| 514 | Future<> ParseMetaDataAsync() { |
| 515 | int64_t footer_read_size; |
| 516 | BEGIN_PARQUET_CATCH_EXCEPTIONS |
| 517 | footer_read_size = GetFooterReadSize(); |
| 518 | END_PARQUET_CATCH_EXCEPTIONS |
| 519 | // Assumes this is kept alive externally |
| 520 | return source_->ReadAsync(source_size_ - footer_read_size, footer_read_size) |
| 521 | .Then([this, footer_read_size]( |
| 522 | const std::shared_ptr<::arrow::Buffer>& footer_buffer) -> Future<> { |
| 523 | uint32_t metadata_len; |
| 524 | BEGIN_PARQUET_CATCH_EXCEPTIONS |
| 525 | metadata_len = ParseFooterLength(footer_buffer, footer_read_size); |
| 526 | END_PARQUET_CATCH_EXCEPTIONS |
| 527 | int64_t metadata_start = source_size_ - kFooterSize - metadata_len; |
| 528 | |
| 529 | std::shared_ptr<::arrow::Buffer> metadata_buffer; |
| 530 | if (footer_read_size >= (metadata_len + kFooterSize)) { |
| 531 | metadata_buffer = |
| 532 | SliceBuffer(footer_buffer, footer_read_size - metadata_len - kFooterSize, |
| 533 | metadata_len); |
| 534 | return ParseMaybeEncryptedMetaDataAsync(footer_buffer, |
| 535 | std::move(metadata_buffer), |
| 536 | footer_read_size, metadata_len); |
| 537 | } |
| 538 | return source_->ReadAsync(metadata_start, metadata_len) |
| 539 | .Then([this, footer_buffer, footer_read_size, metadata_len]( |
| 540 | const std::shared_ptr<::arrow::Buffer>& metadata_buffer) { |
| 541 | return ParseMaybeEncryptedMetaDataAsync(footer_buffer, metadata_buffer, |
| 542 | footer_read_size, metadata_len); |
| 543 | }); |
| 544 | }); |
| 545 | } |
| 546 | |
| 547 | // Continuation |
| 548 | Future<> ParseMaybeEncryptedMetaDataAsync( |
no test coverage detected