MCPcopy Create free account
hub / github.com/apache/arrow / ParseMetaDataAsync

Method ParseMetaDataAsync

cpp/src/parquet/file_reader.cc:514–545  ·  view source on GitHub ↗

Does not throw.

Source from the content-addressed store, hash-verified

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(

Callers 1

OpenAsyncMethod · 0.80

Calls 3

SliceBufferFunction · 0.85
ThenMethod · 0.80
ReadAsyncMethod · 0.45

Tested by

no test coverage detected