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

Method ParseMetaDataAsync

cpp/src/parquet/file_reader.cc:517–549  ·  view source on GitHub ↗

Does not throw.

Source from the content-addressed store, hash-verified

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

Callers 1

OpenAsyncMethod · 0.80

Calls 3

SliceBufferFunction · 0.85
ThenMethod · 0.80
ReadAsyncMethod · 0.45

Tested by

no test coverage detected