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

Method ParseMetaData

cpp/src/parquet/file_reader.cc:439–477  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

437 // exceptions for error handling (with the async path converting to Future/Status).
438
439 void ParseMetaData() {
440 int64_t footer_read_size = GetFooterReadSize();
441 PARQUET_ASSIGN_OR_THROW(
442 auto footer_buffer,
443 source_->ReadAt(source_size_ - footer_read_size, footer_read_size));
444 uint32_t metadata_len = ParseFooterLength(footer_buffer, footer_read_size);
445 int64_t metadata_start = source_size_ - kFooterSize - metadata_len;
446
447 std::shared_ptr<::arrow::Buffer> metadata_buffer;
448 if (footer_read_size >= (metadata_len + kFooterSize)) {
449 metadata_buffer = SliceBuffer(
450 footer_buffer, footer_read_size - metadata_len - kFooterSize, metadata_len);
451 } else {
452 PARQUET_ASSIGN_OR_THROW(
453 metadata_buffer,
454 source_->ReadAt(metadata_start, metadata_len, /*allow_short_read=*/false));
455 }
456
457 // Parse the footer depending on encryption type
458 const bool is_encrypted_footer =
459 memcmp(footer_buffer->data() + footer_read_size - 4, kParquetEMagic, 4) == 0;
460 std::shared_ptr<InternalFileDecryptor> file_decryptor;
461 if (is_encrypted_footer) {
462 // Encrypted file with Encrypted footer.
463 const std::pair<int64_t, uint32_t> read_size =
464 ParseMetaDataOfEncryptedFileWithEncryptedFooter(metadata_buffer, metadata_len,
465 &file_decryptor);
466 // Read the actual footer
467 metadata_start = read_size.first;
468 metadata_len = read_size.second;
469 PARQUET_ASSIGN_OR_THROW(
470 metadata_buffer,
471 source_->ReadAt(metadata_start, metadata_len, /*allow_short_read=*/false));
472 // Fall through
473 }
474
475 ParseMetaDataFinal(std::move(metadata_buffer), metadata_len, is_encrypted_footer,
476 std::move(file_decryptor));
477 }
478
479 // Validate the source size and get the initial read size.
480 int64_t GetFooterReadSize() {

Callers 1

OpenMethod · 0.80

Calls 3

SliceBufferFunction · 0.85
ReadAtMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected