From ac2d6fe226a4c0a68c598856a366ad22462d35f0 Mon Sep 17 00:00:00 2001 From: "Uwe L. Korn" Date: Tue, 17 May 2016 19:12:08 -0700 Subject: [PATCH] PARQUET-620: Ensure metadata is written only once Author: Uwe L. Korn Closes #108 from xhochy/parquet-620 and squashes the following commits: da122ad [Uwe L. Korn] Ensure metadata is written only once Change-Id: I7653597fdf69c961545d6c978fdc1367267adee7 --- cpp/src/parquet/file/writer-internal.cc | 19 +++++++++++++------ cpp/src/parquet/file/writer-internal.h | 1 + 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/cpp/src/parquet/file/writer-internal.cc b/cpp/src/parquet/file/writer-internal.cc index d87d5214e2e6b..aae7000d8f37d 100644 --- a/cpp/src/parquet/file/writer-internal.cc +++ b/cpp/src/parquet/file/writer-internal.cc @@ -173,13 +173,16 @@ std::unique_ptr FileSerializer::Open( } void FileSerializer::Close() { - if (row_group_writer_) { row_group_writer_->Close(); } - row_group_writer_.reset(); + if (is_open_) { + if (row_group_writer_) { row_group_writer_->Close(); } + row_group_writer_.reset(); - // Write magic bytes and metadata - WriteMetaData(); + // Write magic bytes and metadata + WriteMetaData(); - sink_->Close(); + sink_->Close(); + is_open_ = false; + } } int FileSerializer::num_columns() const { @@ -238,7 +241,11 @@ void FileSerializer::WriteMetaData() { FileSerializer::FileSerializer(std::shared_ptr sink, std::shared_ptr& schema, MemoryAllocator* allocator = default_allocator()) - : sink_(sink), allocator_(allocator), num_row_groups_(0), num_rows_(0) { + : sink_(sink), + allocator_(allocator), + num_row_groups_(0), + num_rows_(0), + is_open_(true) { schema_.Init(schema); StartFile(); } diff --git a/cpp/src/parquet/file/writer-internal.h b/cpp/src/parquet/file/writer-internal.h index 8c5db68aebe0f..53c6b71912105 100644 --- a/cpp/src/parquet/file/writer-internal.h +++ b/cpp/src/parquet/file/writer-internal.h @@ -130,6 +130,7 @@ class FileSerializer : public ParquetFileWriter::Contents { MemoryAllocator* allocator_; int num_row_groups_; int num_rows_; + bool is_open_; std::unique_ptr row_group_writer_; void StartFile();