Skip to content
Snippets Groups Projects
Select Git revision
  • 544590635dfd211a9dd251bcaabd5f18f60edc46
  • master default protected
  • renovate/bootstrap-5.x
  • renovate/purgecss-webpack-plugin-7.x
  • renovate/mini-css-extract-plugin-2.x
  • renovate/html-webpack-plugin-5.x
  • renovate/golang-1.x
  • renovate/css-loader-6.x
8 results

links.go

Blame
  • repl_manager.sh 1.88 KiB
    #!/bin/sh
    
    MASTERELECTION_NAME=${MASTERELECTION_NAME:-mariadb}
    
    if [ -z "${PUBLIC_ADDR}" ]; then
        echo "ERROR: PUBLIC_ADDR is undefined" >&2
        exit 2
    fi
    
    wait_for_mysql() {
        echo "Waiting for MySQL server to start up..." >&2
        while ! mysqladmin ping >/dev/null 2>&1; do
    	sleep 1
        done
    }
    
    log() {
        echo " [*] $*" >&2
    }
    
    become_master() {
        log "Becoming master"
        mysql -NBe "STOP SLAVE; RESET MASTER"
    }
    
    become_slave() {
        local master_addr="$1"
        local master_port="${master_addr##*:}"
        local master_host="${master_addr%%:*}"
    
        log "Switching master to ${master_addr}"
        
        mysql -NBe "CHANGE MASTER TO MASTER_HOST='${master_host}' MASTER_PORT=${master_port} MASTER_USER='replication' MASTER_PASS='${REPL_PASSWORD}' MASTER_CONNECT_RETRY=10 MASTER_USE_GTID=current_pos MASTER_AUTO_POSITION=1; START SLAVE"
        # TODO: Wait for replication to catch up.
    }
    
    become_unknown() {
        log "Stopping slave (no master)"    
        mysql -NBe "STOP SLAVE;"
    }
    
    run_masterelection() {
        local args
        args="--name=${MASTERELECTION_NAME} --service-addr=${PUBLIC_ADDR}"
        if [ -n "${ETCD_SRV}" ]; then
    	args="${args} --etcd-srv=${ETCD_SRV}"
        fi
        if [ -n "${ETCD_URLS}" ]; then
    	args="${args} --etcd-urls=${ETCD_URLS}"
        fi
        if [ -n "${ETCD_SSL_CERT}" ]; then
    	args="${args} --etcd-ssl-cert=${ETCD_SSL_CERT}"
        fi
        if [ -n "${ETCD_SSL_KEY}" ]; then
    	args="${args} --etcd-ssl-key=${ETCD_SSL_KEY}"
        fi
        if [ -n "${ETCD_SSL_CA}" ]; then
    	args="${args} --etcd-ssl-ca=${ETCD_SSL_CA}"
        fi
    
        exec /usr/bin/masterelection \
    	${args} \
    	--master-cmd="/repl_manager.sh master" \
    	--slave-cmd="/repl_manager.sh slave"
    }
    
    case "$1" in
        master)
    	become_master
    	;;
    
        slave)
    	if [ -n "${MASTER_ADDR:-}" ]; then
    	    become_slave "${MASTER_ADDR}"
    	else
    	    become_unknown
    	fi
    	;;
    
        "")
    	sleep 1
    	wait_for_mysql
    
    	log "Starting replication manager"
    	run_masterelection
    	;;
    
    esac
    
    exit 0