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/09/05 16:18:54 UTC
arrow git commit: ARROW-1401: [C++] Add ARROW_EXTRA_ERROR_CONTEXT
option
Repository: arrow
Updated Branches:
refs/heads/master 338a187a9 -> ab328ec85
ARROW-1401: [C++] Add ARROW_EXTRA_ERROR_CONTEXT option
This can be enabled in release or debug builds. The result is slightly longer compile times and larger binaries. The resulting error messages are effectively a crude stack trace, see:
```
Out of memory:
/home/wesm/code/arrow/cpp/src/arrow/builder.cc:281 code: Reserve(length)
/home/wesm/code/arrow/cpp/src/arrow/builder.cc:250 code: ArrayBuilder::Resize(capacity)
ArrayBuilder::Resize
```
We may be able to do better with glog, but this should help for debugging
Author: Wes McKinney <we...@twosigma.com>
Closes #1042 from wesm/ARROW-1401 and squashes the following commits:
9d6f4d31 [Wes McKinney] Do not call constructor directly
a0731022 [Wes McKinney] Add to Travis CI
ca6291f2 [Wes McKinney] Add ARROW_EXTRA_ERROR_CONTEXT option with file/line numbers/code
Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/ab328ec8
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/ab328ec8
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/ab328ec8
Branch: refs/heads/master
Commit: ab328ec85b275deff9a7a821a1d8f6e9db5d3292
Parents: 338a187
Author: Wes McKinney <we...@twosigma.com>
Authored: Tue Sep 5 12:18:47 2017 -0400
Committer: Wes McKinney <we...@twosigma.com>
Committed: Tue Sep 5 12:18:47 2017 -0400
----------------------------------------------------------------------
ci/travis_before_script_cpp.sh | 3 ++-
cpp/CMakeLists.txt | 8 ++++++++
cpp/src/arrow/status.h | 22 ++++++++++++++++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/arrow/blob/ab328ec8/ci/travis_before_script_cpp.sh
----------------------------------------------------------------------
diff --git a/ci/travis_before_script_cpp.sh b/ci/travis_before_script_cpp.sh
index 7418b76..a613957 100755
--- a/ci/travis_before_script_cpp.sh
+++ b/ci/travis_before_script_cpp.sh
@@ -61,7 +61,8 @@ pushd $ARROW_CPP_BUILD_DIR
CMAKE_COMMON_FLAGS="\
-DARROW_BUILD_BENCHMARKS=ON \
-DCMAKE_INSTALL_PREFIX=$ARROW_CPP_INSTALL \
--DARROW_NO_DEPRECATED_API=ON"
+-DARROW_NO_DEPRECATED_API=ON \
+-DARROW_EXTRA_ERROR_CONTEXT=ON"
CMAKE_LINUX_FLAGS=""
CMAKE_OSX_FLAGS=""
http://git-wip-us.apache.org/repos/asf/arrow/blob/ab328ec8/cpp/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index f25cc62..9f9d71b 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -94,6 +94,10 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
"Exclude deprecated APIs from build"
OFF)
+ option(ARROW_EXTRA_ERROR_CONTEXT
+ "Compile with extra error context (line numbers, code)"
+ OFF)
+
option(ARROW_IPC
"Build the Arrow IPC extensions"
ON)
@@ -221,6 +225,10 @@ if (ARROW_NO_DEPRECATED_API)
add_definitions(-DARROW_NO_DEPRECATED_API)
endif()
+if (ARROW_EXTRA_ERROR_CONTEXT)
+ add_definitions(-DARROW_EXTRA_ERROR_CONTEXT)
+endif()
+
include(SetupCxxFlags)
############################################################
http://git-wip-us.apache.org/repos/asf/arrow/blob/ab328ec8/cpp/src/arrow/status.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/status.h b/cpp/src/arrow/status.h
index ece83ac..0cb0fb1 100644
--- a/cpp/src/arrow/status.h
+++ b/cpp/src/arrow/status.h
@@ -19,6 +19,10 @@
#include <iosfwd>
#include <string>
+#ifdef ARROW_EXTRA_ERROR_CONTEXT
+#include <sstream>
+#endif
+
#include "arrow/util/macros.h"
#include "arrow/util/visibility.h"
@@ -45,6 +49,22 @@
namespace arrow {
+#ifdef ARROW_EXTRA_ERROR_CONTEXT
+
+#define RETURN_NOT_OK(s) \
+ do { \
+ Status _s = (s); \
+ if (ARROW_PREDICT_FALSE(!_s.ok())) { \
+ std::stringstream ss; \
+ ss << __FILE__ << ":" << __LINE__ \
+ << " code: " << #s \
+ << "\n" << _s.message(); \
+ return Status(_s.code(), ss.str()); \
+ } \
+ } while (0)
+
+#else
+
#define RETURN_NOT_OK(s) \
do { \
Status _s = (s); \
@@ -53,6 +73,8 @@ namespace arrow {
} \
} while (0)
+#endif // ARROW_EXTRA_ERROR_CONTEXT
+
#define RETURN_NOT_OK_ELSE(s, else_) \
do { \
Status _s = (s); \