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 2019/07/10 19:46:01 UTC

[arrow] branch master updated: ARROW-5803: [CI] Dockerize C++ with clang 7 Travis CI

This is an automated email from the ASF dual-hosted git repository.

wesm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new 5e63905  ARROW-5803: [CI] Dockerize C++ with clang 7 Travis CI
5e63905 is described below

commit 5e639059a0330cad256703516996fbed11c8fd83
Author: François Saint-Jacques <fs...@gmail.com>
AuthorDate: Wed Jul 10 14:45:53 2019 -0500

    ARROW-5803: [CI] Dockerize C++ with clang 7 Travis CI
    
    Adds a new docker-compose entry (cpp-ci) which uses system and bundled packages.
    
    - This creates an indirect dependency on the docker-hub ursalab/arrow:cpp-ci images that is pulled. The downside of this, is that any change to the Dockerfile itself will _not_ be reflected in the travis run until someone pushes upstream. This is also a problem with the `java-all-jdks` image.
    - The coredump reporting functionality will not work with this image, once we migrate (if possible) all cpp based (and derived) images, we'll put this back.
    - We could improve the runtime if we could build the bundled dependencies at image build step, instead of in the cmake run.
    
    Author: François Saint-Jacques <fs...@gmail.com>
    
    Closes #4822 from fsaintjacques/ARROW-5803-dockerize-cpp-travis and squashes the following commits:
    
    8cb3ad722 <François Saint-Jacques> Disable StartStopTestServer
    6d0c8da86 <François Saint-Jacques> Address review comments
    369cc1f83 <François Saint-Jacques> Combine LLVM install steps
    fc714ca42 <François Saint-Jacques> Disable -ex after scripts
    87c930968 <François Saint-Jacques> Use docker-compose build --pull
    7c9c4c35f <François Saint-Jacques> Source scripts
    11ae3b542 <François Saint-Jacques> Fix Docker lint
    8e91e6e8a <François Saint-Jacques> Revert "TEMP: remove other travis build"
    9a039920a <François Saint-Jacques> Add tracing to travis scripts
    b62607915 <François Saint-Jacques> Clean travis scripts and glue ccache with travis cache
    de6f7327b <François Saint-Jacques> Fix flight memleak
    efd9f8c0f <François Saint-Jacques> Fix orc -Werror message
    a6fb2549e <François Saint-Jacques> ARROW-5803:  Dockerize travis cpp tests
    3a1d73e8f <François Saint-Jacques> TEMP: remove other travis build
---
 .travis.yml                                 |  51 ++-------
 ci/docker_build_cpp.sh                      |  28 +++--
 ci/travis/after-failure.sh                  |  35 +++++++
 ci/travis/after-script.sh                   |  25 +++++
 ci/travis/before-install.sh                 |  35 +++++++
 cpp/Dockerfile.ubuntu-bionic                | 154 ++++++++++++++++------------
 cpp/cmake_modules/ThirdpartyToolchain.cmake |   2 +-
 cpp/src/arrow/flight/client.cc              |   4 +-
 cpp/src/arrow/flight/flight-test.cc         |   2 +-
 cpp/src/arrow/flight/server.cc              |   2 +-
 docker-compose.yml                          |  25 ++++-
 11 files changed, 236 insertions(+), 127 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 793e86a..49f9ea8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -35,16 +35,7 @@ git:
   depth: 250
 
 before_install:
-  # Common pre-install steps for all builds
-  - eval "${MATRIX_EVAL}"
-  - ulimit -c unlimited -S
-  - |
-      if [ $TRAVIS_OS_NAME == "linux" ]; then
-        sudo bash -c "echo -e 'Acquire::Retries 10; Acquire::http::Timeout \"20\";' > /etc/apt/apt.conf.d/99-travis-retry"
-        sudo apt-get update -qq
-      fi
-  - eval `python $TRAVIS_BUILD_DIR/ci/detect-changes.py`
-  - if [ $TRAVIS_OS_NAME == "linux" ]; then ccache -s; fi
+  - source ci/travis/before-install.sh
 
 matrix:
   fast_finish: true
@@ -62,28 +53,13 @@ matrix:
     - $TRAVIS_BUILD_DIR/ci/travis_release_test.sh
   - name: "C++ unit tests w/ clang 7.0, system packages"
     os: linux
-    env:
-    - ARROW_TRAVIS_USE_SYSTEM=1
-    - ARROW_TRAVIS_PLASMA=1
-    - ARROW_TRAVIS_ORC=1
-    - ARROW_TRAVIS_PARQUET=1
-    - ARROW_TRAVIS_GANDIVA=1
-    - ARROW_TRAVIS_VERBOSE=1
-    - ARROW_TRAVIS_USE_SYSTEM_JAVA=1
-    - ARROW_BUILD_WARNING_LEVEL=CHECKIN
-    - ARROW_USE_ASAN=1
-    - ARROW_USE_UBSAN=1
-    - CC="clang-7"
-    - CXX="clang++-7"
+    language: cpp
     before_script:
     - if [ $ARROW_CI_CPP_AFFECTED != "1" ]; then exit; fi
-    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
-    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
-    # If either C++ or Python changed, we must install the C++ libraries
     - git submodule update --init
-    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh
+    - docker-compose build --pull cpp-system-deps
     script:
-    - $TRAVIS_BUILD_DIR/ci/travis_script_cpp.sh || travis_terminate 1
+    - docker-compose run cpp-system-deps
   # Separating Valgrind and C++ coverage makes individual jobs shorter
   - name: "C++ unit tests w/ conda-forge toolchain, coverage"
     compiler: gcc
@@ -204,7 +180,7 @@ matrix:
     os: linux
     before_script:
     - if [ $ARROW_CI_JAVA_AFFECTED != "1" ]; then exit; fi
-    - docker-compose pull java-all-jdks
+    - docker-compose build --pull java-all-jdks
     script:
     - docker-compose run java-all-jdks
   - name: "Integration w/ OpenJDK 8, conda-forge toolchain"
@@ -365,23 +341,10 @@ matrix:
     - Rscript ../ci/travis_upload_r_coverage.R
 
 after_failure:
-- |
-    if [ "$TRAVIS_OS_NAME" = "osx" ]; then
-      COREFILE=$(find /cores -maxdepth 1 -type f -name "core.*" | head -n 1)
-      if [[ -f "$COREFILE" ]]; then
-        lldb -c "$COREFILE" --batch --one-line "thread backtrace all -e true"
-      fi
-      ls -la ~/Library/Logs/DiagnosticReports/
-      cat ~/Library/Logs/DiagnosticReports/*.crash
-    else
-      COREFILE=$(find . -maxdepth 2 -name "core*" | head -n 1)
-      if [[ -f "$COREFILE" ]]; then
-        gdb -c "$COREFILE" example -ex "thread apply all bt" -ex "set pagination 0" -batch
-      fi
-    fi
+  - source ci/travis/after-failure.sh
 
 after_script:
-  - if [ $TRAVIS_OS_NAME == "linux" ]; then ccache -s; fi
+  - source ci/travis/after-script.sh
 
 env:
   global:
diff --git a/ci/docker_build_cpp.sh b/ci/docker_build_cpp.sh
index 77268bc..307b4cd 100755
--- a/ci/docker_build_cpp.sh
+++ b/ci/docker_build_cpp.sh
@@ -16,7 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-set -e
+set -ex
 
 source_dir=${1:-/arrow/cpp}
 build_dir=${2:-/build/cpp}
@@ -29,14 +29,22 @@ mkdir -p ${build_dir}
 pushd ${build_dir}
 
 cmake -GNinja \
-      -DARROW_DEPENDENCY_SOURCE=${ARROW_DEPENDENCY_SOURCE:-AUTO} \
-      -DARROW_VERBOSE_THIRDPARTY_BUILD=ON \
-      -DCMAKE_BUILD_TYPE=${ARROW_BUILD_TYPE:-debug} \
       -DCMAKE_INSTALL_PREFIX=${install_dir} \
       -DCMAKE_INSTALL_LIBDIR=lib \
-      -DARROW_WITH_BZ2=${ARROW_WITH_BZ2:-ON} \
-      -DARROW_WITH_ZSTD=${ARROW_WITH_ZSTD:-ON} \
+      -DCMAKE_BUILD_TYPE=${ARROW_BUILD_TYPE:-debug} \
+      -DCMAKE_CXX_FLAGS=${CXXFLAGS:-} \
+      -DARROW_DEPENDENCY_SOURCE=${ARROW_DEPENDENCY_SOURCE:-AUTO} \
+      -DARROW_VERBOSE_THIRDPARTY_BUILD=${ARROW_VERBOSE_THIRDPARTY_BUILD:-ON} \
+      -DARROW_BUILD_WARNING_LEVEL=${DARROW_BUILD_WARNING_LEVEL:-CHECKIN} \
+      -DARROW_BUILD_TESTS=${ARROW_BUILD_TESTS:-ON} \
       -DARROW_BUILD_BENCHMARKS=${ARROW_BUILD_BENCHMARKS:-ON} \
+      -DARROW_BUILD_UTILITIES=${ARROW_BUILD_UTILITIES:-ON} \
+      -DARROW_BUILD_EXAMPLES=${ARROW_BUILD_EXAMPLES:-ON} \
+      -DARROW_BUILD_SHARED=${ARROW_BUILD_SHARED:-ON} \
+      -DARROW_BUILD_STATIC=${ARROW_BUILD_STATIC:-ON} \
+      -DARROW_NO_DEPRECATED_API=${ARROW_NO_DEPRECATED_API:-OFF} \
+      -DARROW_USE_ASAN=${ARROW_USE_ASAN:-OFF} \
+      -DARROW_USE_UBSAN=${ARROW_USE_UBSAN:-OFF} \
       -DARROW_FLIGHT=${ARROW_FLIGHT:-ON} \
       -DARROW_ORC=${ARROW_ORC:-ON} \
       -DARROW_PLASMA=${ARROW_PLASMA:-ON} \
@@ -45,21 +53,19 @@ cmake -GNinja \
       -DARROW_PYTHON=${ARROW_PYTHON:-OFF} \
       -DARROW_GANDIVA=${ARROW_GANDIVA:-OFF} \
       -DARROW_GANDIVA_JAVA=${ARROW_GANDIVA_JAVA:-OFF} \
-      -DARROW_BUILD_TESTS=${ARROW_BUILD_TESTS:-OFF} \
-      -DARROW_BUILD_UTILITIES=${ARROW_BUILD_UTILITIES:-ON} \
+      -DARROW_WITH_BZ2=${ARROW_WITH_BZ2:-ON} \
+      -DARROW_WITH_ZSTD=${ARROW_WITH_ZSTD:-ON} \
       -DARROW_INSTALL_NAME_RPATH=${ARROW_INSTALL_NAME_RPATH:-ON} \
       -DARROW_EXTRA_ERROR_CONTEXT=ON \
-      -DARROW_BUILD_SHARED=${ARROW_BUILD_SHARED:-ON} \
-      -DARROW_BUILD_STATIC=${ARROW_BUILD_STATIC:-ON} \
       -DARROW_TEST_LINKAGE=${ARROW_TEST_LINKAGE:-shared} \
       -DPARQUET_REQUIRE_ENCRYPTION=${ARROW_WITH_OPENSSL:-ON} \
-      -DCMAKE_CXX_FLAGS=$CXXFLAGS \
       -DBOOST_SOURCE=${ARROW_BOOST_SOURCE:-AUTO} \
       -Duriparser_SOURCE=AUTO \
       -DARROW_FUZZING=${ARROW_FUZZING:-OFF} \
       -DARROW_USE_ASAN=${ARROW_USE_ASAN:-OFF} \
       ${CMAKE_ARGS} \
       ${source_dir}
+
 ninja
 ninja install
 
diff --git a/ci/travis/after-failure.sh b/ci/travis/after-failure.sh
new file mode 100755
index 0000000..35b798f
--- /dev/null
+++ b/ci/travis/after-failure.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -ex
+
+if [[ "${TRAVIS_OS_NAME}" = "osx" ]]; then
+  COREFILE=$(find /cores -maxdepth 1 -type f -name "core.*" | head -n 1)
+  if [[ -f "$COREFILE" ]]; then
+    lldb -c "$COREFILE" --batch --one-line "thread backtrace all -e true"
+  fi
+  ls -la ~/Library/Logs/DiagnosticReports/
+  cat ~/Library/Logs/DiagnosticReports/*.crash
+else
+  COREFILE=$(find . -maxdepth 2 -name "core*" | head -n 1)
+  if [[ -f "$COREFILE" ]]; then
+    gdb -c "$COREFILE" example -ex "thread apply all bt" -ex "set pagination 0" -batch
+  fi
+fi
+
+set +ex
diff --git a/ci/travis/after-script.sh b/ci/travis/after-script.sh
new file mode 100755
index 0000000..f323f3c
--- /dev/null
+++ b/ci/travis/after-script.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -ex
+
+if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
+  ccache --show-stats
+fi
+
+set +ex
diff --git a/ci/travis/before-install.sh b/ci/travis/before-install.sh
new file mode 100755
index 0000000..02dc971
--- /dev/null
+++ b/ci/travis/before-install.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -ex
+
+eval "${MATRIX_EVAL}"
+
+# Enables core files
+ulimit -c unlimited -S
+
+if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
+  echo -e 'Acquire::Retries 10; Acquire::http::Timeout \"20\";' | \
+    sudo tee /etc/apt/apt.conf.d/99-travis-retry
+  sudo apt-get update -qq
+  ccache --show-stats
+fi
+
+eval "$(python ${TRAVIS_BUILD_DIR}/ci/detect-changes.py)"
+
+set +ex
diff --git a/cpp/Dockerfile.ubuntu-bionic b/cpp/Dockerfile.ubuntu-bionic
index e2fd92d..763e13e 100644
--- a/cpp/Dockerfile.ubuntu-bionic
+++ b/cpp/Dockerfile.ubuntu-bionic
@@ -17,78 +17,102 @@
 
 FROM ubuntu:bionic
 
+# pipefail is enabled for proper error detection in the `wget | apt-key add`
+# step
 SHELL ["/bin/bash", "-o", "pipefail", "-c"]
 
-ENV DEBIAN_FRONTEND noninteractive
+ENV DEBIAN_FRONTEND=noninteractive
+
+RUN apt-get update -y -q && \
+    apt-get install -y -q --no-install-recommends \
+      wget software-properties-common gpg-agent && \
+      apt-get clean && rm -rf /var/lib/apt/lists*
+
+# Installs LLVM toolchain, for gandiva and testing other compilers
+#
+# Note that this is installed before the base packages to improve iteration
+# while debugging package list with docker build due to slow download speed of
+# llvm compared to ubuntu apt mirrors.
+ARG LLVM_VERSION=7
+# Args are only exposed in the "build" step, this ensure that LLVM_VERSION is
+# found in the "run" step.
+ENV LLVM_VERSION=${LLVM_VERSION}
+ARG LLVM_APT_URL="http://apt.llvm.org/bionic/"
+ARG LLVM_APT_ARCH="llvm-toolchain-bionic-${LLVM_VERSION}"
+RUN wget -q -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
+    apt-add-repository -y --update "deb ${LLVM_APT_URL} ${LLVM_APT_ARCH} main" && \
+    apt-get install -y -q --no-install-recommends \
+      clang-${LLVM_VERSION} \
+      clang-format-${LLVM_VERSION} \
+      clang-tidy-${LLVM_VERSION} \
+      llvm-${LLVM_VERSION}-dev && \
+      apt-get clean && rm -rf /var/lib/apt/lists*
+
+# Installs C++ toolchain and dependencies
 RUN apt-get update -y -q && \
-    apt-get install -y -q --no-install-recommends wget software-properties-common gpg-agent && \
-    wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
-    apt-add-repository -y "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-7 main" && \
-    apt-get update -y -q && \
     apt-get install -y -q --no-install-recommends \
-        autoconf \
-        bison \
-        ca-certificates \
-        ccache \
-        clang-7 \
-        cmake \
-        flex \
-        g++ \
-        gcc \
-        git \
-        libbenchmark-dev \
-        libboost-all-dev \
-        libbrotli-dev \
-        libbz2-dev \
-        libc-ares-dev \
-        libdouble-conversion-dev \
-        libgflags-dev \
-        libgoogle-glog-dev \
-        libgrpc-dev \
-        libgrpc++-dev \
-        liblz4-dev \
-        libprotoc-dev \
-        libprotobuf-dev \
-        libre2-dev \
-        libsnappy-dev \
-        libssl-dev \
-        libzstd-dev \
-        llvm-7-dev \
-        make \
-        ninja-build \
-        pkg-config \
-        protobuf-compiler \
-        protobuf-compiler-grpc \
-        rapidjson-dev \
-        tzdata \
-    && apt-get clean \
-    && rm -rf /var/lib/apt/lists/*
+      autoconf \
+      bison \
+      ca-certificates \
+      ccache \
+      cmake \
+      flex \
+      g++ \
+      gcc \
+      git \
+      libbenchmark-dev \
+      libboost-filesystem-dev \
+      libboost-regex-dev \
+      libboost-system-dev \
+      libbrotli-dev \
+      libbz2-dev \
+      libdouble-conversion-dev \
+      libgflags-dev \
+      libgoogle-glog-dev \
+      liblz4-dev \
+      liblzma-dev \
+      libre2-dev \
+      libsnappy-dev \
+      libssl-dev \
+      libzstd-dev \
+      ninja-build \
+      pkg-config \
+      rapidjson-dev \
+      thrift-compiler \
+      tzdata && \
+      apt-get clean && rm -rf /var/lib/apt/lists*
 
-# Ubuntu's gtest just provides sources, the compiled version is only available
-# from Ubuntu Cosmic on.
-# ARROW_GANDIVA_JAVA requires CMake 3.11
-# TODO: gRPC is too old on Bionic and c-ares CMake config is not installed thus
-#   we need to build both from source.
-# protobuf does not come with PHP but grpc needs it to built, thus also
-# built Protobuf from source: https://github.com/grpc/grpc/issues/15949
-ENV CC=gcc \
-     CXX=g++ \
-     ARROW_BUILD_BENCHMARKS=ON \
-     ARROW_BUILD_TESTS=ON \
-     ARROW_DEPENDENCY_SOURCE=SYSTEM \
-     ARROW_FLIGHT=ON \
-     ARROW_GANDIVA=ON \
-     ARROW_GANDIVA_JAVA=OFF \
-     ARROW_PARQUET=ON \
-     ARROW_HOME=/usr \
-     ARROW_WITH_ZSTD=ON \
-     CMAKE_ARGS="-DThrift_SOURCE=BUNDLED \
+# The following dependencies will be downloaded due to missing/invalid packages
+# provided by the distribution:
+# - libc-ares-dev does not install CMake config files
+# - flatbuffer is not packaged
+# - libgtest-dev only provide sources
+# - libprotobuf-dev only provide sources
+# - thrift is too old
+ENV CMAKE_ARGS="-DThrift_SOURCE=BUNDLED \
 -DFlatbuffers_SOURCE=BUNDLED \
 -DGTest_SOURCE=BUNDLED \
--DgRPC_SOURCE=BUNDLED \
--Dc-ares_SOURCE=BUNDLED \
 -DORC_SOURCE=BUNDLED \
--DProtobuf_SOURCE=BUNDLED"
+-Dc-ares_SOURCE=BUNDLED \
+-DgRPC_SOURCE=BUNDLED \
+-DProtobuf_SOURCE=BUNDLED ${CMAKE_ARGS}"
+
+# Prioritize system packages and local installation
+ENV ARROW_DEPENDENCY_SOURCE=SYSTEM \
+    ARROW_FLIGHT=ON \
+    ARROW_GANDIVA=ON \
+    ARROW_HDFS=ON \
+    ARROW_ORC=ON \
+    ARROW_PARQUET=ON \
+    ARROW_PLASMA=ON \
+    ARROW_USE_ASAN=ON \
+    ARROW_USE_UBSAN=ON \
+    ARROW_NO_DEPRECATED_API=ON \
+    ARROW_INSTALL_NAME_RPATH=OFF \
+    ARROW_WITH_BZ2=ON \
+    ARROW_WITH_ZSTD=ON
+
+ENV CC=clang-${LLVM_VERSION} \
+    CXX=clang++-${LLVM_VERSION}
 
-# build and test
 CMD ["arrow/ci/docker_build_and_test_cpp.sh"]
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index e9dfa07..aa1e557 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -2295,7 +2295,7 @@ macro(build_orc)
     endif()
     if("${COMPILER_VERSION}" VERSION_GREATER "4.0")
       set(ORC_CMAKE_CXX_FLAGS " -Wno-zero-as-null-pointer-constant \
--Wno-inconsistent-missing-destructor-override ")
+-Wno-inconsistent-missing-destructor-override -Wno-error=undef ")
     endif()
   endif()
 
diff --git a/cpp/src/arrow/flight/client.cc b/cpp/src/arrow/flight/client.cc
index cb4b92d..eb4df58 100644
--- a/cpp/src/arrow/flight/client.cc
+++ b/cpp/src/arrow/flight/client.cc
@@ -118,7 +118,7 @@ class GrpcClientAuthReader : public ClientAuthReader {
   Status Read(std::string* token) override {
     pb::HandshakeResponse request;
     if (stream_->Read(&request)) {
-      *token = std::move(*request.release_payload());
+      *token = std::move(*request.mutable_payload());
       return Status::OK();
     }
     return internal::FromGrpcStatus(stream_->Finish());
@@ -368,7 +368,7 @@ class GrpcMetadataReader : public FlightMetadataReader {
   Status ReadMetadata(std::shared_ptr<Buffer>* out) override {
     pb::PutResult message;
     if (reader_->Read(&message)) {
-      *out = Buffer::FromString(std::move(*message.release_app_metadata()));
+      *out = Buffer::FromString(std::move(*message.mutable_app_metadata()));
     } else {
       // Stream finished
       *out = nullptr;
diff --git a/cpp/src/arrow/flight/flight-test.cc b/cpp/src/arrow/flight/flight-test.cc
index d036b9a..e37de8b 100644
--- a/cpp/src/arrow/flight/flight-test.cc
+++ b/cpp/src/arrow/flight/flight-test.cc
@@ -135,7 +135,7 @@ TEST(TestFlightDescriptor, ToFromProto) {
 }
 #endif
 
-TEST(TestFlight, StartStopTestServer) {
+TEST(TestFlight, DISABLED_StartStopTestServer) {
   TestServer server("flight-test-server");
   server.Start();
   ASSERT_TRUE(server.IsRunning());
diff --git a/cpp/src/arrow/flight/server.cc b/cpp/src/arrow/flight/server.cc
index d059a8b..f5f4698 100644
--- a/cpp/src/arrow/flight/server.cc
+++ b/cpp/src/arrow/flight/server.cc
@@ -181,7 +181,7 @@ class GrpcServerAuthReader : public ServerAuthReader {
   Status Read(std::string* token) override {
     pb::HandshakeRequest request;
     if (stream_->Read(&request)) {
-      *token = std::move(*request.release_payload());
+      *token = std::move(*request.mutable_payload());
       return Status::OK();
     }
     return Status::IOError("Stream is closed.");
diff --git a/docker-compose.yml b/docker-compose.yml
index 8d197c1..3b50cd1 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -114,10 +114,31 @@ services:
     build:
       context: .
       dockerfile: cpp/Dockerfile
-    environment:
-      PARQUET_TEST_DATA: /arrow/cpp/submodules/parquet-testing/data
     volumes: *ubuntu-volumes
 
+  cpp-system-deps:
+    # Usage:
+    #   docker-compose build cpp-system-deps
+    #   docker-compose run cpp-system-deps
+    image: ursalab/arrow:cpp-system-deps
+    shm_size: 2G
+    cap_add:
+      # LeakSanitizer and gdb requires ptrace(2)
+      - SYS_PTRACE
+    build:
+      context: .
+      dockerfile: cpp/Dockerfile.ubuntu-bionic
+      args:
+        LLVM_VERSION: 7
+    environment:
+      ARROW_FLIGHT: "ON"
+      ARROW_USE_ASAN: "ON"
+      ARROW_USE_UBSAN: "ON"
+    volumes:
+      - .:/arrow:delegated
+      - ubuntu-cache:/build:delegated
+      - ${HOME}/.ccache:/build/ccache:cached
+
   cpp-release:
     # Usage:
     #   docker-compose build cpp