BryanDavis has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/275363

Change subject: Use parallel in git-update
......................................................................

Use parallel in git-update

Use GNU Parallel in the run-git-update script that powers the `vagrant
git-update` command. Both git and composer steps are updated to use
parallel processing. The service updates are not processed with parallel
yet as it seems to actually slow down npm (if such a thing can be
imagined).

Bug: T72321
Change-Id: I79cec3d67160089c4e4e658f55971a0770aaaf81
---
M puppet/modules/mediawiki/manifests/init.pp
M puppet/modules/mediawiki/templates/run-git-update.erb
2 files changed, 70 insertions(+), 59 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant 
refs/changes/63/275363/1

diff --git a/puppet/modules/mediawiki/manifests/init.pp 
b/puppet/modules/mediawiki/manifests/init.pp
index e9d1a69..a71f19c 100644
--- a/puppet/modules/mediawiki/manifests/init.pp
+++ b/puppet/modules/mediawiki/manifests/init.pp
@@ -72,6 +72,8 @@
     include ::mediawiki::jobrunner
     include ::mediawiki::multiwiki
 
+    require_package('parallel')
+
     $managed_settings_dir = "${settings_dir}/puppet-managed"
 
     git::clone { 'mediawiki/core':
diff --git a/puppet/modules/mediawiki/templates/run-git-update.erb 
b/puppet/modules/mediawiki/templates/run-git-update.erb
index 56fa1a2..de7a048 100644
--- a/puppet/modules/mediawiki/templates/run-git-update.erb
+++ b/puppet/modules/mediawiki/templates/run-git-update.erb
@@ -2,9 +2,9 @@
 # Update local git repositories
 # Command run in VM by `vagrant git-update`
 
-. /etc/profile.d/set_MW_INSTALL_PATH.sh
+source /etc/profile.d/set_MW_INSTALL_PATH.sh
 
-set -u
+set -o nounset
 declare -a UPDATE_ERRORS
 
 # Set default values for configuration variables
@@ -13,13 +13,40 @@
 : ${NPM_CONFIG_CACHE=<%= scope['::npm::cache_dir'] %>}
 : ${SERVICE_CONF_DIR=<%= scope['::service::conf_dir'] %>}
 
+export SHARE_OWNER SHARE_GROUP NPM_CONFIG_CACHE SERVICE_CONF_DIR
 UPDATE_ERRORS=( )
 
-function pull {
-  local PRINT_EMPTY_LINE=''
-  if [[ $# -eq 0 ]]; then
+function mwv_service_update {
+  ERR=''
+  source "$1"
+  echo -e "\e[36m==> Updating ${SERVICE_NAME} ...\e[0m"
+  if [[ -n $NEED_CHDIR && -d $SERVICE_DIR ]]; then
+    if [[ -n $DO_PULL ]]; then
+      mwv_git_pull "$SERVICE_DIR" inline
+    fi
+    cd $SERVICE_DIR
+    if [[ -n $UPDATE_CMD ]]; then
+      echo "[*] Updating dependencies for ${SERVICE_NAME} ..."
+      if ! /bin/sh -c "$UPDATE_CMD"; then
+        ERR="Could not update dependencies of ${SERVICE_NAME} !"
+        echo -e "\e[1;31m ***** ${ERR}\e[0m"
+        UPDATE_ERRORS+=("${ERR}")
+      fi
+    fi
+  fi
+  if [[ -n $DO_RESTART && -z $ERR ]]; then
+    echo "[*] Restarting service ${RESTART_NAME} ..."
+    sudo service ${RESTART_NAME} restart
+  fi
+  echo
+}
+export -f mwv_service_update
+
+function mwv_git_pull {
+  local OUTPUT_INLINE=${2:-}
+  cd "$1"
+  if [[ -z $OUTPUT_INLINE ]]; then
     echo -e "\e[36m==> Updating $(pwd) ...\e[0m"
-    PRINT_EMPTY_LINE='yes'
   else
     echo "[*] Updating repo in $(pwd) ..."
   fi
@@ -68,8 +95,26 @@
     UPDATE_ERRORS+=("$ERR")
   fi
 
-  [[ -n $PRINT_EMPTY_LINE ]] && echo
+  [[ -z $OUTPUT_INLINE ]] && echo
 }
+export -f mwv_git_pull
+
+function mwv_composer {
+  cd "$1"
+  if git ls-files --error-unmatch composer.lock >/dev/null 2>&1; then
+      # composer.lock is git-versioned, so rely on it
+      COMPOSER_CMD=install
+      COMPOSER_ACTION=Installing
+  else
+      COMPOSER_CMD=update
+      COMPOSER_ACTION=Updating
+  fi
+
+  echo -e "\e[36m==> $COMPOSER_ACTION composer dependencies in $(pwd) ...\e[0m"
+  /usr/local/bin/composer $COMPOSER_CMD --no-interaction --optimize-autoloader
+  echo
+}
+export -f mwv_composer
 
 # Expose the needed npm env vars
 export NPM_CONFIG_CACHE
@@ -81,66 +126,29 @@
 # of larger modules cause npm to run out of memory
 sudo rm -rf ${NPM_CONFIG_CACHE}/* /home/vagrant/.npm
 
+# Update services
 for SRVCONF in ${SERVICE_CONF_DIR}/*.conf; do
-  ERR=''
-  source $SRVCONF
-  echo -e "\e[36m==> Updating ${SERVICE_NAME} ...\e[0m"
-  if [[ -n $NEED_CHDIR && -d $SERVICE_DIR ]]; then
-    cd $SERVICE_DIR
-    [[ -n $DO_PULL ]] && pull no_title
-    if [[ -n $UPDATE_CMD ]]; then
-      echo "[*] Updating dependencies for ${SERVICE_NAME} ..."
-      if ! /bin/sh -c "$UPDATE_CMD"; then
-        ERR="Could not update dependencies of ${SERVICE_NAME} !"
-        echo -e "\e[1;31m ***** ${ERR}\e[0m"
-        UPDATE_ERRORS+=("${ERR}")
-      fi
-    fi
-  fi
-  if [[ -n $DO_RESTART && -z $ERR ]]; then
-    echo "[*] Restarting service ${RESTART_NAME} ..."
-    sudo service ${RESTART_NAME} restart
-  fi
-  echo
+    mwv_service_update $SRVCONF
 done
 
-cd $MW_INSTALL_PATH
-pull
-
-for DIR in ${MW_INSTALL_PATH}/extensions/*; do
+# Update git checkouts in parallel
+for DIR in $MW_INSTALL_PATH \
+    ${MW_INSTALL_PATH}/extensions/* \
+    ${MW_INSTALL_PATH}/skins/*; do
   if [[ -d $DIR ]] && [[ -d ${DIR}/.git ]]; then
-    pushd $DIR > /dev/null
-    pull
-    popd > /dev/null
+    echo $DIR
   fi
-done
+done |
+parallel --verbose --noswap --load "100%" --keep-order mwv_git_pull
 
-for DIR in ${MW_INSTALL_PATH}/skins/*; do
-  if [[ -d $DIR ]] && [[ -d ${DIR}/.git ]]; then
-    pushd $DIR > /dev/null
-    pull
-    popd > /dev/null
-  fi
-done
-
-for DIR in . ${MW_INSTALL_PATH}/extensions/*; do
+# Update composer dependencies in parallel
+for DIR in $MW_INSTALL_PATH \
+    ${MW_INSTALL_PATH}/extensions/*; do
   if [[ -d $DIR ]] && [[ -f ${DIR}/composer.json ]]; then
-    pushd $DIR > /dev/null
-    if git ls-files --error-unmatch composer.lock >/dev/null 2>&1; then
-      # composer.lock is git-versioned, so rely on it
-      COMPOSER_CMD=install
-      COMPOSER_ACTION=Installing
-    else
-      COMPOSER_CMD=update
-      COMPOSER_ACTION=Updating
-    fi
-
-    echo -e "\e[36m==> $COMPOSER_ACTION composer dependencies in $(pwd) 
...\e[0m"
-    /usr/local/bin/composer $COMPOSER_CMD --no-interaction 
--optimize-autoloader
-    popd > /dev/null
-    echo
+    echo $DIR
   fi
-done
+done |
+parallel --verbose --noswap --load "100%" --keep-order mwv_composer
 
 echo -e "\e[36m==> Updating database ...\e[0m"
 /usr/local/bin/foreachwiki update.php --quick --doshared
@@ -150,3 +158,4 @@
   echo -e "\e[1;31m ************* Errors ***********\e[0m"
   printf -- '* %s\n' "${UPDATE_ERRORS[@]}"
 fi
+# vim:sw=2:ts=2:sts=2:et:ft=sh:

-- 
To view, visit https://gerrit.wikimedia.org/r/275363
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I79cec3d67160089c4e4e658f55971a0770aaaf81
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: master
Gerrit-Owner: BryanDavis <bda...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to