You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2017/04/10 21:35:25 UTC

arrow git commit: ARROW-779: [C++] Check for old metadata and raise exception if found

Repository: arrow
Updated Branches:
  refs/heads/master c2f28cd07 -> 06d92bbab


ARROW-779: [C++] Check for old metadata and raise exception if found

Author: Wes McKinney <we...@twosigma.com>

Closes #507 from wesm/ARROW-779 and squashes the following commits:

dad42f7 [Wes McKinney] Check for old metadata and raise exception if found


Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/06d92bba
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/06d92bba
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/06d92bba

Branch: refs/heads/master
Commit: 06d92bbab426d8b343d238e3e61166353da11877
Parents: c2f28cd
Author: Wes McKinney <we...@twosigma.com>
Authored: Mon Apr 10 17:35:18 2017 -0400
Committer: Wes McKinney <we...@twosigma.com>
Committed: Mon Apr 10 17:35:18 2017 -0400

----------------------------------------------------------------------
 cpp/src/arrow/ipc/metadata.cc | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/06d92bba/cpp/src/arrow/ipc/metadata.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/ipc/metadata.cc b/cpp/src/arrow/ipc/metadata.cc
index 84f8883..ee21156 100644
--- a/cpp/src/arrow/ipc/metadata.cc
+++ b/cpp/src/arrow/ipc/metadata.cc
@@ -50,7 +50,11 @@ using VectorLayoutOffset = flatbuffers::Offset<arrow::flatbuf::VectorLayout>;
 using Offset = flatbuffers::Offset<void>;
 using FBString = flatbuffers::Offset<flatbuffers::String>;
 
-static constexpr flatbuf::MetadataVersion kMetadataVersion = flatbuf::MetadataVersion_V3;
+static constexpr flatbuf::MetadataVersion kCurrentMetadataVersion =
+    flatbuf::MetadataVersion_V3;
+
+static constexpr flatbuf::MetadataVersion kMinMetadataVersion =
+    flatbuf::MetadataVersion_V3;
 
 static Status IntFromFlatbuffer(
     const flatbuf::Int* int_data, std::shared_ptr<DataType>* out) {
@@ -605,8 +609,8 @@ static Status WriteFlatbufferBuilder(FBB& fbb, std::shared_ptr<Buffer>* out) {
 
 static Status WriteFBMessage(FBB& fbb, flatbuf::MessageHeader header_type,
     flatbuffers::Offset<void> header, int64_t body_length, std::shared_ptr<Buffer>* out) {
-  auto message =
-      flatbuf::CreateMessage(fbb, kMetadataVersion, header_type, header, body_length);
+  auto message = flatbuf::CreateMessage(
+      fbb, kCurrentMetadataVersion, header_type, header, body_length);
   fbb.Finish(message);
   return WriteFlatbufferBuilder(fbb, out);
 }
@@ -738,7 +742,7 @@ Status WriteFileFooter(const Schema& schema, const std::vector<FileBlock>& dicti
   auto fb_record_batches = FileBlocksToFlatbuffer(fbb, record_batches);
 
   auto footer = flatbuf::CreateFooter(
-      fbb, kMetadataVersion, fb_schema, fb_dictionaries, fb_record_batches);
+      fbb, kCurrentMetadataVersion, fb_schema, fb_dictionaries, fb_record_batches);
 
   fbb.Finish(footer);
 
@@ -814,7 +818,11 @@ class Message::MessageImpl {
   Status Open() {
     message_ = flatbuf::GetMessage(buffer_->data() + offset_);
 
-    // TODO(wesm): verify the message
+    // Check that the metadata version is supported
+    if (message_->version() < kMinMetadataVersion) {
+      return Status::Invalid("Old metadata version not supported");
+    }
+
     return Status::OK();
   }