Skip to content

Commit

Permalink
ARROW-3366: [R] Dockerfile for docker-compose setup
Browse files Browse the repository at this point in the history
Thank you to @romainfrancois and others who have pushed forward the R side of this project!

This PR is my attempt to address [ARROW-3336](https://issues.apache.org/jira/projects/ARROW/issues/ARROW-3366), providing a testing container for the R package.

This follows up on work done by @kszucs in #2572 in an R-specific way.

**NOTE:**  This PR is a WIP. `R CMD INSTALL` currently fails because it cannot find wherever I installed `arrow` to. But I felt that this is far enough along to put up for review.

Author: James Lamb <jaylamb20@gmail.com>
Author: Krisztián Szűcs <szucs.krisztian@gmail.com>

Closes #2770 from jameslamb/r_dockerfile and squashes the following commits:

9fcebe5 <James Lamb> removed failing test in the R package
dd26d4b <James Lamb> fixed failing test in the R package
343456a <James Lamb> more changes
0db3369 <James Lamb> added bit64 dependency to R package
f7c050e <Krisztián Szűcs> R_CHECK_FORCE_SUGGESTS
db9ee5b <Krisztián Szűcs> pass CXXFLAGS
8a8376d <James Lamb> Put R build steps into a separate CI script
64ea840 <James Lamb> Updated LD_LIBRARY_PATH in R container
4d7f02c <James Lamb> fixed a few issues in R container
94242b3 <James Lamb> Add explict cpp build in usage for R docker-compose
4a7112b <James Lamb> Fixed comment text in R Dockerfile
d8e55d7 <James Lamb> removed todo about R containers in docker-compose
210a774 <James Lamb> ARROW-3366:  Dockerfile for docker-compose setup
  • Loading branch information
jameslamb authored and kszucs committed Nov 18, 2018
1 parent b315aa0 commit d23f4f2
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 5 deletions.
39 changes: 39 additions & 0 deletions ci/docker_build_r.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env 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 -e

export ARROW_BUILD_TOOLCHAIN=$CONDA_PREFIX
export ARROW_HOME=$CONDA_PREFIX

# For newer GCC per https://arrow.apache.org/docs/python/development.html#known-issues
export CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0"
export PKG_CXXFLAGS=$CXXFLAGS

# Build arrow
pushd /arrow/r

rm src/RcppExports*
Rscript -e "Rcpp::compileAttributes()"
R CMD build --keep-empty-dirs .
R CMD INSTALL $(ls | grep arrow_*.tar.gz)

export _R_CHECK_FORCE_SUGGESTS_=false
R CMD check $(ls | grep arrow_*.tar.gz) --as-cran --no-manual

popd
13 changes: 11 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ services:

######################### Language Containers ###############################

#TODO(kszucs): R

c_glib:
# Usage:
# docker-compose build cpp
Expand Down Expand Up @@ -101,6 +99,17 @@ services:
dockerfile: rust/Dockerfile
volumes: *volumes

r:
# Usage:
# docker-compose build cpp
# docker-compose build r
# docker-compose run r
image: arrow:r
build:
context: .
dockerfile: r/Dockerfile
volumes: *volumes

######################### Tools and Linters #################################

# TODO(kszucs): site
Expand Down
3 changes: 2 additions & 1 deletion r/.Rbuildignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ src/.clang-format
LICENSE.md
^data-raw$
lint.sh

Dockerfile
.*\.tar\.gz
77 changes: 77 additions & 0 deletions r/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# 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.

FROM arrow:cpp

# Configure
ENV CC=gcc \
CXX=g++

# r-base includes tzdata. Get around interactive stop in that package
ENV DEBIAN_FRONTEND=noninteractive

# Build R
# [1] https://www.digitalocean.com/community/tutorials/how-to-install-r-on-ubuntu-18-04
# [2] https://linuxize.com/post/how-to-install-r-on-ubuntu-18-04/#installing-r-packages-from-cran
RUN apt update && \
apt install -y \
apt-transport-https \
software-properties-common && \
apt-key adv \
--keyserver keyserver.ubuntu.com \
--recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 && \
add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/' && \
apt install -y r-base && \
# system libs needed by core R packages
apt install -y \
libgit2-dev \
libssl-dev && \
# install clang to mirror what was done on Travis
apt install -y \
clang \
clang-format \
clang-tidy && \
# R CMD CHECK --as-cran needs pdflatex to build the package manual
apt install -y \
texlive-latex-base && \
# Install vctrs from Github
Rscript -e "install.packages('devtools', repos = 'http://cran.rstudio.com')" && \
Rscript -e "devtools::install_github('romainfrancois/vctrs@bit64')" && \
Rscript -e "devtools::install_github('r-lib/withr')" && \
Rscript -e "devtools::install_github('RcppCore/Rcpp')" && \
# R is not good at picking up dependencies and installing them automatically
Rscript -e "install.packages(c( \
'Rcpp', \
'purrr', \
'assertthat', \
'fs', \
'tibble', \
'crayon', \
'testthat', \
'bit64', \
'hms', \
'lubridate'), \
repos = 'http://cran.rstudio.com')"

# Tell R where it can find the source code for arrow
ENV PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/build/cpp/src/arrow
ENV LD_LIBRARY_PATH=/opt/conda/lib/:/build/cpp/src/arrow:/arrow/r/src
ENV CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0"

# build, install, test R package
CMD /arrow/ci/docker_build_cpp.sh && \
/arrow/ci/docker_build_r.sh
3 changes: 2 additions & 1 deletion r/src/Makevars.in
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
# under the License.

PKG_CPPFLAGS=@cflags@
PKG_CXXFLAGS=$(C_VISIBILITY)
PKG_CXXFLAGS+=$(C_VISIBILITY)

This comment has been minimized.

Copy link
@romainfrancois

romainfrancois Nov 27, 2018

Contributor

@jameslamb is this needed ? R is not happy about the += here :
https://travis-ci.org/romainfrancois/arrow/jobs/460309929#L2249

checking for GNU extensions in Makefiles ... WARNING
Found the following file(s) containing GNU extensions:
  src/Makevars
  src/Makevars.in
Portable Makefiles do not use GNU extensions such as +=, :=, $(shell),
$(wildcard), ifeq ... endif. See section ‘Writing portable packages’ in
the ‘Writing R Extensions’ manual

Can you have a look ?

This comment has been minimized.

Copy link
@jameslamb

jameslamb Nov 27, 2018

Author Contributor

@romainfrancois, @kszucs added this while helping me on #2770 . This was added because that ABI flag needs to get included in PKG_CXXFLAGS. When this was just +, it was being read off the environment but then overwritten here by the result of $(C_VISIBILITY).

I'm not super familiar with make syntax for this type of operation...would it work to change to something like this?

PKG_CXXFLAGS="${PKG_CXXFLAGS},${C_VISIBILITY}"
CXX_STD=CXX11
PKG_LIBS=@libs@ -Wl,-rpath,/usr/local/lib
#CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0"
1 change: 0 additions & 1 deletion r/tests/testthat/test-RecordBatch.R
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,6 @@ test_that("read_record_batch handles various streams (ARROW-3450, ARROW-3505)",
batch4 <- read_record_batch(mmap_file)
batch5 <- read_record_batch(bytes)
batch6 <- read_record_batch(buf_reader)
expect_error(read_record_batch(buf_reader))

stream_reader <- record_batch_stream_reader(bytes)
batch7 <- read_record_batch(stream_reader)
Expand Down

0 comments on commit d23f4f2

Please sign in to comment.