You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2016/01/12 02:21:48 UTC

[3/4] mesos git commit: Fixed protobuf::parse to surface nested message parsing errors.

Fixed protobuf::parse to surface nested message parsing errors.

Previously, errors parsing nested messages were ignored.

Review: https://reviews.apache.org/r/42167/


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

Branch: refs/heads/master
Commit: d291930d93c5e679c698ee7a8480e244afcea16d
Parents: bb61e14
Author: Gilbert Song <so...@gmail.com>
Authored: Mon Jan 11 16:54:40 2016 -0800
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Mon Jan 11 17:21:36 2016 -0800

----------------------------------------------------------------------
 .../3rdparty/stout/include/stout/protobuf.hpp    | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/d291930d/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp
index adb68c3..22cb5d9 100644
--- a/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp
+++ b/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp
@@ -332,10 +332,25 @@ struct Parser : boost::static_visitor<Try<Nothing> >
   {
     switch (field->type()) {
       case google::protobuf::FieldDescriptor::TYPE_MESSAGE:
+        // TODO(gilbert): We currently push up the nested error
+        // messages without wrapping the error message (due to
+        // the recursive nature of parse). We should pass along
+        // variable information in order to construct a helpful
+        // error message, e.g. "Failed to parse field 'a.b.c': ...".
         if (field->is_repeated()) {
-          parse(reflection->AddMessage(message, field), object);
+          Try<Nothing> parse =
+            internal::parse(reflection->AddMessage(message, field), object);
+
+          if (parse.isError()) {
+            return parse;
+          }
         } else {
-          parse(reflection->MutableMessage(message, field), object);
+          Try<Nothing> parse =
+            internal::parse(reflection->MutableMessage(message, field), object);
+
+          if (parse.isError()) {
+            return parse;
+          }
         }
         break;
       default: