You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-10-30 07:25:34 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			172 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Should be executed by root
 | |
| set -eo pipefail
 | |
| 
 | |
| SCRIPT_LOCATION=$(dirname "$0")
 | |
| COLUMNSTORE_SOURCE_PATH=$(realpath "$SCRIPT_LOCATION"/../)
 | |
| MDB_SOURCE_PATH=$(realpath "$SCRIPT_LOCATION"/../../../..)
 | |
| 
 | |
| source "$SCRIPT_LOCATION"/utils.sh
 | |
| 
 | |
| message "Arguments received: $@"
 | |
| 
 | |
| optparse.define short=c long=container-name desc="Name of the Docker container to run tests in" variable=CONTAINER_NAME
 | |
| optparse.define short=i long=docker-image desc="Docker image name to start container from" variable=DOCKER_IMAGE
 | |
| optparse.define short=r long=result-path desc="Name suffix used in core dump file path" variable=RESULT
 | |
| optparse.define short=s long=do-setup desc="Run setup-repo.sh inside the container" variable=DO_SETUP
 | |
| optparse.define short=u long=packages-url desc="Packages url" variable=PACKAGES_URL
 | |
| optparse.define short=l long=install-libcpp desc="Install libcpp" variable=INSTALL_LIBCPP default=false value=true
 | |
| 
 | |
| source $(optparse.build)
 | |
| 
 | |
| if [[ "$EUID" -ne 0 ]]; then
 | |
|     error "Please run script as root"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| if [[ -z "${CONTAINER_NAME:-}" || -z "${DOCKER_IMAGE:-}" || -z "${RESULT:-}" || -z "${DO_SETUP:-}" || -z "${PACKAGES_URL:-}" ]]; then
 | |
|     warn "Please provide --container-name, --docker-image, --result-path, --packages-url and --do-setup parameters, e.g. ./prepare_test_stage.sh --container-name smoke11212 --docker-image detravi/ubuntu:24.04 --result-path ubuntu24.04 --packages-url https://cspkg.s3.amazonaws.com/stable-23.10/pull_request/91/10.6-enterprise --do-setup true"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| select_pkg_format ${RESULT}
 | |
| 
 | |
| start_container() {
 | |
|     message Starting $DOCKER_IMAGE
 | |
|     if [[ $PKG_FORMAT == "rpm" ]]; then
 | |
|         SYSTEMD_PATH="/usr/lib/systemd/systemd"
 | |
|         MTR_PATH="/usr/share/mysql-test"
 | |
|     else
 | |
|         # Debian/Ubuntu based
 | |
|         SYSTEMD_PATH="/lib/systemd/systemd"
 | |
|         MTR_PATH="/usr/share/mysql/mysql-test"
 | |
|     fi
 | |
| 
 | |
|     docker_run_args=(
 | |
|         --env OS="$RESULT"
 | |
|         --env PACKAGES_URL="$PACKAGES_URL"
 | |
|         --env DEBIAN_FRONTEND=noninteractive
 | |
|         --env MCS_USE_S3_STORAGE=0
 | |
|         --name "$CONTAINER_NAME"
 | |
|         --cgroupns=host
 | |
|         --ulimit core=-1
 | |
|         --privileged
 | |
|         --detach
 | |
|     )
 | |
| 
 | |
|     if [[ "$CONTAINER_NAME" == *smoke* ]]; then
 | |
|         docker_run_args+=(--memory 3g)
 | |
|     elif [[ "$CONTAINER_NAME" == *mtr* ]]; then
 | |
|         docker_run_args+=(--shm-size=500m --memory 13g --env MYSQL_TEST_DIR="$MTR_PATH")
 | |
|     elif [[ "$CONTAINER_NAME" == *cmapi* ]]; then
 | |
|         docker_run_args+=(--env PYTHONPATH="${PYTHONPATH}")
 | |
|     elif [[ "$CONTAINER_NAME" == *upgrade* ]]; then
 | |
|         docker_run_args+=(--env UCF_FORCE_CONFNEW=1 --volume /sys/fs/cgroup:/sys/fs/cgroup:ro)
 | |
|     elif [[ "$CONTAINER_NAME" == *regression* ]]; then
 | |
|         docker_run_args+=(--shm-size=500m --memory 15g)
 | |
|     else
 | |
|         error "Unknown container type: $CONTAINER_NAME"
 | |
|         exit 1
 | |
|     fi
 | |
| 
 | |
|     # Debian/Ubuntu: systemd expects cgroups and tmpfs for /run
 | |
|     if [[ $PKG_FORMAT == "deb" ]]; then
 | |
|         docker_run_args+=(--tmpfs /run --tmpfs /run/lock)
 | |
|     fi
 | |
|     # Debian 13: mount cgroup hierarchy (writable, systemd needs to manage cgroups)
 | |
|     if [[ $DOCKER_IMAGE == *"debian:13"* ]]; then
 | |
|         docker_run_args+=(--volume /sys/fs/cgroup:/sys/fs/cgroup)
 | |
|     fi
 | |
| 
 | |
|     # Add image - must come after all docker run options
 | |
|     docker_run_args+=("$DOCKER_IMAGE")
 | |
| 
 | |
|     # Always run systemd as PID 1 to enable systemctl-based waiting
 | |
|     docker_run_args+=("$SYSTEMD_PATH" --unit=basic.target)
 | |
| 
 | |
|     docker run "${docker_run_args[@]}"
 | |
|     sleep 5
 | |
| 
 | |
|     bash "$COLUMNSTORE_SOURCE_PATH"/core_dumps/docker-awaiter.sh "$CONTAINER_NAME"
 | |
| 
 | |
|     if ! docker ps -q --filter "name=${CONTAINER_NAME}" | grep -q .; then
 | |
|         error "Container '$CONTAINER_NAME' has not started!"
 | |
|         exit 1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| prepare_container() {
 | |
|     if [[ "$RESULT" != *rocky* ]]; then
 | |
|         execInnerDocker "$CONTAINER_NAME" 'sed -i "s/exit 101/exit 0/g" /usr/sbin/policy-rc.d'
 | |
|     fi
 | |
| 
 | |
|     #list_cgroups
 | |
|     echo "Docker CGroups opts here"
 | |
|     ls -al /sys/fs/cgroup/cgroup.controllers || true
 | |
|     ls -al /sys/fs/cgroup/ || true
 | |
|     ls -al /sys/fs/cgroup/memory || true
 | |
| 
 | |
|     execInnerDocker "$CONTAINER_NAME" 'echo Inner Docker CGroups opts here'
 | |
|     execInnerDocker "$CONTAINER_NAME" 'ls -al /sys/fs/cgroup/cgroup.controllers || true'
 | |
|     execInnerDocker "$CONTAINER_NAME" 'ls -al /sys/fs/cgroup/ || true'
 | |
|     execInnerDocker "$CONTAINER_NAME" 'ls -al /sys/fs/cgroup/memory || true'
 | |
| 
 | |
|     # Prepare core dump directory inside container
 | |
|     execInnerDocker "$CONTAINER_NAME" 'mkdir -p core && chmod 777 core'
 | |
|     docker cp "$COLUMNSTORE_SOURCE_PATH"/core_dumps/. "$CONTAINER_NAME":/
 | |
|     docker cp "$COLUMNSTORE_SOURCE_PATH"/build/utils.sh "$CONTAINER_NAME":/
 | |
|     docker cp "$COLUMNSTORE_SOURCE_PATH"/setup-repo.sh "$CONTAINER_NAME":/
 | |
| 
 | |
|     if [[ "$DO_SETUP" == "true" ]]; then
 | |
|         execInnerDocker "$CONTAINER_NAME" '/setup-repo.sh'
 | |
|     fi
 | |
| 
 | |
|     # FIX THIS HACK
 | |
|     if [[ "$INSTALL_LIBCPP" == "true" ]]; then
 | |
|         docker cp "$COLUMNSTORE_SOURCE_PATH"/build/install_clang_deb.sh "$CONTAINER_NAME":/
 | |
|         docker cp "$COLUMNSTORE_SOURCE_PATH"/build/install_libc++.sh "$CONTAINER_NAME":/
 | |
| 
 | |
|         execInnerDocker "$CONTAINER_NAME" '/install_clang_deb.sh 20'
 | |
|         execInnerDocker "$CONTAINER_NAME" '/install_libc++.sh 20'
 | |
|     fi
 | |
| 
 | |
|     # install deps
 | |
|     if [[ "$RESULT" == *rocky* ]]; then
 | |
|         execInnerDockerWithRetry "$CONTAINER_NAME" 'yum --nobest update -y && yum --nobest install -y cracklib-dicts diffutils elfutils epel-release expect findutils iproute gawk gcc-c++ gdb hostname lz4 patch perl procps-ng rsyslog sudo tar wget which'
 | |
|     else
 | |
|         change_ubuntu_mirror_in_docker "$CONTAINER_NAME" "us"
 | |
|         execInnerDockerWithRetry "$CONTAINER_NAME" 'apt update -y && apt install -y elfutils expect findutils iproute2 g++ gawk gdb hostname lz4 patch procps rsyslog sudo tar wget'
 | |
|     fi
 | |
| 
 | |
|     # Configure core dump naming pattern
 | |
|     execInnerDocker "$CONTAINER_NAME" 'sysctl -w kernel.core_pattern="/core/%E_${RESULT}_core_dump.%p"'
 | |
| 
 | |
|     #Install columnstore in container
 | |
|     message "Installing columnstore..."
 | |
|     SERVER_VERSION=$(grep -E 'MYSQL_VERSION_(MAJOR|MINOR)' $MDB_SOURCE_PATH/VERSION | cut -d'=' -f2 | paste -sd. -)
 | |
|     message "Server version of build is $SERVER_VERSION"
 | |
| 
 | |
|     if [[ "$RESULT" == *rocky* ]]; then
 | |
|         execInnerDockerWithRetry "$CONTAINER_NAME" 'yum install -y MariaDB-columnstore-engine MariaDB-test'
 | |
|     else
 | |
| 
 | |
|         execInnerDockerWithRetry "$CONTAINER_NAME" 'apt update -y && apt install -y mariadb-plugin-columnstore mariadb-test mariadb-test-data mariadb-plugin-columnstore-dbgsym mariadb-test-dbgsym'
 | |
|         if [[ $SERVER_VERSION == '10.6' ]]; then
 | |
|             execInnerDockerWithRetry "$CONTAINER_NAME" 'apt install -y mariadb-client-10.6-dbgsym mariadb-client-core-10.6-dbgsym mariadb-server-10.6-dbgsym mariadb-server-core-10.6-dbgsym'
 | |
|         else
 | |
|             execInnerDockerWithRetry "$CONTAINER_NAME" 'apt install -y mariadb-client-dbgsym mariadb-client-core-dbgsym mariadb-server-dbgsym mariadb-server-core-dbgsym'
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     sleep 5
 | |
|     message "PrepareTestStage completed in $CONTAINER_NAME"
 | |
| }
 | |
| 
 | |
| if [[ -z $(docker ps -q --filter "name=${CONTAINER_NAME}") ]]; then
 | |
|     start_container
 | |
|     prepare_container
 | |
| else
 | |
|     message "Container ${CONTAINER_NAME} is already running, skipping prepare step"
 | |
| fi
 |