[ 
https://issues.apache.org/jira/browse/CASSANDRA-13461?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jeff Jirsa updated CASSANDRA-13461:
-----------------------------------
    Reviewer:   (was: Jeff Jirsa)

> Update circle.yml to run dtests and utests in parallel across containers
> ------------------------------------------------------------------------
>
>                 Key: CASSANDRA-13461
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13461
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Ariel Weisberg
>            Assignee: Ariel Weisberg
>
> I have a circle.yml that parallelizes the dtests and utests over the 4 free 
> available containers. It can be tweaked to support however many containers 
> are available.
> The unit tests pass normally. The dtests run mostly normally. There are 10 or 
> so tests that fail on trunk, but 30 that fail when run in CircleCI. It's 
> still better than not running the dtests IMO. I am currently working on 
> figuring out why the test failures don't match.
> {noformat}
> version: 2
> jobs:
>   build:
>     resource_class: xlarge
>     working_directory: ~/
>     parallelism: 4
>     docker:
>       - image: ubuntu:xenial-20170410
>     steps:
>       - run:
>           name: apt-get install packages
>           command: |
>             echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial 
> main" | tee /etc/apt/sources.list.d/webupd8team-java.list
>             echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu 
> xenial main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
>             apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 
> EEA14886
>             echo oracle-java8-installer shared/accepted-oracle-license-v1-1 
> select true | /usr/bin/debconf-set-selections
>             apt-get update
>             apt-get install -y git-core npm python python-pip python-dev ant 
> ant-optional oracle-java8-installer net-tools
>             ln -s /usr/bin/nodejs /usr/bin/node || true
>       - run:
>           name: Log environment information
>           command: |
>               echo '*** id ***'
>               id
>               echo '*** cat /proc/cpuinfo ***'
>               cat /proc/cpuinfo
>               echo '*** free -m ***'
>               free -m
>               echo '*** df -m ***'
>               df -m
>               echo '*** ifconfig -a ***'
>               ifconfig -a
>               echo '*** uname -a ***'
>               uname -a
>               echo '*** mount ***'
>               mount
>               echo '*** env ***'
>               env
>       - run:
>           name: Clone git repos
>           command: |
>             git clone --single-branch --depth 1 
> https://github.com/riptano/cassandra-dtest ~/cassandra-dtest
>             git clone --single-branch --depth 1 --branch $CIRCLE_BRANCH 
> git://github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git 
> ~/cassandra
>       - run:
>           name: Install junit-merge
>           command: npm install -g junit-merge
>       - run:
>           name: Install virtualenv
>           command: pip install virtualenv 
>       - run:
>           name: Configure virtualenv and python dependencies
>           command: |
>             virtualenv --python=python2 --no-site-packages venv
>             source venv/bin/activate
>             export CASS_DRIVER_NO_EXTENSIONS=true
>             export CASS_DRIVER_NO_CYTHON=true
>             pip install -r ~/cassandra-dtest/requirements.txt
>             pip freeze
>       - run:
>           name: Build Cassandra
>           command: |
>             cd ~/cassandra
>             # Loop to prevent failure due to maven-ant-tasks not downloading 
> a jar..
>             for x in $(seq 1 3); do
>                 ant clean jar
>                 RETURN="$?"
>                 if [ "${RETURN}" -eq "0" ]; then
>                     break
>                 fi
>             done
>             # Exit, if we didn't build successfully
>             if [ "${RETURN}" -ne "0" ]; then
>                 echo "Build failed with exit code: ${RETURN}"
>                 exit ${RETURN}
>             fi
>           no_output_timeout: 20m
>       - run:
>           name: Determine tests to run
>           no_output_timeout: 10m
>           command: |
>             #"$HOME/cassandra-dtest/**/*.py"
>             echo `circleci tests glob "$HOME/cassandra/test/unit/**" 
> "$HOME/cassandra-dtest/**/*.py" | grep -v upgrade_tests | grep -v 
> "cassandra-thrift" | grep -v "thrift_bindings" | grep -v "tools" | grep -v 
> "dtest.py" | grep -v "$HOME/cassandra-dtest/bin" | grep -v "plugins" | 
> circleci tests split --split-by=timings --timings-type=filename` > 
> /tmp/tests.txt
>             echo "***processed tests***"
>             cat /tmp/tests.txt | sed -e 's/\s\+/\n/g' > 
> /tmp/processed_tests.txt
>             cat /tmp/processed_tests.txt
>             echo "***java tests***"
>             cat /tmp/processed_tests.txt | grep "\.java$" > 
> /tmp/java_tests.txt
>             cat /tmp/java_tests.txt
>             cat /tmp/java_tests.txt | cut -c 27-1000000 | grep "Test\.java$" 
> > /tmp/java_tests_final.txt
>             echo "***final java tests***"
>             cat /tmp/java_tests_final.txt
>             echo "***python tests***"
>             cat /tmp/processed_tests.txt | grep "\.py$" > 
> /tmp/python_tests.txt
>             cat /tmp/python_tests.txt
>             echo "***final python tests***"
>             cat /tmp/python_tests.txt | tr '\n' ' ' > 
> /tmp/python_tests_final.txt
>             cat /tmp/python_tests_final.txt
>       - run:
>          name: Run unit tests
>          command: |
>             cd ~/cassandra
>             ant testclasslist -Dtest.classlistfile=/tmp/java_tests_final.txt 
> || true
>          no_output_timeout: 15m
>       - run:
>           name: Run dtests
>           no_output_timeout: 70m
>           command: |
>             source ~/venv/bin/activate
>             cd ~/cassandra-dtest
>             mkdir -p /tmp/dtest
>             export allow_root="yes"
>             export CASSANDRA_DIR=$HOME/cassandra
>             export PYTHONIOENCODING="utf-8"
>             export PYTHONUNBUFFERED=true
>             export CASS_DRIVER_NO_EXTENSIONS=true
>             export CASS_DRIVER_NO_CYTHON=true
>             export CCM_MAX_HEAP_SIZE="2048M"
>             export CCM_HEAP_NEWSIZE="200M"
>             export NUM_TOKENS="32"
>             ./run_dtests.py --vnodes true --nose-options="--verbosity=3 
> --with-xunit --nocapture --attr=!resource-intensive" `cat 
> /tmp/python_tests_final.txt`| tee -a /tmp/dtest/stdout.txt || true
>       - run:
>           name: Collect and merge test results
>           command: |
>             rm -f $HOME/cassandra-dtest/logs/last || true
>             mkdir -p /tmp/results/junit || true
>             junit-merge ~/cassandra/build/test/output/*.xml 
> ~/cassandra-dtest/nosetests.xml || true
>             cp  merged-test-results.xml /tmp/results/junit || true
> #            junit-merge ~/cassandra/build/test/output/*.xml 
> ~/cassandra-dtest/nosetests.xml
>       - store_test_results:
>           path: /tmp/results
>       - store_artifacts:
>           path: ~/cassandra/build/test/output
>           destination: junitxml
>       - store_artifacts:
>           path: ~/cassandra/build/test/logs
>           destination: logs
>       - store_artifacts:
>           path: /tmp/dtest
>           destination: dtest
>       - store_artifacts:
>           path: ~/cassandra-dtest/logs
>           destination: dtest_logs
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to