You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by mi...@apache.org on 2018/10/26 19:18:56 UTC

[3/3] impala git commit: test-with-docker: allow built images to be used with "docker run" easily.

test-with-docker: allow built images to be used with "docker run" easily.

Configures the built container to enter into a script that
starts the minicluster. As a result, "docker run -ti <container>" will
launch the user into a shell with the Impala minicluster and the
impala development cluster running.

To handle cases where users don't specify --privileged, we skip
Kudu if it NTP seems unavailable.

Change-Id: Ib8d6a28d4cb4ab019cd72415024b23374a6d9e2f
Reviewed-on: http://gerrit.cloudera.org:8080/11781
Reviewed-by: Philip Zeyliger <ph...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>


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

Branch: refs/heads/master
Commit: de0c6bd6bd0db163d2820ae238bee5887f410f52
Parents: c170107
Author: Philip Zeyliger <ph...@cloudera.com>
Authored: Mon Oct 22 21:38:14 2018 -0700
Committer: Impala Public Jenkins <im...@cloudera.com>
Committed: Fri Oct 26 18:44:58 2018 +0000

----------------------------------------------------------------------
 docker/entrypoint.sh       | 65 ++++++++++++++++++++++++++++++++++-------
 docker/test-with-docker.py |  3 ++
 2 files changed, 58 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/de0c6bd6/docker/entrypoint.sh
----------------------------------------------------------------------
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
index 1dbc6c1..50a38bd 100755
--- a/docker/entrypoint.sh
+++ b/docker/entrypoint.sh
@@ -145,16 +145,18 @@ function start_minicluster {
   # presumably because there's only one layer involved. See
   # https://issues.apache.org/jira/browse/KUDU-1419.
   set -x
-  pushd /home/impdev/Impala/testdata
-  for x in cluster/cdh*/node-*/var/lib/kudu/*/wal; do
-    echo $x
-    # This mv takes time, as it's actually copying into the latest layer.
-    mv $x $x-orig
-    mkdir $x
-    mv $x-orig/* $x
-    rmdir $x-orig
-  done
-  popd
+  if [ "true" = $KUDU_IS_SUPPORTED ]; then
+    pushd /home/impdev/Impala/testdata
+    for x in cluster/cdh*/node-*/var/lib/kudu/*/wal; do
+      echo $x
+      # This mv takes time, as it's actually copying into the latest layer.
+      mv $x $x-orig
+      mkdir $x
+      mv $x-orig/* $x
+      rmdir $x-orig
+    done
+    popd
+  fi
 
   # Wait for postgresql to really start; if it doesn't, Hive Metastore will fail to start.
   for i in {1..120}; do
@@ -387,6 +389,42 @@ function configure_timezone() {
   fi
 }
 
+# Exposes a shell, with the container booted with
+# a minicluster.
+function shell() {
+  echo "Starting minicluster and Impala."
+  # Logs is typically a symlink; remove it if so.
+  rm logs || true
+  mkdir -p logs
+  boot_container
+  impala_environment
+  # Kudu requires --privileged for the Docker container; see
+  # https://issues.apache.org/jira/browse/KUDU-2000. Because
+  # our goal here is convenience for new developers, we
+  # skip kudu if "ntptime" doesn't work, which is a good
+  # proxy for Kudu won't start.
+  if ! ntptime > /dev/null; then
+    export KUDU_IS_SUPPORTED=false
+    KUDU_MSG="Kudu is not started."
+  fi
+  start_minicluster
+  bin/start-impala-cluster.py
+  cat <<"EOF"
+
+==========================================================
+Welcome to the Impala development environment.
+
+The "minicluster" is running; i.e., HDFS, HBase, Hive,
+etc. are running. $KUDU_MSG
+
+To get started, perhaps run:
+  impala-shell.sh -q 'select count(*) from tpcds.web_page'
+==========================================================
+
+EOF
+  exec bash
+}
+
 function main() {
   set -e
 
@@ -394,6 +432,13 @@ function main() {
   CMD="$1"
   shift
 
+  # Treat shell specialy to avoid the extra logging and | cat below.
+  if [[ $CMD = "shell" ]]; then
+    shell
+    # shell shoud have exec'd, so if we get here, it's a failure.
+    exit 1
+  fi
+
   echo ">>> ${CMD} $@ (begin)"
   # Dump environment, for debugging
   env | grep -vE "AWS_(SECRET_)?ACCESS_KEY"

http://git-wip-us.apache.org/repos/asf/impala/blob/de0c6bd6/docker/test-with-docker.py
----------------------------------------------------------------------
diff --git a/docker/test-with-docker.py b/docker/test-with-docker.py
index b350e4c..42808cf 100755
--- a/docker/test-with-docker.py
+++ b/docker/test-with-docker.py
@@ -653,6 +653,9 @@ class TestWithDocker(object):
       self.image = _check_output(
           ["docker", "commit",
            "-c", "LABEL pwd=" + self.git_root,
+           "-c", "USER impdev",
+           "-c", "WORKDIR /home/impdev/Impala",
+           "-c", 'CMD ["/home/impdev/Impala/docker/entrypoint.sh", "shell"]',
            container.id, "impala:built-" + self.name]).strip()
       logging.info("Committed docker image: %s", self.image)
     finally: